舒大松
(湖南廣播電視大學 機電工程系,湖南 長沙,410004)
隨著社會經(jīng)濟的發(fā)展,世界物質越來越豐富,物品的管理難度也越來越大。在互聯(lián)網(wǎng)技術、信息技術的推動下,物品管理正朝著信息化、智能化方向發(fā)展。為了有效地監(jiān)督與管理,所有商品都有自己的專屬身份證明——條形碼,條形碼是將寬度一定的數(shù)個黑條和白條,根據(jù)已規(guī)定好的編碼規(guī)則進行組合,用來表示某種信息的圖形標識碼。目前使用最廣泛的條形碼是由色差很明顯的黑條(簡稱條)和白條(簡稱空)按照編碼規(guī)則平行排列而成的圖形。條形碼能夠用來表示商品的出場地、生產(chǎn)廠家、商品名稱、生產(chǎn)日期、使用期限及商品流通狀態(tài)等許多信息,因而在商品管理、物流運輸、行政管理執(zhí)法等許多領域都得到廣泛的應用。能否準確而且高效地使用條形碼的最關鍵工作就是條形碼識別[1]。文章將運用新型工具——人工神經(jīng)網(wǎng)絡對條形碼識別進行深入研究。
LVQ神經(jīng)網(wǎng)絡是由芬蘭學者Teuvo Kohonen在競爭型神經(jīng)網(wǎng)絡基礎上提出的[2]。LVQ神經(jīng)網(wǎng)絡是一種有教師信號指導學習的聚類方法,不僅具備自動學習研究對象規(guī)律特征進行分類的能力,還可以按照監(jiān)督學習信號中設置的理想識別結果自動設定分類標準,通過訓練,能夠更加精確地對研究對象模式進行識別。LVQ神經(jīng)網(wǎng)絡是競爭學習思維與教師指導學習規(guī)則的結合,已被廣泛應用于模式識別與優(yōu)化領域。LVQ網(wǎng)絡結構如圖1所示。
圖1 LVQ網(wǎng)絡結構Fig.1 LVQ network topology
LVQ網(wǎng)絡結構可以分為三層:輸入層、競爭層、輸出層[3-4]。在訓練過程中,按照學習規(guī)則,通過不斷地調整競爭層中神經(jīng)元與輸入層神經(jīng)元的連接權值向量,使得這些權值向量成為各個子空間的聚類中心,聚類中心對應的輸出就是理想輸出。然后以各個子空間的聚類中心為參照,通過計算輸入向量與各個子空間聚類中心的相似度,按照最近的原則,以實現(xiàn)對輸入信息的識別[5]。輸入層神經(jīng)元的個數(shù)根據(jù)輸入向量維度來確定;輸入層神經(jīng)元與競爭層神經(jīng)元之間保持完全連接,也就是說輸入層的任意神經(jīng)元與競爭層的全部神經(jīng)元相連;競爭層與輸出層的連接情況根據(jù)識別結果中的子類數(shù)目確定,通常是將競爭層的全部神經(jīng)元平均分配給輸出層神經(jīng)元,競爭層歸屬相同子空間的神經(jīng)元僅與輸出層的單個神經(jīng)元保持連接;輸出層神經(jīng)元個數(shù)與識別結果的子類個數(shù)相一致。
LVQ神經(jīng)網(wǎng)絡選擇了Kohonen學習方法,如下式所示:
(1)
LVQ神經(jīng)網(wǎng)絡的訓練步驟如下:
1)網(wǎng)絡初始化。將網(wǎng)絡中連接權值設置一個初始值,通常做法是將一個小數(shù)值的隨機矩陣賦值給W1;W2是由網(wǎng)絡結構和識別結果的個數(shù)決定的,其作用是保持競爭層獲得激勵神經(jīng)元所在子空間的各個神經(jīng)元與相應的輸出層神經(jīng)元連接權值為1,余下神經(jīng)元的連接權值為0。假定識別結果有四種,競爭層中兩個神經(jīng)元代表一個聚類子空間,則W2定義如下:
(2)
W2的行表示競爭層中的子類,每一行對應一個子類的權值向量,W2的行數(shù)表示競爭層節(jié)點數(shù)量,每行中元素1對應的競爭層神經(jīng)元獲勝;W2的列表示理想識別結果的數(shù)量。
3)尋找獲勝神經(jīng)元。以歐氏距離最近為原則,找到相應的聚類中心,激活聚類中心對應的競爭層神經(jīng)元。
4)計算被激活的輸出層神經(jīng)元輸出向量Y的值,Y=VW2,然后定位Y中非零元素的下標數(shù)值k,則第k類結果就是網(wǎng)絡的識別結果。
5)比較LVQ網(wǎng)絡的識別結果與理想輸出結果是否一致。
如果網(wǎng)絡識別結果與理想識別結果相同,則需要對競爭層中受到激勵的神經(jīng)元和輸入層連接權值向量按照接近輸入向量的方向修正,具體修正如式3所示:
(3)
如果網(wǎng)絡識別結果與理想識別結果不相同,那則需要對競爭層中受到激勵的神經(jīng)元和輸入層連接權值向量按照遠離輸入向量的方向修正,具體修正如式4所示:
(4)
競爭層沒有受到激勵的神經(jīng)元與輸入層連接的權值向量保持不變。
6)重返到第二步不斷地循環(huán)學習,修正競爭層和輸入層的連接權值向量。當訓練次數(shù)達到了網(wǎng)絡訓練預設置的最大次數(shù)或網(wǎng)絡預設置的精度要求時,即停止訓練。用均方差mse來表示網(wǎng)絡精度,如式5:
(5)
式中,S是輸出層中神經(jīng)元個數(shù);di是輸出層中第i個神經(jīng)元的理想輸出值;yi是輸出層中第i個神經(jīng)元的實際輸出值。
一維條形碼有EAN-13、EAN-8、UPC-A、UPC-E四種結構,最常用的是EAN-13結構[6],這里以EAN-13型條形碼為研究對象。EAN-13型條形碼由左側空白區(qū)域、起始碼、左側數(shù)據(jù)符、中間分隔碼、右側數(shù)據(jù)符、校驗碼、終止碼、右側空白區(qū)域和供人識別字符組合而成,組成條碼的最小單位模塊是0.33mm寬度的豎型條紋,黑色條紋對應二進制中的“0”,白色條紋對應二進制的“1”,條形碼就是通過黑白條紋按照一定的規(guī)則來組合得到不同的條碼與編號。每個條碼字符由2個“條”與2個“空”組成,每個“條”或“空”由1~4個模塊組成。
條形碼的印刷質量要求中允許條空寬度有15%的偏差[6],條空允許的顏色可以由黑色、白色、紅色、藍色、黃色、綠色、棕色、橙色進行搭配。
條形碼識別過程就是按照條形碼的編碼規(guī)則進行識別譯碼的過程,在理解條形碼編碼規(guī)則的基礎上設計條形碼識別系統(tǒng)方案如圖2。
圖2 條碼識別系統(tǒng)方案
條形碼圖像采集:當條形碼靠近紅外手持設備探頭附近時,就會觸發(fā)相關傳感器,喚醒探頭發(fā)出紅外線可見光,并提醒操作人員將紅外線對準條形碼后再進行掃描拍照,盡量把條形碼置于掃描圖形的中間位置,提高圖像質量。
圖像預處理:掃描拍照獲得的條形碼照片會包括要識別的條形碼及其他干擾信息[7],條形碼稱為前景,其他干擾信息稱為背景,預處理就是對掃描拍照后的圖像進行修飾,通過圖像灰度化與圖像除噪把無用的背景信息過濾掉,只保留條形碼圖像中有用的信息。當條形碼圖像傾斜時會導致掃描得到的條碼寬度出現(xiàn)失真,因此需要對掃描得到的條形碼圖像進行校正處理。
由于彩色圖像信息容量大而且識別難度也大,同時對于條形碼識別來說,并不需要圖像是彩色的,因此為了減少除噪工作、簡化識別過程,先對圖像進行灰度化處理,圖像的灰度化處理就是將彩色圖像變換為灰度圖像的過程。彩色圖像的每個像素顏色由RGB(紅綠藍三原色)3個分量合成而來,每個分量取值在 0~255 之間?;叶葓D像是 RGB 3個分量相同的一種特殊的彩色圖像,每個像素的亮度用一個數(shù)據(jù)來表示,0 代表黑,255 代表白,而處于0到255之間的數(shù)據(jù)代表灰度。在圖像數(shù)字化處理過程中,通常是先把各種類型的圖像變換成灰度圖像,減輕后面的圖像處理計算工作。
圖像去噪:由于紅外手持設備掃描的角度、距離、條形碼印刷質量以及使用場所環(huán)境等因素,使得獲取的圖像會存在一定的噪點。這些噪點的干擾可能會導致識別結果出現(xiàn)偏差,所以需要對條形碼的圖像進行除噪處理。
圖像二值化處理:將掃描得條碼圖像經(jīng)灰度化、去噪處理后轉化為數(shù)字信號,并進行二值化、歸一化處理[8],然后運用LVQ神經(jīng)網(wǎng)絡識別器對所得二進制編制編碼符號逐一識別,輸出條形碼的數(shù)字編號。
LVQ神經(jīng)網(wǎng)絡識別器:根據(jù)EAN-13條形碼編碼規(guī)則及組成結構,一個EAN-13條形碼由13位數(shù)字、起始碼、終止碼、校驗碼組成,一位數(shù)字對應7位二進制編碼。設計神經(jīng)網(wǎng)絡識別器采用三層網(wǎng)絡結構,網(wǎng)絡輸入層神經(jīng)元設置為30個,競爭層神經(jīng)元為120個,輸出層神經(jīng)元為10個。由于把輸入層與競爭層的初始化權值向量隨機化,可能與聚類中心相聚較遠,容易造成學習速率較慢、過度學習[9],甚至部分神經(jīng)元距離初始權值向量較遠導致永遠無法得到訓練,從而造成網(wǎng)絡空間浪費,降低了網(wǎng)絡泛化能力。結合EAN-13條形碼由二進制字符組成的特征,將按照0~9數(shù)字對應的二進制編碼定為輸入層與競爭層的權值初始化向量。一維條形碼信息量不是很大,最大學習次數(shù)暫設為500次。
本實驗在Matlab平臺建立LVQ神經(jīng)網(wǎng)絡識別器模型,進行訓練并測試其性能。首先我們選取100張png格式的條形碼照片作為訓練樣本。訓練完成后,另取20張png格式的條形碼照片作為測試樣本對識別器模型進行測試。
模型訓練過程顯示如下圖3~圖8:
圖3 灰度直方圖Fig.3 Gray histogram
圖4 中值濾波Fig.4 Median filtering
圖5 灰度處理后圖像Fig.5 Image after grayscale-processing
圖6 二值化處理Fig.6 Binarization-processing
圖7 邊緣檢測Fig.7 Edge detection
圖8 圖像分割Fig.8 Image segmentation
訓練后的模型測試,另外選取20組條形碼測試樣本對已經(jīng)訓練好的神經(jīng)網(wǎng)絡識別器進行測試,具體測試結果如表1所示:
表1 測試結果Table 1 Test results
模型測試結果表明:20組測試樣本中,有19組的識別結果完全正確,其中第12組識別結果有兩位數(shù)字出現(xiàn)偏差,準確率為95%。從仿真結果中可以看出,LVQ神經(jīng)網(wǎng)絡識別器具有較高識別精度。
針對條形碼信息的多樣性,提出了LVQ神經(jīng)網(wǎng)絡識別方法,建立了條形碼的LVQ神經(jīng)網(wǎng)絡識別模型。通過訓練與實驗,實驗結果證明LVQ神經(jīng)網(wǎng)絡有效地提高了模型識別準確度,驗證了LVQ神經(jīng)網(wǎng)絡具有較強的學習、泛化能力,能夠高效、精確地識別條形碼。