王炳琪,吳則舉
(青島理工大學(xué)信息與控制工程學(xué)院,青島266520)
隨著人們生活質(zhì)量的提高,食品和飲品質(zhì)量安全越來越被重視,而人們最關(guān)注的便是其生產(chǎn)日期[1],所以產(chǎn)品生產(chǎn)日期等標(biāo)識的識別將是質(zhì)檢的重要一環(huán)。本文中啤酒瓶蓋的識別來自于某啤酒生產(chǎn)廠家的實(shí)際需求,啤酒在大批量生產(chǎn)中采用人工識別與記錄,工作量極大,浪費(fèi)人力物力,所以基于光學(xué)字符識別技術(shù)的啤酒瓶蓋字符識別將是解決這一問題的有效方法。光學(xué)字符識別(Optical character recognition,OCR)是通過數(shù)字化圖像處理的手段,進(jìn)行文字檢測與識別的技術(shù)。OCR 技術(shù)起源于1929年,由德國科學(xué)家Tausheck正式提出并取得專利。1951年,第一臺電子計算機(jī)的誕生使OCR 理論變成現(xiàn)實(shí)[2]。1965年,IBM 公司展出的光學(xué)字符識別產(chǎn)品使OCR 技術(shù)得到了實(shí)際運(yùn)用。Guillevic等[3]結(jié)合了K 臨近算法[4]與隱馬爾科夫模型[5]對單詞進(jìn)行識別,算法較為簡單,識別率差強(qiáng)人意。Li等[6]設(shè)計了一種自然場景中的車牌識別算法,利用9層神經(jīng)網(wǎng)絡(luò)進(jìn)行快速檢測,4層神經(jīng)網(wǎng)絡(luò)進(jìn)行準(zhǔn)確識別,該方法缺點(diǎn)在于檢測速度慢,無法達(dá)到實(shí)時性的要求。Shi等[7]提出了一種將卷積神經(jīng)網(wǎng)絡(luò)(CNN)與遞歸神經(jīng)網(wǎng)絡(luò)(RNN)相結(jié)合的卷積遞歸神經(jīng)網(wǎng)絡(luò)(CRNN),該網(wǎng)絡(luò)將特征提取、序列建模和識別集成到統(tǒng)一框架中,但是其網(wǎng)絡(luò)結(jié)構(gòu)復(fù)雜,難以實(shí)現(xiàn)。為解決上述問題,本文通過U-Net語義分割網(wǎng)絡(luò)對字符區(qū)域進(jìn)行快速定位,再經(jīng)過二值化、旋轉(zhuǎn)矯正和字符分割過程提取出清晰的單個字符,最后利用加入批標(biāo)準(zhǔn)化(Batch Normalization,BN)生成的改進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)對字符進(jìn)行識別。本文算法在保證識別率的前提下滿足了實(shí)時性要求,具有一定的工程應(yīng)用價值。
啤酒瓶蓋的噴碼圖像如圖1所示,由于環(huán)境光復(fù)雜,瓶蓋邊緣出現(xiàn)反光現(xiàn)象,產(chǎn)生高亮圓環(huán),且不同生產(chǎn)線環(huán)境光差異較大造成瓶蓋圖像明暗不一。不同批次產(chǎn)品底紋存在差別,提升了底紋濾除的復(fù)雜度。除此之外,生產(chǎn)中字符區(qū)域存在偏轉(zhuǎn),字符間存在粘連現(xiàn)象。因此本文旨在設(shè)計一種準(zhǔn)確高效的算法對啤酒瓶蓋中的字符進(jìn)行識別。
本文的方法流程,如圖2所示。首先運(yùn)用U-Net語義分割網(wǎng)絡(luò)對字符位置進(jìn)行定位,然后利用基于迭代的最佳閾值獲取方法確定每幅圖像的最佳閾值,對圖像進(jìn)行二值化操作,濾除底紋。應(yīng)用幾何原理對字符區(qū)域旋轉(zhuǎn)矯正。使用投影法和輪廓法相結(jié)合的方法分割字符,對粘連字符也有很好的分割效果。最后使用改進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)對字符進(jìn)行識別,識別正確率滿足本文要求且訓(xùn)練時間更短。
U-Net[8]發(fā)展于全卷積網(wǎng)絡(luò)(Full convolutional network,F(xiàn)CN)[9]之上,是一個語義分割網(wǎng)絡(luò),由一個收縮路徑和一個拓展路徑組成。其中收縮路徑用于獲取圖像信息,擴(kuò)展路徑用于實(shí)現(xiàn)精確定位,由于網(wǎng)絡(luò)結(jié)構(gòu)類似于大寫的字母U 而得名U-Net。如圖3所示,收縮路徑包括兩個重復(fù)的3×3卷積,每個卷積后面跟一個整流線性單元(Re LU)以及一個2×2最大池化操作,而擴(kuò)展路徑的每一步都包括對特征圖進(jìn)行上采樣,然后進(jìn)行2×2卷積,將特征通道數(shù)減半,與來自收縮路徑的特征圖串聯(lián)。
U-Net語義分割網(wǎng)絡(luò)被應(yīng)用在醫(yī)學(xué)圖像處理行業(yè)中,分割出物體的輪廓,處理的圖像是單通道圖像,具有訓(xùn)練集數(shù)量要求較少、分割速度快的優(yōu)點(diǎn)。所以U-Net非常適合在啤酒自動化生產(chǎn)線這種實(shí)時性要求很高的環(huán)境下應(yīng)用,本文使用該網(wǎng)絡(luò)對字符區(qū)域進(jìn)行定位。
字符定位后的灰度圖像經(jīng)二值化操作后可以去除底紋,得到字符的二值化圖像。由于不同生產(chǎn)批次的瓶蓋底紋不同,以及不同生產(chǎn)線的光照環(huán)境不同,導(dǎo)致每一個瓶蓋圖像進(jìn)行二值化操作時的閾值存在區(qū)別,本文將采用迭代法確定每一幅瓶蓋圖像的最佳閾值。迭代法基于逼近思想,能夠根據(jù)每一幅圖像的灰度值分布逼近一個最佳的閾值。所得的閾值能夠更容易區(qū)分圖像的前景和背景,可以很好地去除底紋。本文圖像二值化過程為:
步驟一:設(shè)定圖像灰度值的中值作為初始的閾值記為T0,利用初始閾值T0將圖像分為灰度值大于T0的部分和小于等于T0的部分,分別記為A1和A2;
步驟二:分別計算A1和A2兩部分的歸一化灰度直方圖和歸一化累計直方圖,分別記為h(t)和H(t) ,可以表示為
其中,t和t′都表示像素的灰度級,n (t) 表示灰度級為t的像素點(diǎn)的個數(shù),M 和N 分別代表圖像像素的行數(shù)和列數(shù)。
步驟三:利用式(1)和式(2)分別計算出A1和A2兩部分灰度值的均值,分別表示為X1和X2
步驟四:通過X1和X2計算更新的閾值為
步驟五:計算T1和T0的差值,若小于某一定值,T0便是最終的閾值,若大于等于這一定值則重復(fù)步驟二到步驟四,直到輸出符合要求的最佳閾值。
本文中利用最小外接矩形來輔助計算,使用幾何原理尋找字符區(qū)域的旋轉(zhuǎn)中心、確定旋轉(zhuǎn)角度。最小外接矩形的中心點(diǎn) (x0,y0) ,即為字符區(qū)域的旋轉(zhuǎn)中心
其中,X、Y 分別為最小外接矩形的橫縱坐標(biāo)。
確定旋轉(zhuǎn)中心后,需要確定旋轉(zhuǎn)角度。啤酒從瓶蓋噴碼完成到采集系統(tǒng)拍照之前在自動化生產(chǎn)線中傳送時會產(chǎn)生小角度的自旋轉(zhuǎn),字符區(qū)域出現(xiàn)順時針或者逆時針的偏轉(zhuǎn),偏轉(zhuǎn)角度在 (- 90°,90°) 范圍內(nèi)。本文選取外接矩形的長邊為參考線,矩形的長邊與x 軸之間的夾角即為字符區(qū)域的偏轉(zhuǎn)角度,計算過程如下:
步驟一:按順序選取最小外接矩形的相鄰三個頂點(diǎn),假設(shè)記為 (x1,y1) ,(x2,y2) ,(x3,y3) ;
步驟二:分別計算 (x1,y1) 和 (x2,y2) 以及 (x2,y2) 和 (x3,y3) 間的歐氏距離,并選取歐式距離較大的兩個頂點(diǎn)即矩形長邊頂點(diǎn)作為參考點(diǎn),假設(shè)為 (x1,y1) 和 (x2,y2) ;
步驟三:通過 (x1,y1) 和 (x2,y2) 判斷旋轉(zhuǎn)方向和旋轉(zhuǎn)角度,分為a)、b)、c)、d)、e)五種情況:
a)當(dāng)y1>y2且x1>x2,字符存在順時針偏轉(zhuǎn),偏轉(zhuǎn)角度為θ=
b)當(dāng)y1>y2且x1<x2,字符存在逆時針偏轉(zhuǎn),偏轉(zhuǎn)角度為θ=
c)當(dāng)y1<y2且x1>x2,字符存在逆時針偏轉(zhuǎn),偏轉(zhuǎn)角度為θ=
d)當(dāng)y1<y2且x1<x2,字符存在順時針偏轉(zhuǎn),偏轉(zhuǎn)角度為θ=
e)當(dāng)y1=y(tǒng)2,字符不存在偏轉(zhuǎn)。
確定旋轉(zhuǎn)中心、偏轉(zhuǎn)方向和偏轉(zhuǎn)角度后,令字符區(qū)域繞旋轉(zhuǎn)中心反向旋轉(zhuǎn)特定角度后便可獲得矯正后的字符圖像。
本文的字符分割算法的流程圖如圖4所示。本文數(shù)據(jù)中,每幅圖像中的字符為2×8排列,共計16個字符。因此首先將字符區(qū)域分割為上下兩排,對圖像求豎直方向上的投影,每一行像素的灰度值之和為S(i),其中i為行序號,取一閾值Z0
利用Z0對圖像進(jìn)行逐行分割,找出符合條件的行數(shù)i
在第i行處進(jìn)行上下切分,完成豎直方向上的行切割,然后分別對每一排字符進(jìn)行單個字符的分割。
由于水平方向上相鄰兩個字符間存在著字符粘連的情況,本文提出了一種投影法和輪廓法相結(jié)合的字符分割算法,能準(zhǔn)確分割出無粘連圖像與粘連圖像。首先對圖像求水平方向的投影,每一列像素的灰度值之和記為S′(j),其中j為列序號。為了能夠準(zhǔn)確的尋找到分割點(diǎn),本文將設(shè)定一個閾值Z1,令
此時S(j)=1的左右邊界便是分割點(diǎn)的左右邊界,分別記為L和R,可以根據(jù)左右邊界確定精確的分割點(diǎn),分割點(diǎn)的列序號記為F,表示為
每排有8個字符,如果字符間存在粘連,根據(jù)投影法計算出的分割點(diǎn)個數(shù)就會少于7個,這時需要根據(jù)輪廓法對粘連字符進(jìn)行分割。
本文對字符上輪廓進(jìn)行檢測,與投影法尋找分割點(diǎn)的方式相似,尋找一個合適的閾值Z1對輪廓函數(shù)大于閾值的部分置0,小于閾值的部分置1,再尋找出函數(shù)值為1的左右邊界,最后根據(jù)左右邊界值確定精準(zhǔn)的分割點(diǎn),依據(jù)分割點(diǎn)就可以分割出相鄰兩個粘連的字符。
字符識別的卷積神經(jīng)網(wǎng)絡(luò)(CNN)共有7層結(jié)構(gòu),如圖5所示,其中C1為卷積層,有6個大小為5×5的卷積核;S2是池化層,有6個大小為2×2的池化窗口;C3為卷積層,有16個大小為5×5的卷積核;S4是池化層,有16個大小為2×2的池化窗口;C5為卷積層,有120個大小為5×5的卷積核;F6為全連接層。
為了減少訓(xùn)練時間,加快訓(xùn)練速度,本文在C1和C3后加入批標(biāo)準(zhǔn)化(Batch Normalization,BN),得到改進(jìn)的CNN 識別網(wǎng)絡(luò)。其通過減少數(shù)據(jù)內(nèi)部協(xié)變量的變化,減輕深層學(xué)習(xí)模型訓(xùn)練的問題,可以使用較大的學(xué)習(xí)率來訓(xùn)練網(wǎng)絡(luò),提高網(wǎng)絡(luò)的泛化能力。在卷積神經(jīng)網(wǎng)絡(luò)中,輸入通道數(shù)為N的卷積濾波器的響應(yīng)y
其中,w i是第i個輸入通道中的權(quán)重矩陣,x i是第i個輸入通道的輸入,b表示偏移。當(dāng)加入BN 層后,b被替換為BN 層中的β移位因子。BN 層
其中,μ是均值,σ2是方差,ε是數(shù)值穩(wěn)定系數(shù),γ是比例因子,β是小批量和每個輸入通道上計算的偏移量,是多通道卷積的響應(yīng),是BN 層輸出。
由于啤酒瓶蓋底紋不同、光線強(qiáng)度不統(tǒng)一、噴碼位置不同等原因,使字符難以定位,本文使用U-Net語義分割網(wǎng)絡(luò)對字符區(qū)域進(jìn)行分割。該網(wǎng)絡(luò)訓(xùn)練集由圖像注釋工具Labelme[10]得到,如圖6所示。圖6(b)中,黑色部分表示本文需要分割的字符區(qū)域。
U-Net語義分割網(wǎng)絡(luò)具有訓(xùn)練集數(shù)量少、分割速度快的優(yōu)點(diǎn),測試結(jié)果如圖7所示。對于不同情況下的圖像,U-Net都得到了很好的圖像分割效果。該網(wǎng)絡(luò)參數(shù)如表1所示。
表1 U-Net參數(shù)
根據(jù)U-net字符定位結(jié)果,分割出的字符區(qū)域,如圖8所示。除字符區(qū)域外其它冗余信息全部濾除,降低了二值化運(yùn)算的復(fù)雜度,經(jīng)過二值化處理的結(jié)果如圖9所示,底紋濾除完全且字符細(xì)節(jié)保留完整。
由于啤酒在噴碼完成到圖像采集過程中出現(xiàn)了順時針或者逆時針的小角度旋轉(zhuǎn),圖像采集時字符區(qū)域出現(xiàn)整體偏轉(zhuǎn),而字符區(qū)域的偏轉(zhuǎn)增加了字符分割的難度,所以在進(jìn)行字符分割前需對圖像中字符區(qū)域進(jìn)行旋轉(zhuǎn)矯正。根據(jù)字符區(qū)域確定最小外接矩形,應(yīng)用幾何法確定旋轉(zhuǎn)中心和旋轉(zhuǎn)角度,如圖10(a)所示。利用圖像旋轉(zhuǎn)算法進(jìn)行旋轉(zhuǎn)矯正,結(jié)果如圖10(b)所示。
在旋轉(zhuǎn)矯正完成后利用最小外接矩形進(jìn)行切割,徹底分離出字符區(qū)域。本文數(shù)據(jù)字符為2×8排列,字符分割過程可分為行分割和列分割。根據(jù)豎直投影法對上下兩排字符進(jìn)行分割,分割結(jié)果如圖11所示。
進(jìn)行列分割時,需要判斷字符是否存在粘連。不存在字符粘連時利用水平投影的方式進(jìn)行分割。首先利用閾值確定水平投影函數(shù)波谷,然后確定波谷的左右邊界,即分割點(diǎn)的左右邊界,如圖12(a)所示,圓點(diǎn)和菱形分別代表分割點(diǎn)的左右邊界,利用左右邊界得到準(zhǔn)確的分割點(diǎn),即可完成水平方向上的字符分割。如果存在字符粘連則需利用輪廓法進(jìn)行分割,后續(xù)分割過程與無粘連圖像基本相同,通過左右邊界確定準(zhǔn)確分割點(diǎn),如圖12(b)所示。根據(jù)得到的分割點(diǎn)對字符進(jìn)行分割結(jié)果如圖13所示,可以分割出清晰的單個字符,符合識別網(wǎng)絡(luò)的要求。
本文利用加入BN 的改進(jìn)的CNN 對字符進(jìn)行識別,當(dāng)損失函數(shù)值下降且趨于0 時表示網(wǎng)絡(luò)收斂。CNN 的loss曲線如圖14(a)所示,存在震蕩現(xiàn)象,而改進(jìn)的CNN 的loss曲線平穩(wěn),如圖14(b)所示??梢钥闯?,改進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)收斂更快,只需迭代80次,提高了訓(xùn)練速度。
改進(jìn)的CNN 的識別正確率如表2所示,單個字符的識別正確率為98%左右。
表2 改進(jìn)的CNN 字符識別精度
結(jié)合本文所有處理過程,對500幅啤酒瓶蓋圖像進(jìn)行字符識別,經(jīng)統(tǒng)計,其正確檢測率達(dá)97%,平均檢測一副圖像只需0.8秒,可以達(dá)到工程中精度和實(shí)時性的要求。
本文解決了位于啤酒瓶蓋上的字符識別問題。首先使用U-Net語義分割網(wǎng)絡(luò)對字符區(qū)域進(jìn)行定位提取,該網(wǎng)絡(luò)對目標(biāo)區(qū)域的定位精確。利用基于迭代的二值化方法濾除底紋,應(yīng)用幾何原理對字符區(qū)域旋轉(zhuǎn)矯正,然后通過投影法與輪廓法相結(jié)合的分割算法對圖像進(jìn)行單個字符的分割,分割結(jié)果清晰,符合識別網(wǎng)絡(luò)的要求。最后使用卷積神經(jīng)網(wǎng)絡(luò)對字符進(jìn)行識別,加入BN 層得到的改進(jìn)的CNN 以提升網(wǎng)絡(luò)性能,加快訓(xùn)練速度,得到了理想的識別率。實(shí)驗(yàn)表明,本文算法對啤酒瓶蓋圖像的識別正確率達(dá)97%,平均識別一幅圖像僅需0.8秒,充分滿足工程應(yīng)用中的要求。
青島大學(xué)學(xué)報(自然科學(xué)版)2020年3期