馮闊


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