王太學,苗相彬,李柏林,郭彩玲
(1.西南交通大學 唐山研究生院,河北 唐山 063000; 2.西南交通大學 機械工程學院,成都 610031; 3.唐山學院 a.機電工程學院,b.河北省智能裝備數(shù)字化設計及過程仿真重點實驗室, 河北 唐山 063000)
在信息化快速發(fā)展的時代,字符識別是一種重要的錄入與轉化信息的方法,在車牌識別[1]、郵政編碼識別[2]、食品噴碼識別[3]等領域有著非常廣泛的應用。利用字符識別系統(tǒng)代替?zhèn)鹘y(tǒng)的人工錄入,可以節(jié)約大量人力物力,提高工作效率。
目前字符識別的方法有很多,Vaishnav等[4]結合OCR利用模板匹配法完成了對車牌的識別;Zhang等[5]利用CNN(卷積神經網絡)中傳統(tǒng)的LeNet-5結構實現(xiàn)了對驗證碼的識別;Alghazo等[6]提出了一種基于結構特征的多語言字符識別系統(tǒng),通過提取數(shù)字的局部特征,對多種語言的字符完成了高精度識別。
字符識別是在字符分割的前提下進行識別的,字符分割的方法有很多種。Khamdamov等[7]提出了一種基于輪廓分析的字符分割方法,通過識別特定字符的局部特征實現(xiàn)了車牌字符的分割;Wang等[8]提出了一種基于字符定位和投影分析相結合的字符分割方法,先通過AdaBoost算法訓練級聯(lián)分類器來定位,然后基于關鍵字符信息預測其他字符,最后通過垂直投影完成對字符的分割;Peng等[9]提出了一種基于連通域算法和滴水算法相結合的字符分割方法,通過BP神經網絡進行預分類,對無粘連字符利用連通域算法進行分割,對粘連字符利用滴水算法進行分割,但是分割準確率不是很高。
上述研究表明一些字符識別方法在車牌等字符識別方面取得了較好的效果,但是對噴碼字符中出現(xiàn)的兩個及兩個以上字符粘連情況的識別,準確率則不高。
鑒于乳制品紙包裝上生產批號在噴碼過程中常由于各種原因部分噴碼字符出現(xiàn)粘連或缺失的現(xiàn)象,影響字符的自動化識別,本文提出了一種基于字寬與投影法相結合的字符分割方法,先利用投影法將雙行字符分割為單行字符,再基于字寬完成對粘連字符的分割。在基于字寬進行分割的過程中,有少量字符存在分割損壞的現(xiàn)象,但這并不影響后期CNN的訓練過程,相反,這些被分割損壞的字符增加了訓練的泛化性,有利于提高對不規(guī)則字符的識別準確率。
基于改進的CNN的不規(guī)則字符識別步驟如圖1所示。首先,利用yolov3算法對生產日期區(qū)域進行提??;其次,對圖像進行預處理;再次,通過一種基于字寬的分割算法結合投影法,利用相鄰字符間的像素差異實現(xiàn)對粘連字符的分割;最后,對分割后的單個字符利用改進的CNN進行多標簽分類訓練得到模型,得出并顯示識別結果。
圖1 字符識別步驟
乳制品紙包裝上生產批號的噴碼圖像(如圖2所示)通過工業(yè)相機采集,工業(yè)相機包括硬件系統(tǒng)和軟件系統(tǒng)。硬件系統(tǒng)由工業(yè)相機、光源、相機鏡頭、傳送裝置和觸發(fā)裝置組成;軟件系統(tǒng)為圖像采集系統(tǒng),由圖像格式模塊、采集控制模塊、連續(xù)存儲模塊組成。
圖2 工業(yè)相機獲取的圖像
感興趣區(qū)域(目標區(qū)域)提取的方法有很多,如基于深度學習的目標區(qū)域提取[10]、基于結構紋理特征的目標區(qū)域提取[11]、基于SIFT特征的目標區(qū)域提取[12]。本文鑒于圖像中字符位置坐標的不確定性,選擇基于keras深度學習框架下的yolov3算法[13]進行目標區(qū)域的提取。通過labelImg圖像標注軟件對1 000張樣本圖進行目標區(qū)域標定,圖像中標定的目標區(qū)域為生產日期區(qū)域。把這1 000張標定的圖像作為模型的訓練集,選定不包含訓練集的120張圖像作為測試集。經過卷積神經網絡訓練后得出目標區(qū)域預測模型,通過測試集測試后得出模型,符合目標區(qū)域預測要求。對其中一張測試圖像進行目標區(qū)域預測并提取后得到的圖像如圖3所示。
圖3 感興趣區(qū)域的提取結果
1.4.1 去噪
圖像中的噪聲點對圖像處理造成困擾,需進行去噪處理。因為圖像中不均勻的黑點為椒鹽噪聲[14],所以選取中值濾波[15]進行去噪處理。中值濾波的原理是將一個5×5的矩陣中的25個像素點進行排序,并將矩陣的中心點賦值為這25個像素的中值。中值濾波函數(shù)去噪原理如下:
設f(x,y)為中值濾波前的像素值,g(x,y)為中值濾波后的像素值,則有如下關系:
g(x,y)=medA[f(x,y)]。
(1)
式中,med表示用中值代替所有像素值f(x,y),A為5×5的二維區(qū)域。
通過5×5的二維窗口進行非線性平滑去噪,對窗口數(shù)值重新排序,用中間值代替原窗口的中間值。中值濾波后的效果如圖4所示。
圖4 中值濾波圖
1.4.2 二值化
選取最大類間方差法進行自適應閾值二值化[16],該方法是一種基于全局的二值化算法,能夠根據(jù)圖像灰度特征將圖像分為前景和背景,從而獲取最佳閾值。最大類間方差法的原理如下:
設背景和前景的分割閾值為T;將前景像素點數(shù)占整幅圖像像素點數(shù)的比重記為ω1,平均灰度為μ1;將背景像素點數(shù)占整幅圖像像素點數(shù)的比重記為ω2,平均灰度為μ2。圖像的平均灰度為μ,類間方差為g。假設圖像大小為M×N,將圖像中像素灰度值小于閾值的像素個數(shù)記作N1,將像素灰度值大于閾值的像素個數(shù)記作N2,那么有:
(2)
(3)
N1+N2=M×N,
(4)
ω1+ω2=1,
(5)
μ=ω1μ1+ω2μ2。
(6)
將式(5)代入式(6)得:
g=ω1ω2(μ1-μ2)2。
(7)
對全圖進行遍歷,即能得到最大類間方差法的閾值T。
利用上述算法對圖4進行遍歷得到最佳閾值T為94。令圖4像素N有如下關系:
(8)
根據(jù)式(8)就可以得到二值化后的圖像,如圖5所示。對于不同亮度的圖像區(qū)域,算法能夠根據(jù)每一區(qū)域的灰度值自適應計算出最佳分割閾值,并取其平均閾值進行迭代,最大化保留相應區(qū)域內的所有信息。
圖5 二值圖
1.5.1 行分割
在獲得二值圖后,需要進行字符分割,分割后的圖像用作后面卷積神經網絡訓練的樣本。因兩行字符之間有明顯的像素差,故基于水平投影直方圖將兩行字符分割成單行字符。
1.5.2 列分割
通過行分割得到兩張單行字符的圖像后,要進行單個字符的分割,但由于有的二值圖中出現(xiàn)兩個字符粘連的情況,僅利用投影法無法將其分割成單個字符,因此本文提出了一種基于字寬分割的算法,并與投影法結合進行字符分割,如圖6所示。
圖6 粘連字符分割示意圖
本文分割算法如下:
設出現(xiàn)字符像素的起始點為x1,字符像素的終止點為x2。對要分割的字符寬度進行如下定義:
經過行分割后得到的單行字符圖像寬度為b1,要進行列分割的單行字符圖像寬度為b2,其中b1≠b2,分割后單個字符的寬度為b3。
(9)
因此起始分割位置為x1-k1,終止分割位置為x2+k1,要分割的單行字符圖像寬度為:
b2=x2-x1+2k1;
(10)
分割后單個字符的寬度為:
(11)
基于以上算法,從起始分割位置x1-k1以寬度b3進行12等份分割,可得到單個字符分割的圖像。
CNN[17]是一種前饋型神經網絡,在圖像處理方面表現(xiàn)較好,被廣泛應用于圖像分類、定位等領域。LeNet-5模型[18]是Yann Lecun教授于1998年提出的,是一種應用于手寫字符識別的卷積神經網絡。傳統(tǒng)的LeNet-5模型在手寫字符識別中表現(xiàn)出色,但由于點陣字符的不連通性,導致其對噴碼字符識別適用性較差。因此,本文提出的改進的CNN LeNet-5模型增加了各個層中特征圖的數(shù)量及大小等參數(shù),并對卷積層、池化層、全連接層和輸出層作了改進,選取三層卷積層與三層池化層、兩層全連接層和一層輸出層構成神經網絡。改進后的CNN LeNet-5模型網絡結構圖如圖7所示,模型結構如表1所示。
表1 改進后的CNN LeNet-5模型結構
圖7 改進后的CNN LeNet-5模型網絡結構圖
輸入層是32×32×3(高×寬×通道)的點陣字符圖像,包含字符0-9,C和L共12類。
卷積層共三層,分別為C1層、C2層、C3層。C1層共有32個特征卷積核,每個卷積核的大小為3×3,因此能夠得到32個特征圖,每個特征圖的大小為30×30,有896個神經元共享卷積核權值參數(shù)。C2層共有64個特征卷積核,卷積核的大小也是3×3,每個特征用于加權和計算的卷積核為13×13。C3層共有128個特征圖,也是用3×3的卷積核進行運算,卷積核的種類有128種,可訓練的參數(shù)為73 856個,卷積后形成的圖形大小為4×4。
池化層共三層,分別為S1層、S2層、S3層。S1層卷積核的大小為2×2,步長為2,輸出矩陣的大小為15×15×32;S2層采樣卷積核大小為2×2,步長為2,輸出矩陣的大小為6×6×64;S3層卷積核大小為2×2,步長為2,輸出矩陣的大小為2×2×128。
F1層為全連接層,神經元個數(shù)為262 656。F2層也為全連接層,其輸出尺寸為1×1×512維向量。
Output層為輸出層,共12個節(jié)點,每一個節(jié)點代表一個標簽種類,標簽分別為字符0-9,C和L。
為了使模型提取的特征更加精細,改進的CNN LeNet-5模型的網絡結構包含輸入層共11層,與傳統(tǒng)的LeNet-5模型的區(qū)別是在第三層卷積層后面增加了池化層,池化層的類型為最大池化,即選取圖像區(qū)域的最大值作為該區(qū)域池化后的值,進一步減小了特征空間信息的大小,提高了模型的運算效率;并且增加了Dropout層,舍棄了一半神經元,使每次迭代可隨機更新網絡參數(shù),以增加網絡的泛化能力,防止訓練時產生過擬合。在每一層卷積層之后采用的激活函數(shù)為ELU函數(shù),ELU激活函數(shù)的形式如下:
(12)
相對于ReLu函數(shù),ELU函數(shù)的優(yōu)點是不會出現(xiàn)Dead ReLu問題,輸出平均值接近于0,并且可以通過減少偏置的影響使正常梯度更接近單位自然梯度,從而使均值向0加速學習;ELU在較小的輸出下會飽和到負值,因而可以減少前向傳播的變異和信息。輸出層的激活函數(shù)采用的是softmax函數(shù),softmax函數(shù)定義如下:
(13)
式中,f(aj)為第j個輸出值;n為輸出值,即label值的個數(shù),本文n為13。
softmax層的損失函數(shù)使用的是對數(shù)函數(shù),定義如下:
Li=-logf(am)。
(14)
式中,m為樣本的標簽,即對應輸出的具體label。
根據(jù)softmax函數(shù)可以進一步得到損失函數(shù)的具體表達式,如下:
(15)
通過損失函數(shù),可以計算出輸出標簽的損失值,進而預測出每一個標簽的概率,從而得到模型對待測字符的預測準確率。
為了評估改進的CNN LeNet-5模型性能,利用本文分割算法得到的數(shù)據(jù)集進行實驗。本文的代碼使用python語言編寫,基于keras學習框架進行訓練。硬件環(huán)境為2.20 GHz Core i7 5200 GPU,操作系統(tǒng)為Win10 64位,運行內存為32 GB。樣本訓練時采用固定學習率,學習率為0.001。在相同的實驗環(huán)境下,分別對傳統(tǒng)的LeNet-5網絡、改進的LeNet-5網絡、文獻[19]和文獻[20]中的神經網絡進行訓練,并用相同的樣本集進行模板匹配法的測試,通過比較它們的識別準確率來評估本文模型的性能。其中,文獻[19]利用卷積神經網絡fast R-CNN和非最大值抑制卷積神經網絡(NMS)對管腳字符進行識別,字符識別準確率達到97%以上;文獻[20]利用yolov3微網絡對車牌進行檢測,利用K-means算法進行聚類,通過改進的卷積神經網絡結構進行實驗,得到車牌字符的識別準確率為99.53%。
數(shù)據(jù)集包含了訓練集和測試集。利用本文分割算法,得到了單張字符圖像11 000張,共計12個類別,從每個類別中選取200張共2 400張作為測試集,剩余的8 600張為訓練集。部分分割的單個字符圖像如圖8所示。從圖中可以看出,在分割后的字符中,部分字符是半字符或殘缺字符,將一部分半或殘缺字符與正常同類別字符列為同一樣本集進行訓練,能夠增加訓練模型的泛化能力,提高模型的魯棒性。
圖8 字符部分訓練樣本
2.3.1 粘連字符和半或殘缺字符的識別
圖9是對點陣字符的識別結果,從圖中可以看出,后半部分字符經過預處理后會存在部分字符粘連和缺失或全部缺失的情況,利用本文分割算法,對后半部分字符分割后進行分標簽訓練,增加模型魯棒性,提高了該類字符的識別率。
圖9 字符識別結果
2.3.2 測試識別準確率
本文以學習率為0.001設置不同的迭代次數(shù)來檢測模型的收斂效果,不同迭代次數(shù)的損失值和識別準確率如圖10所示。從圖中可以得出,當?shù)螖?shù)達到4 000次時,模型已基本收斂。
圖10 損失值和識別準確率
為驗證本文算法的性能,將本文的模型與兩種魯棒性較好的字符識別模型(文獻[19]和文獻[20]中)和傳統(tǒng)的LeNet-5模型、模板匹配法進行了實驗對比,實驗數(shù)據(jù)分別為粘連字符圖像、半或殘缺字符圖像和正常字符圖像。其中,文獻[19]中模型訓練的學習率為0.001,文獻[20]中模型訓練的學習率為0.000 1。結果如表2所示。
表2 不同算法的字符識別準確率 %
從表2的實驗結果可以看出,模板匹配法和傳統(tǒng)的LeNet-5模型對粘連字符和半或殘缺字符識別能力較差,文獻[19]和文獻[20]相較于前兩種方法雖有所提高,但識別準確率仍相對偏低。模板匹配法只能對規(guī)則字符進行準確識別,而對于不規(guī)則字符的識別適應性較差;文獻[19]中的算法由于采集的訓練集數(shù)據(jù)過少,且基于人工數(shù)據(jù)進行訓練集的合成,缺少對真實環(huán)境中數(shù)據(jù)存在境況的考量,加之算法的復雜性,使識別的準確率和效率降低;文獻[20]中的算法模型只能用于特定格式的訓練,缺乏對數(shù)據(jù)集測試的通用性,導致對粘連字符的識別準確率較低;傳統(tǒng)的LeNet-5模型對于手寫字符的識別準確率較高,而對于噴碼字符的識別魯棒性較差。
為探討文獻[19]和文獻[20]與本文算法的識別準確率之間的差異,在獲得整體識別準確率的基礎上測試實驗數(shù)據(jù)每個字符的識別準確率,測試結果如圖11所示。從圖中可以看出,文獻[19]和文獻[20]中的算法對字符2,5,7,9的識別準確率較低,導致整體的識別準確率較低。原因是在上述數(shù)據(jù)集中所涉及的字符多為粘連字符和半或殘缺字符,文獻[19]和[20]中的算法對其適應性較差,導致識別準確率較低。而本文算法相較于這兩種算法適應性較好,識別準確率相對較高。
圖11 不同算法數(shù)據(jù)集各類樣本測試精度
字符識別系統(tǒng)[21]是通過機器視覺系統(tǒng)采集圖像,通過算法來對生產日期進行識別的一個端對端的在線集成系統(tǒng)。通過工業(yè)相機將實物信息變成圖像信息,經過字符分割、字符識別再將圖像上的生產日期信息轉換為字符信息,這大大減少了人工識別所帶來的成本以及降低了檢測誤差,提高了識別的準確率。
本文設計的字符識別系統(tǒng)以pycharm為開發(fā)平臺,利用python語言進行設計,能夠應用圖像處理技術實現(xiàn)對噴碼字符的自動識別。識別過程中需要數(shù)字圖像處理、python程序設計等相關知識相結合,做出識別系統(tǒng),實現(xiàn)對生產日期圖像的預處理及自動分割和識別。識別系統(tǒng)的原理是采用python編程開發(fā),封裝成獨立可執(zhí)行程序,并能夠實現(xiàn)手動圖像輸入識別。
為了使系統(tǒng)中的識別結果能夠清晰地呈現(xiàn)出來,采用python中的pyqt5和Qt designer[22]工具制作圖像用戶界面,通過GUI界面將整個設計呈現(xiàn)為四個模塊,主要包括圖像讀取模塊、目標區(qū)域獲取模塊、字符分割模塊和字符識別模塊。
圖像讀取模塊主要是對工業(yè)相機拍攝的原始圖像進行讀入,點擊讀取圖像可以打開對應文件夾,選擇要識別的生產日期圖像,然后圖像會顯示在相應位置。該模塊如果用在工業(yè)生產線上,可以直接把工業(yè)相機拍攝的圖像傳入到下一模塊。
目標區(qū)域獲取模塊直接將yolov3訓練的模型嵌入目標區(qū)域按鈕下的函數(shù)中,該按鈕下的函數(shù)能夠直接將生產日期區(qū)域進行裁剪并重新生成適合界面的圖像尺寸。點擊目標區(qū)域提取按鈕,會將圖像中生產日期的部分截取出來。
字符分割模塊用Qt designer設計好單個字符顯示的位置,通過相應的函數(shù)將目標區(qū)域模塊中裁剪得到的目標區(qū)域進行去噪二值化,并利用投影法和字寬相結合的方法完成字符的分割。點擊字符分割按鈕,字符分割結果將會顯示在界面相應的位置。
字符識別模塊是利用卷積神經網絡將預先分割好的單個字符進行訓練,得到一個訓練模型。將該訓練模型直接用于字符分割模塊分割后的單個字符識別,識別結果是將字符分割模塊分割后的圖像轉換為相應的標簽輸出到界面上。
通過字符識別系統(tǒng),將圖像信息轉換成字符信息,能夠有效快速地完成生產日期的檢測,有利于工業(yè)生產效率的提高。
本文針對圖像中存在的字符粘連問題,提出了一種基于字寬分割算法,并與投影法相結合,通過比較相鄰字符間的像素與所設閾值的大小關系,進而選定相應算法進行分割,對存在粘連字符的圖像有較好的分割效果。模型訓練時,丟棄部分神經元,并增加不規(guī)則字符的樣本比例,從而增加了模型的泛化性,提高了粘連字符和半或殘缺字符的識別準確率。基于上述方法設計的字符識別系統(tǒng),可以對生產日期進行在線實時檢測,加快了工業(yè)流水線的運轉效率。
本文雖然關注了流水線上不規(guī)則字符的識別率問題,但是未考慮生產線上字符識別的速度問題,而流水線上字符的高速識別,能夠提高企業(yè)的生產效益。今后的研究重點是在保證識別準確率的前提下提高識別速度,使字符識別系統(tǒng)同時滿足高準確率和高速度的要求。