鄧三星 孫賽偉 楊蒙蒙,2 張 凱 李 帥
(1. 黃河交通學院,河南 焦作 454950;2. 河南省智能制造技術與裝備工程技術研究中心,河南 焦作 454950)
目前,中國傳統飲料瓶蓋和瓶身的回收、分揀大多依靠人工完成,費時費力、勞動成本高、識別精度低。而塑料瓶體自動化分揀時又易受土壤、飲料殘渣等殘留物干擾,分揀準確率較低,尤其在弱光環境下[1-3]。
隨著機器視覺和圖像處理技術的發展,越來越多的學者投入到食品包裝劃痕檢測、瓶身缺陷檢測、瓶蓋安裝異常檢測[4]等方面的研究。周曉等[3]采集了各種塑料瓶圖像,利用具有殘差連接的卷積神經網絡,引入具有自歸一化性質的SeLU激勵函數進行訓練,檢測精度優于傳統方法,但系統需配備工業相機,成本較高。張超等[8]采用基于像素點的飲料瓶瓶蓋檢測算法,判斷瓶蓋安裝情況,該算法實用性強,但未涉及到瓶蓋顏色識別問題。岳昊等[5]利用真空吸附技術,使用工業相機對附帶油污、殘次的醫用瓶蓋進行圖像檢測,準確率高,但系統組成復雜,體積較大。吳蘭蘭等[6]針對 PET飲料瓶在封蓋過程中的缺陷問題,提出了一種基于機器視覺技術的檢測算法,主要研究瓶蓋安裝是否到位,識別準確率高,但并未涉及瓶蓋顏色識別問題。
目前基于機器視覺的顏色識別設備由核心板、外圍輸入輸出設備、攝像頭組成[7],需要高性能硬件作為支撐。最常見的X86架構硬件平臺由于其硬件結構的固有特點導致整個平臺所占體積較大,設備小型化已成為研究的重點方向[8]。因此提出一種基于ARM處理器的小型飲料瓶蓋顏色識別系統設計方案,平臺尺寸僅為75 mm×50 mm,通過單板硬件與實時操作系統實現閾值設置、目標輪廓檢測、目標框出等功能,以期實現瓶蓋的高精度分揀,提高不同顏色瓶蓋的回收分揀效率。
該系統主要由處理器、存儲器以及片外外圍電路組成,通過單板硬件與實時操作系統實現機器視覺識別。系統所用攝像頭可為24PIN排插式攝像頭或USB直插式攝像頭,方便更換與升級。處理器選用基于Cortex-A7[9]架構的Allwinner Quad-core H3芯片,該芯片集成了最新的SmartColor麗色顯示引擎,支持LPDDR2/LPDDR3/DDR3/DDR3L的SDRAM,支持H.265/HEVC 4K@30fps視頻硬解,為機器視覺系統提供強大的處理性能。隨機存儲器選用三星的K4B4G1646D-BCK0,該存儲器內存顆粒速率達1 600 Mbps,工作電壓為1.5 V,最大容量為4 Gb,封裝為96FBGA。選用TF卡作為只讀存儲器,因為TF卡具有可更換的特性,方便設備維護與升級。片外外圍電路可選范圍較廣,根據需求主要設計片外電路有HDMI視頻輸出接口電路、Type-C接口電路、網絡傳輸接口電路、USB 2.0接口電路、24PIN攝像頭接口電路。系統組成關系如圖1所示。

圖1 系統組成關系Figure 1 System composition
研究采用Linux作為實時操作系統,通過在操作系統上部署所需的應用程序來實現所需的功能,系統架構流程關系如圖2所示。

圖2 系統架構流程關系Figure 2 System architecture process relationship
Allwinner Quad-core H3芯片的引腳連接復雜,具體設計時使用接口中DRAM0系列引腳與DDR3內存顆粒連接;HDMI系列引腳用于與HDMI視頻輸出接口連接;USB0系列針腳與Type-C的OTG引腳相連,主要用于擴展相關USB接口;USB1與USB2系列引腳用于USB接口擴展;UART0系列引腳與CP2102芯片將Type-C輸入轉化為異步串行數據輸入;SDC0系列引腳為ROM讀寫總線;OSC系列引腳接外部晶振;EPHY系列引腳為網口連接引腳,CSI0系列引腳為攝像頭接入引腳。在各個外圍電路設計中根據外圍電路設計的負載不同設計不同的方案,小型飲料瓶蓋顏色識別系統中的高速信號線需做好信號完整性分析以保證硬件能夠正常運行。整體硬件設計結構關系圖如圖3所示。

