一、項目內容
本方案將搭建一個基于機器視覺的流水線檢測手機條碼平臺,把產品放置于流水線上,高速工業相機對其逐一采集后傳送到計算機進行一系列的處理,最終檢測出條碼是否合格并把不合格的條碼分揀出來, 完成自動檢測手機條碼質量的功能。
檢測對象:手機產品條碼(包括產品碼、 SN碼、 IMEI 碼)
適用范圍:流水線的自動生產線
檢測速度:1 件/兩秒( 20 厘米 / 秒)
(手機產品條碼)
二、方案設計
2.1 總體結構示意圖
(總體結構示意圖)
其包括:流水線輸送裝置、照明裝置、高速相機圖像采集裝置、計算機圖像處理部分。
2.2 硬件設計方案
2.2.1 流水線(傳輸帶)輸送機械裝置設計
本方案中輸送對象的質量較小,不需要過多考慮輸送帶的承載能力問題,也不涉及到產品的裝載和拆卸,所以采用普通的帶式輸送帶結構,以步進電機帶動傳輸帶同步輪作為滾筒, 并用一塊單片機對步進電機進行簡單的運動控制進而控制傳輸帶傳輸開關和速度。同時,為了在圖像采集時能把手機產品條碼與背景有鮮明區分,傳輸帶顏色為深黑色。
(帶式傳輸帶結構圖)
2.2.2 工業相機選取
成像系統的是本方案最重要的一環。本方案中,檢測對象為條形碼,其形狀較大且特征明顯, 因此不要求相機需要非常高的分辨率。 但是,本方案是一個實時處理的設計,因此要求圖像采集處理的速度要高于檢測對象的檢測速率,即相機的最大幀率要高;而成像物體是運動的, 為了避免采集到的圖像出現模糊等問題,應采用全局電子快門方式的相機; 除外,還要求該相機支持外觸發快門以及能與計算機進行快速數據傳輸的特點。綜上,該工業相機應有以下特點:
(1)最大幀率高
(2)全局電子快門幀曝光方式
(3)支持外觸發快門
(4)擁有與計算機進行快速數據傳輸的接口
綜合考慮,本方案選擇采用 德國Basler 公司制造的 acA800-200gc/gm 型號工業相機,其參數如下:
(工業相機參數)
改工業相機符合本方案設計要求。
本方案采用傳感器觸發方式對相機快門進行控制。設計中傳輸帶為黑色,條碼背景為白色, 它們的反射能力有很大差距, 因此漫射式光電傳感器能很好地利用該點檢測產品條碼是否進入相機的拍攝范圍。 把光電傳感器垂直置于傳輸帶上方并緊貼相機,當條碼到達傳感器下方時,反射光發生變化,觸發開關狀態,通過開關狀態間接控制相機快門,進而達到自動對條碼圖像的采集的目的。
2.2.4 光源的選擇與控制
常用的機器視覺光源有 LED光源、鹵素燈(光纖光源)、高頻熒光燈。LED 光源最常用, 其使用壽命長, 且由于 LED光源是采用多顆 LED排列而成, 可以設計成復雜的結構, 實現不同的光源照射角度。由于本方案中檢測的是條碼, 為一光滑平面,采用漫反射環形 LED光源對其進行照射, 能很好地把產品條碼與傳輸帶黑色背景區分出來。其中值得注意的是, 光源的高度和角度一定要調整好, 直至相機拍攝出來的圖像能把條碼與背景完美區分為止,而且還不能有反光。
(漫反射環形照射)
2.3 軟件平臺環境
本方案檢測速度約為兩秒1件,因此進行圖像處理的計算機采用cpu主頻較高( 3GH以上)的一般辦公用計算機即可滿足要求。采用MATLAB作為主要圖像處理軟件。
2.3.1 條碼圖像的預處理
計算機從數據接口中獲得的條碼圖像是高速相機直接拍攝而未經處理的圖像,其由于 CMOS特性以及放置等因素可能會出現噪聲、傾斜等問題,而且得到的圖像為彩色圖像, 因此在對條碼進行檢測前應先對原圖像進行預處理。預處理包括:濾波去噪、二值化處理、傾斜糾正三部分。
2.3.2 條碼圖像的濾波去噪
本方案中采用的 CMOS相機,其集成度高的特點帶來了元件干擾噪聲。因此有必要對這些圖像去除隨機噪聲的干擾。經實驗,本方案中圖像的噪聲多為椒鹽噪聲,即噪聲點在圖像上常常表現為孤立像素點,其像素灰度與它鄰近像素灰度有顯著的不同,因此具有更高的頻譜。針對噪聲的類型,我們采用中值濾波,其對于脈沖干擾及椒鹽噪聲有良好的抑制作用,且能較好保持圖像邊緣。從條碼圖像的特征來看, 其特點在于是由縱向一定寬度黑白條空組成,我們通過建立不同大小的模板,對含有噪聲的圖像進行濾波處理, 比較它們的濾除噪聲干擾的效果。在 MATLAB中可以使用 filter2 函數調用創建好的濾波器,經驗證, 3x3 正方形濾波器效果最好,因此本方案采用3x3 中值濾波器。
(帶椒鹽噪聲的圖像)
(3x3 中值濾波后的圖像)
2.3.3 條碼圖像的二值化處理
為了便于對圖像進行后續處理,需要對圖像進行二值化處理。本方案中產品條碼為底面為白色的長方形貼紙,背景為黑色的傳輸帶, 直接從相機中獲取的圖像為彩色圖像,把獲取的圖像進行灰度化處理之后,再經二值化處理后能便于把產品條碼的貼紙分割出來。可利用MATLAB的 rgb2gray()函數可以把彩色圖像轉化為灰度圖像后,再利用 im2bw()函數可以很方便地對圖像進行二值化處理,閾值取 0.67 ,能得到較好的二值化圖像。可見,二值化后紙面邊緣更加清晰。
(原圖像) (二值化后圖像)
2.3.4 條碼圖像的傾斜判斷與糾正
由于物體在傳送帶上的位置并不固定, 所以相機所采集到的條碼圖像中條碼區域可能出現傾斜, 為便于后續的條碼定位和分割提取必須要將傾斜的條碼圖像轉正。
觀察二值化后的條碼圖像, 可以發現紙面區域與背景有明顯的近似矩形框區分,而傾斜的條碼圖像的顯著特征就是其二值圖像中紙面區域以一定角度旋轉且其旋轉角度不可能太大。所以實現傾斜條碼圖像的糾正首先要檢測出傾斜角度,
再以其角度值對其進行逆旋轉得到包含條碼的矩形區域呈水平的條碼圖像。考慮到圖像位置的隨機性和計算復雜度問題, 本方案決定采用 Hough變換法來實現傾斜條碼圖像的傾斜角的檢測。其實現方法是先利用MATLAB的 edge() 函數求出二值圖像 的邊 緣,再 用 其 Hough 變換相 關函數:hough() 、 houghpeaks() 、 houghlines() ,獲得到最長邊的起始點和終止點,利用斜率公式從而求出該條碼圖像的傾斜角,最后利用 imrotate() 旋轉函數糾正圖像的傾斜情況。經測試,效果不錯。
(原傾斜圖像) (傾斜糾正后的圖像)
2.4 條碼分割
由于同一款手機產品,其條碼的貼紙上的條碼字符等信息的位置都是固定的,因此把圖像中紙面部分分割出來后, 按固定位置的物理分割能很容易把條碼部分分割出來。
2.4.1 條碼貼紙部分分割
由二值化圖像中可見貼紙與背景有明顯的特征區分,我們經過b wareaopen()函數處理后可把面積小的點吞噬掉,從而獲得邊緣較為清晰的二值化圖像。
(經bwareaopen 函數處理后的圖像)
獲得此圖像后,對圖像進行從左到右的逐行檢測,得到其像素點第一次由黑到白變化點的坐標,即為該紙面邊緣的第一個坐標,記為P1;再用相同的方法分別從右到左、上到下、下到上進行檢測,分別把檢測到的坐標記為P2、 P3、P4,則該四個坐標確定了紙面的位置。最后調用 imcrop()函數,按這四個坐標把擺正后的圖像的紙面分割出來。
(分割的條碼圖像的紙面部分)
2.4.2 條碼分割
上文已說明, 同一款手機產品其條碼的貼紙上的條碼字符等信息的位置都是固定的,因此對應同一款手機計算好其條碼在貼紙上的位置,再次調用 imcrop()函數,能把貼紙上任意部分分割出來。
(分割出來的條碼)
2.5 條碼識別與檢測
條碼圖像經過處理后最終得到的是只有黑白條空組成的二值圖像, 該點的顏色信息在闊值變換時已經定義 ,用 255 和 0 表示白色和黑色, 則接下來的任務就是對此圖像所包含的數字或英文字母信息進行譯碼, 即條碼識讀。
2.5.1 條碼譯碼識別方案
條碼識別的算法有很多,常用的有:
①寬度測量法:在圖像方式的譯碼過程中, 寬度的測量不再采用傳統的脈沖測量法 , 而是通過記錄每個條或空的寬度中所含象素的個數來確定實際的條 / 空寬度 , 從而確定整個條碼符號所代表的信息。
②平均值法:對條碼符號圖像中從起始符到終止符整個寬度進行測量 , 然后除以 95 標準寬度 , 求出單位模塊所含的像素列寬, 再分別測量各個條空的實際寬度此寬度以單位寬度為單位計算
③相似邊距離測量法:這種方法的設計思路是通過對符號中相鄰元素的相似邊之間距離的測量來判別字符的邏輯值, 而不是由各元素寬度的實際測量值來判別。
前兩種方法對條碼圖像的要求非常高 , 因為它們都是測量各元素符號的實際寬度 , 然后根據查表法得到所代表的碼值。如果實際測量值與標準值存在一點偏差, 就不能實現正確譯碼。而第三種方法正是有效的解決了這一問題 , 因此本方案采用相似邊距離測量的方法來實現譯碼功能。理論上條形碼字符的邏輯值應該由條形碼的實際寬度來判斷, 而相似邊距離方法的設計思想通過對符號中相鄰元素的相似邊之間距離的測量來判別字符的邏輯值,而不是由元素寬度的實際值來判別。此種方法的優點是:即使條碼質量存在缺欠,使得實際測量值和條碼應該具有的理論值有較大的偏差, 仍然可以根據相似邊的距離能夠正確解釋。
(條碼字符寬度示意圖)
圖中 C1,C2,C3,C4表示每個字符中四個相鄰條、空的寬度, T 表示一個字符的寬度, T1,T2 表示相似邊之間的距離,把其歸一化后按表查詢即可獲得其編碼值。
(EAN-13 條碼字符與歸一化值)
由 MATLAB 實現該方法,關鍵是要檢測出相似邊之間的距離。可從左到右對條碼進行水平灰度掃描, 以灰度值跳變的點作為條和空的標記坐標,從而計算出由各個條、空的寬度,并通過計算 n=T/7,T=1C+2C+3C+4C 得到單位模塊的寬度。各個條空的寬度除以單位模塊的寬度就是歸一化的條空寬度。而為了方便譯碼,我們除去起始符 3 個條空,中間分隔符 5 個條空,終止符3 個條空,對剩下的 48 個條空每 4 個條空為一組進行譯碼。計算相似邊之間的距離t1、 t2 從而得到歸一化( T1,T2)。最后查表可得條碼字符。再根據譯出的左側6位數據符的奇偶性算出前置符。以下是譯碼效果:
(條碼識別結果)
其他碼型( SN 碼、IMEI 碼)原理相似。
2.5.2 條碼字符識別
獲得條碼識別的數據后,需要與條碼下方的字符對照,驗證條碼的準確性。字符識別的算法有很多, 由于該方案中只需要識別簡單的數字和英文字母,因此通過簡單的 OCR 算法對其條碼下方的數字、英文字母字符進行字符檢測,再與
識別的條碼字符相比較, 一致則顯示該產品條碼檢測通過,不一致則記錄該商品編碼。
首先建立一個字符模板數據庫,用于字符匹配。該方案中需要識別的字符只有英文和字母,因此數據庫不大。
(字符數據庫)
然后使用物理定位分割,把條碼下方字符分割出來。
(條碼下方字符)
接著,對圖片進行水平方向的投影,這樣有字符的地方的投影值就高,沒字的地方投影得到的值就低。
(水平投影值)
接下來,用一根掃描線從下向上掃描。這個掃描線會與圖中曲線存在交點,
這些交點會將山頭分割成一個又一個區域。該條碼字符為 13 位,加上條碼突出來的幾點一共為 18 個區域,因此,當掃描線將山頭分割成 18 個區域時停止。然后根據這 18 個區域向水平線的投影的坐標就可以將圖片中的 13(18)個字符分割出來。
字符分割出來后,最后用 ORC神經網絡匹配,把分割出來的字符與字符庫里的字符圖片進行匹配, 最終把字符識別出來。把識別出來的字符串與條碼識別出來的字符串對比,即可檢測出該條碼是否準確。
三、方案評估
3.1 材料預算
3.2 方案不足
本方案存在尚需改進的地方:
1)對光源的擺置要求較高,依賴光源獲取對比鮮明的圖像,否則將可能出現條碼貼紙與背景分割失敗的情況;
2)盡管概率很低,但依然存在某張條碼檢測失敗的情況,此時本方案的做法是對該次檢測拋棄;
3)本方案只對條碼的編碼質量進行了檢測,即只對條碼所包含的字符是否與該手機產品相關信息的編號字符相對應進行了檢測,而沒有對出錯的進行糾正。
責任編輯:pj
-
傳感器
+關注
關注
2551文章
51212瀏覽量
754539 -
濾波
+關注
關注
10文章
667瀏覽量
56681 -
計算機
+關注
關注
19文章
7518瀏覽量
88185
發布評論請先 登錄
相關推薦
評論