馮闊


摘要:隨著商品種類的不斷豐富和信息化管理手段的應用普及,條形碼作為現代生產、物流和銷售各環節的重要信息化手段之一,它的應用也日益廣泛,而且,隨著我國對食品和藥品安全問題的重視,條碼作為追溯碼也開始被用于食品藥品追溯領域。如何對條形碼中的信息進行提取就變得非常重要了。本文在這樣的背景下針對乳品企業的產品可追溯問題,設計了一套可用于乳品追溯的包裝條碼計算機視覺識別系統。
關鍵詞:條碼;乳品包裝;條碼識別;計算機視覺
中圖分類號:TP391.44 文獻標識碼:A 文章編號:1007-9416(2017)02-0204-02
本系統硬件部分采用面陣攝像機、工控機構成,軟件部分采用C#語言和OpenCV軟件進行開發,采用EF Model(實體框架)作為程序框架,通過搭建好的視頻采集系統,利用外觸發啟動攝像機采集圖像,經過圖像預處理、識別區域的檢測和定位后,提取出待識別圖像,對于待識別圖像中的條碼和數字,分別采用相似邊距離方法進行一維碼識別、采用逐行掃描法進行二維碼識別,并利用模型匹配進行數字識別。
本系統可綜合識別條碼以及數字識別,實驗表明本系統具有較好的識別效率和識別精度,可以滿足一般條件下的包裝條碼計算機識別,并且已在乳品可追溯方面取得應用。
1 概述
在數不勝數的新型計算機科學技術出現之后,條形碼技術儼然已經成為了最為經濟實用的一種自動識別技術。隨著時代的不斷發展和用戶需求的不斷擴展,各種各樣的商品出現在我們生活中[1]。雖然條形碼的技術發展的爐火純青,但是隨著條形碼的不斷變化和創新,識別包裝條形碼技術已然成為我們現在需要不斷研究的課題。
條形碼的出現無疑給我們的生活帶來了方便,但對于這個快速發展的時代,對其識別的技術的效率還需要我們進行大量的研究和開發。這也是開發本系統的初衷。對于本系統來說,它既要滿足對條形碼的檢測,圖像提取,校正等功能的實現,又要實現所有程序自動化的功能。該系統主要應用于對海河食品包裝的識別。該系統利用外觸發器,實現將視頻轉化到靜態圖片的功能,同時通過后臺處理快速地找到該靜態圖片中條形碼的位置并對提取的條形碼以圖片的形式存儲,然后對條形碼圖片進行識別。
2 條形碼定位
2.1 圖像采集
采集方式是利用相機和觸發器采取圖像,DirectX以流的方式讀取播放視頻。
2.2 圖像預處理[2]
OpenCV現在利用Mat類來表示圖像,在此基礎上進行圖像的灰度化處理[3],在灰度處理基礎上,進行圖像梯度化[4]。就是把圖像作為二維離散函數。梯度化過程就是對該函數求導的過程。圖像邊緣的確定大多都是通過圖像梯度化處理來實現的。梯度化方向[5],分水平方向梯度計算和垂直方向梯度計算,或者是振幅計算。在進行檢測前,還要使用Scharr算子先確定邊緣像素[6]的位置。接下來進行圖像二值化,所有的像素點的像素值設置為0或者255。最后,采用開運算算法進行形態化處理。
2.3 條碼檢測
本系統使用Vecor容器用于存放面積;findContours函數對二值圖像中的輪廓進行檢測;Point用來表示坐標為整數的二維點;Rect方法:用于提取旋轉的矩形圖案;angle檢查這個矩形的偏斜角度;將提取的矩形輪廓標記在圖片上并剪截下來進行保存。
2.4 二維碼提取
相對應一維碼,二維碼在譯碼之前需要先對二維碼進行分割,再進行邊緣檢測。采用區域增長的方法修正邊界。二維碼是正方形形態,我們也要對其進行圖形區域的旋轉處理,利用Hough變換來進行處理利用二維圖像的投影變換。然后對拍攝的圖像進行Hough變換,根據4條邊界線進行位置旋轉。也可以使用仿射變換。即先對一個向量空間進行一次線性變換并根據該變化做出相對性的平移,使其變成另一個向量空間。該變化方法包括水平的平移、圖像的縮放、圖像的旋轉等功能。
2.5 數字定位方法
商品包裝上的條碼一般都是預印刷的,許多商品的生成日期和使用日期也需要入庫進行保存,但是由于條碼印刷成本較高,所以廠家通常采用的方式是以數字形式將商品的生成日期和使用日期印刷在包裝袋上。因而,本系統添加了數字識別功能。數字技術識別的主要核心字符分割技術:切割數字區域后,進行字符的切割,由于該圖像還是灰度圖像,所以我們在切割前還要進行一些圖像處理。具體過程:灰度拉伸、二值化、傾斜校正以及字符分割。圖像以海河牛奶的包裝袋為例。由于信息過多,一個條形碼無法將全部信息存儲,所以會在包裝正面的空白位置加些數字,以此來完善條形碼內容不足的地方。
具體分割算法如圖1所示。將截取后的整個圖片進行自上而下的逐行對比,提取黑色的字符部分,直到整幅圖像完畢。已列為高度基準進行掃描,進行從左到右依次排查,直到全部圖片掃面完畢。由于印刷問題,數字區域可能有小圓點,采用的是比例方法運算將這些小點清除,把每個切割后的圖像的寬度均除以未切割前的圖像的寬度,設立一個最小的商值。如果小于該商值,將其以噪聲方式清除。最后對字符進行了加框和歸一化處理。上述所切割的圖像大小是根據字符的最高和最低的值進行的切割,所以我們得到的結果并不是很準確,我們要將每個字符再進行進一步的確定,所以要多進行幾次從第一個步驟到第三個步驟的運算。這樣我們得到的才是該字符的準確范圍。
3 條形碼識別
3.1 一維碼識別
一維碼儲存的信息是由條和空的寬度以及所在的位置來傳遞的。以EAN-13碼為例。一維條形碼的條和空的數量越多,它就越寬,儲存的數據量就越多,由于一維碼是由條和空組成的,將信息變化成二進制或者十進制的數字。
本系統對于一維碼識別采用的方法是相似邊距離方法,利用相似法識別一維碼[6]:根據算法進行字符的掃描和識別,定義:C1和C3表示相鄰條的寬度,C2和C4表示空的寬度,T表示整個字符的寬度,T1和T2為相似邊的距離。用算法取得值JTj(j=1,2)來進行T1與T2的歸一化處理。
3.2 二維碼識別
二維碼是按照一定的規律在平面上分布的黑色與白色相間的圖形記錄符號。識別二位碼[7]需先定位圖案,再是功能性數據,識別由數據碼和糾錯碼共同組成的數據信息。
定位圖案:我們通常定位二維碼是根據左上角、右上角以及左下角三個位置定位的。以其中一個圖形為例,我們可以將其看作分別為7*7、5*5和3*3三個模塊。三個之間比例為1:1:3:1:1。掃描:用一個直線逐行掃描二維碼,該線被截為1:1:3:1:1時截取。誤差在0.5之間在列方向,也用相同的方法進行二維碼定位掃描。我們通常定位二維碼是根據圖上的三個位置定位的。
3.3 數字識別
數字識別[8]部分已經超出了我們圖像處理的范圍依據了,屬于模式識別,由于我們已經對圖片進行了分割,所以我們只需通過其特征進行分類與識別。采用的是逐像素取法方法[9],具體操作就是對圖片進行每行每列的依次查找,遇到的黑點時,將其像素值設為“1”,其他為“0”,全部掃描結束后,將提取的個數相同的像素,放在特征矩陣里。將特征信息,輸入到分類器中,進行分類處理,從而得出結果。再進行采取模塊匹配,事先做好海河包裝上的圖像中字符的圖像采集,然后建立一個圖片模板識別庫。當我們進行字符識別時,就將模板取出來依次對比,把與字符特征對比的結果的矢量求出加權距離。則最小的結果就是識別的結果。如圖2所示。
參考文獻
[1]朱莉玲.數字圖像處理技術與應用研究[J].信息系統工程,2016:04.
[2]衛權崗,馬建紅,吳非洋,等.使用手機進行ENA-13碼的識別及應用[J].電腦編程技巧與維護,2011:16.
[3]劉治群,楊萬挺,朱強.幾種圖像增強算法的研究比較[J].合肥師范學院學報,2010:06.
[4]蔣偉.基于分數階偏微分方程的圖像去噪新模型[J].計算機應用,2011:03.
[5]黃凱奇,任偉強,譚鐵牛.圖像物體分類與檢測算法綜述[J].計算機學報,2014:06.
[6]Xianghai Wang,Yu Wan, Rui Li. A Multi-object Image Segmentation C-V Model Based on Region Division and Gradient Guide[J]. Journal of Visual Communication and Image Representation, 2016:06.
[7]張蓓,張成昱,竇天芳.二維條碼在移動圖書館服務拓展中的應用探索[J].圖書情報工作,2013:04.
[8]Christian Ronse. Ordering Partial Partitions for Image Segmentation and Filtering:Merging,Creating and Inflating Blocks [J]. Springer Journal,2014:01.
[9]張三友,姜代紅.基于OPENCV的智能車牌識別系統[J].軟件導刊,2016:05.