圖3 硬件結構關系Figure 3 Hardware structure relationship
由于各個接口的負載類型不同,供電電壓也不同,所需的電流也需滿足設計要求。系統使用多個供電芯片,各個供電芯片均有不同的供電對象,滿足了各部分接口的供電需求,如圖4所示。其中3.3 V供電對象較多,有Camera以及WIFI,少部分為1.5 V供電,該電壓供電采用雙供電芯片RT9011,可以輸出3.3 V與1.5 V電壓。重要的DDR3內存芯片供電由1.5 V輸出RT8059芯片支持,輸出效率約95%。CPU供電由MP2143[10]系列芯片供電,供電電壓為1.3 V。RJ45網絡接口供電電路由SY8089A芯片提供2.5 V電壓。MP2144芯片為I/O設備提供3.3 V電壓,同時增加備用供電LP2992芯片以提高供電電流,滿足多個接口設計需求。RT8059芯片為整個系統提供1.2 V時序電壓。整個供電系統輸出效率較高,需要5 V/2 A電源通過Type-C輸入,USBHost與HDMI為默認的5 V供電,無需進行降壓處理。

圖4 供電關系分配Figure 4 Power supply relationship distribution
接口電路設計中,USB接口以及HDMI接口支持熱插拔,該類接口由于數據線直連CPU需要對CPU做出一定的靜電保護,防止CPU被損壞,需在電路中設計其他非熱插拔接口。兩個普通USB口供電為5 V,電源腳與供電直連,而數據線與CPU直連。考慮到USB口的特殊性,需要對直連的數據線做一定的保護措施,防止靜電擊穿CPU。設計采用瞬態電壓抑制器ESD9B5V,能夠保護敏感電子元件免受靜電放電(ESD)擊穿,適用于移動電話、精密儀表、PAD、數碼相機等電子設備[11]。ESD9B5V防靜電能力符合IEC61000-4-2 ESD抗擾度4級測試,選用封裝形式為FBC-02C。HDMI接口電路圖如圖5所示。

圖5 HDMI接口電路Figure 5 HDMI interface circuit
設計采用DDR3內存,CPU與內存間傳輸速度非常快,屬于高速電路,考慮到制作工藝以及成本,選擇四層板方案。利用HyperLynx的LineSim工具對高速電路進行阻抗匹配仿真分析,用于布線前仿真,驗證疊層結構以及布線的阻抗匹配。系統結構板厚1.6 mm,上層夾層PP板厚0.1 mm,介電常數為4.05;中層夾層PP板厚1.265 mm,介電常數為4.5;下層夾層PP板厚為0.1 mm,介電常數為4.05;頂層與底層走線層厚0.035 mm,中間電源層厚0.017 5 mm。將上述參數轉化單位設置進傳輸線模型中,如圖6所示。

圖6 傳輸線參數設置Figure 6 Transmission line parameter settings
線寬參數設置為5 mil,以使線路阻抗與信號源內阻匹配。仿真時采用的激勵源參數與上圖設置相同。從圖7 中判斷眼圖[12]左右抖動位置為一點,信號抖動小,上下超出眼圖界限的波形少,噪聲干擾小,在標準誤差內傳輸線設置符合要求。

圖7 阻抗匹配眼圖Figure 7 Impedance matching eye diagram
基于仿真所得的線寬數據,四層板的信號走線層主要為上、下兩層。為實現信號層走線合理布局,走線距離合適,線徑參數設置不能過小,在DDR走線時使DDR盡量靠近CPU,參考平面完整,線與線之間等長、差分、等線寬。為有效抑制EMI,設計DQS與CK兩類數據線[13],對內等長且誤差小于10 mil;DQS0-7相對于DQS0等長,誤差小于50 mil;DQS8-15相對于DQS1等長,誤差小于50 mil;DQSx相對于CK等長誤差為800 mil。等長線通常在PCB板上進行蛇形走線,而蛇形走線形成的LC電路具有一定的濾波作用。圖8為上下布線層板層圖,所選的主要元器件均為貼片式元器件,BGA焊盤覆蓋綠油。

圖8 PCB板層設計Figure 8 PCB layer design
在整板完成后需對其進行系統固件燒錄,將系統鏡像寫入啟動儲存設備中,使其正常運行。操作系統燒錄方式:首先在系統官網上下載系統鏡像,系統鏡像格式一般為“.img”格式;將系統鏡像下載到本地儲存設備上,作燒錄使用;準備一張高速TF卡,速度傳輸規范符合Class10(10 MB/s)規范,使用讀卡器將TF卡插入電腦中,WIN系統下將TF卡磁盤扇區刪除,然后通過Allwinner Quad-core H3芯片的專業燒錄軟件燒錄系統,燒錄完成后即可運行。
在系統基本搭建完畢后即可根據搭載的外圍設備類型編寫應用程序。在ARM平臺上運行調試,選擇Python編譯環境,使用Jupyter Notebook編譯軟件,在終端下輸入jupyter notebook即可進入Jupyter Notebook中[14]。程序采用基于HSV顏色空間的顏色識別算法,該算法相對于基于RGB顏色空間的算法程序具有識別概率高的優點[15]。
核心圖像處理程序:
import enum
def bgr8_to_jpeg(value, quality=75):
return bytes(cv2.imencode('.jpg', value)[1])
def f(x):
return x
font = cv2.FONT_HERSHEY_SIMPLEX
lower_red = np.array([0, 43, 46]) #紅色閾值下界
higher_red = np.array([10, 255, 255])#紅色閾值上界
lower_green = np.array([36, 150, 59])#綠色閾值下界
higher_green = np.array([71, 255, 255])#綠色閾值上界
lower_blue = np.array([100, 43, 46])#藍色閾值下界
higher_blue = np.array([124, 255, 255]) #藍色閾值上界
def video_demo():
capture=cv.VideoCapture(0)
while(True):
ref,frame=capture.read()
img_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask_red = cv2.inRange(img_hsv, lower_red, higher_red) #過濾出紅色部分,獲得紅色的掩膜
mask_green = cv2.inRange(img_hsv, lower_green, higher_green) #獲得綠色部分掩膜
mask_green = cv2.medianBlur(mask_green, 7) #中值濾波
mask_red = cv2.medianBlur(mask_red, 7) #中值濾波
mask_blue = cv2.inRange(img_hsv, lower_blue, higher_blue) #獲得綠色部分掩膜
mask_blue = cv2.medianBlur(mask_blue, 7) #中值濾波
mask = cv2.bitwise_or(mask_green, mask_red) #三部分掩膜進行按位或運算
print(mask_red)
cnts1, hierarchy1 =cv2.findContours(mask_red, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
#輪廓檢測紅色
cnts2, hierarchy2 =cv2.findContours(mask_blue, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
#輪廓檢測藍色
cnts3, hierarchy3 =cv2.findContours(mask_green,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
#輪廓檢測綠色
for cnt in cnts1:
(x, y, w, h) = cv2.boundingRect(cnt) #該函數返回矩陣4個點
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2) #將檢測到的顏色框出
cv2.putText(frame, 'red', (x, y - 5), font, 0.7, (0, 0, 255), 2)
for cnt in cnts2:
(x, y, w, h) = cv2.boundingRect(cnt) #該函數返回矩陣4個點
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) #將檢測到的顏色框出
cv2.putText(frame, 'blue', (x, y - 5), font, 0.7, (255, 0, 0), 2)
for cnt in cnts3:
(x, y, w, h) = cv2.boundingRect(cnt)#該函數返回矩陣4個點
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) #將檢測到的顏色框出
cv2.putText(frame, 'green', (x, y - 5), font, 0.7, (0, 255, 0), 2)
cv2.imshow('frame', frame)
image_widget.value = bgr8_to_jpeg(frame)
c=cv.waitKey(30) & 0xff
if c==27:
capture.release()
break
video_demo()
cv.waitKey()
cv.destroyAllWindows()
系統采用海康威視DS-E11攝像頭,像素為100萬,焦距為3.6 mm。核心板插上用于機器視覺識別的攝像頭,連接網絡,運行應用程序,安裝依賴的包文件。在終端中操作首先需要修改為中國的軟件源,然后部署一些必備的軟件包來安裝依賴源。系統所需的主要庫文件有OpenCV、Python3以及一系列圖形與視頻操作庫。
針對系統顏色識別功能,分別選用常見的紅、綠、藍3種顏色飲料瓶蓋進行測試。Jupyter Notebook檢測對象為藍色瓶蓋與藍色塑料條,從檢測結果可以看出,系統可以將檢測目標完整框出,顯示圖形范圍,準確識別藍色,顯示為“blue”,見圖9。

圖9 顏色識別測試效果Figure 9 Color recognition test effect
為驗證系統測試準確度,在強、弱光條件下對紅、綠、藍3種顏色進行識別測試。結果表明系統工作穩定,顏色識別效果好,具體測試數據見表1。

表1 強、弱光條件下顏色識別測試Table 1 Color recognition test under bright and low light conditions %
在強、弱光條件下,系統對3種顏色的識別率達到92.7%,弱光條件下的顏色識別率低于強光,其中綠色識別率較紅、藍顏色識別率低。試驗方法(精度90.9%)比傅里葉描述子[16](52.2%)方法的檢測精度更高。
系統采用OpenCV庫,使用Haar Cascade進行人臉檢測,其測試效果如圖10所示。可以看出,系統能夠對實時圖像中人臉進行識別,用方框框出,并進行動態追蹤。

圖10 人臉識別測試效果Figure 10 Face recognition test effect
基于ARM的小型飲料瓶蓋顏色識別系統能夠完成不同光線條件下的顏色識別,識別率達到92.7%,優于傅里葉描述子方法。后續可通過優化機器視覺算法并選用的高性能的CPU,使系統能夠勝任復雜工業環境下物品分揀、食品檢測等工作。