朱傳浩,歐陽八生
(南華大學機械工程學院,湖南衡陽 421001)
印刷標簽主要用來介紹生產廠家的有關信息,標明產品參數。在產品發生故障的過程中,便于對產品進行追蹤。由于現在不同產品所需標簽不同,同種標簽所需型號不同等,標簽類型也變得各式各樣。目前針對字符識別研究方法,主要分為人工檢測和機器視覺檢測[1]。人工在長時間檢測過程下容易對標簽的識別產生誤判,且檢測的效率低、成本較高。而機器視覺在光照環境、字符缺陷、標簽種類多樣的影響下,檢測與分類結果也會產生較大誤差。因此,針對標簽印刷過程中產生的字符缺失、印刷不清、字符連接等原因造成的識別問題,提出了一種基于機器視覺的多種類標簽識別的改進方法,可以有效提高標簽字符識別的準確性,降低時間成本。
在字符識別的相關研究中,馬玲等[2]提出了基于模板匹配和支持向量機的點陣字符識別方法,字符識別率達到96.10%。靳彩園等[3]選用一種自適應調節學習率和動態調整S 型激勵函數相結合的改進BP 算法對字符進行精確識別。楊桂華等[4]利用機器視覺,設計了一種基于生成基準圖像的電表銘牌視覺檢測方法,結果表明該方法對電表銘牌印刷缺陷檢測有較好的魯棒性,能準確檢測出電表銘牌的多種印刷缺陷。
傳統基于模板匹配和字符分割識別方法雖然識別效率較高,但對于字跡模糊和字符粘連標簽的識別準確率有所欠缺。而改進BP算法由于較深的網絡結構,識別效率相對較低。針對這個為問題,本文首先對傾斜、彎曲字符進行畸變矯正[5],對圖像進行灰度化處理,通過高斯濾波降噪,最后對圖像進行Otsu 算法二值化得到預處理結果,再基于一種改進的CRNN+CTC 算法進行識別。
標簽字符識別方法由硬件系統和軟件系統兩部分組成。硬件系統為工業相機、50 mm FA 鏡頭、120 mm 30°的環形光源和標簽識別工件,其采樣平臺結構如圖1所示。
圖1 采樣平臺結構
硬件系統參數配置如圖2 所示。相機視野為71 mm×60 mm,分辨率為0.029 mm/pixel。
圖2 硬件系統參數配置
軟件系統由圖像信息采集模塊、圖像預處理模塊、標簽字符算法識別模塊組成。標簽字符識別軟件系統的流程如圖3所示。
圖3 字符識別系統流程
由于印刷標簽的材質較軟,某些標簽的表面有弧度,所以需要對圖像進行畸變矯正。選取標簽字符的最小外接矩形與標準標簽模板進行比較,并對最小外接矩形進行穩健回歸[6]。然后利用標簽字符的最小外接矩形對字符的外邊框進行擬合,計算出字符區域的4個頂點坐標;最后,運用透視變換對字符進行畸變矯正。該方法計算復雜度較低,對于解決標簽邊緣信息缺失、字符粘連等情況,有良好的修復效果。
2.2.1 圖像灰度化
灰度化[7]的過程就是把彩色圖像轉化為灰度圖像,將一般格式的圖像轉化為灰度圖可以減少后續圖像的計算量。灰度圖像描述反映了整幅圖像的整體和局部的色度和亮度等級的分布和特征。不同種類標簽灰度化效果如圖4所示。
圖4 標簽灰度圖
2.2.2 圖像增強
圖像增強的主要目的是提高圖像的質量和可辨識度,有利于進一步分析和處理圖像特征。為了減少在圖像邊緣和圖像輪廓模糊的情況出現,就需要利用二階微分拉普拉斯算子進行圖像銳化。其公式如下:
通過圖5的對比可發現,拉普拉斯算子補償了圖像的輪廓,圖像的邊緣有所增強,字符的對比度變得清晰。
圖5 Laplacian算子處理對比
2.2.3 濾波
圖像濾波[8]的目的是消除圖像中參雜的噪聲,為圖像的識別抽取圖像特征。本文選用高斯濾波,首先圖像的逐個像素是由高斯核進行卷積,得出每個像素值。然后利用周圍像素的值,將距離作為權重計算卷積核中心位置的像素。N維空間正態分布方程和二維空間正態分布分別為:
式中:(u,v)為點坐標,在圖像中為整數;σ為標準差,標準差代表著數據的離散程度,σ越大,高斯函數越平滑,數據的離散程序越大。
構建一個5×5 的卷積層,對電機牽引器字符進行高斯濾波處理,如圖6 所示。實驗證明,高斯濾波能夠較好地去除圖像上隨機出現的高斯噪聲,但是在去除噪聲的同時,也會使圖像變得模糊。
圖6 高斯濾波處理對比
2.2.4 二值化
圖像二值化[9]就是對圖像上的像素點的灰度值設置為0或255,將整個圖像表現出明顯的黑白效果。閾值的選取有以下兩種方法:固定閾值法和Otsu法。
固定閾值法是將輸入圖像的所有像素點進行統一,固定使用同一個閾值。其基本思想如下:
式中:T為全局閾值。
Otsu 算法又稱為最大類間方差法,該方法主要是通過閾值進行前后背景分割,使類間方差最大,錯分概率最小。本文采用Otsu 法求閾值二值化,結果如圖7所示。
圖7 Otsu法求閾值的二值化結果圖
式中:w0為前景點所占比例;w1為背景點所占比例,w1= 1-w0;u0為前景灰度均值;u1為背景灰度均值,u=w0·u0+w1·u1為全局灰度均值。
目標函數g越大,t就是越好的閾值。
本文改進的CRNN+CTC 多種類標簽識別算法是由一個多層次網絡模型構成,主要包含CNN、RNN 和CTC 三個網絡模型。使用深度CNN 提取輸入圖像的特征來得到特征圖;再使用雙向RNN(BLSTM)對特征序列進行預測,學習序列中的每一個特征向量,最終輸出預測標簽分布;使用CTC 損失,把從循環層獲取的一系列標簽分布轉換成最終的標簽序列。能夠有效解決基于字符分割的識別方法在復雜環境下識別準確率不高的問題。
2.3.1 CNN模塊
一般的CNN 網絡模型是采用VGG-16[10-11],模型是由若干卷積層和池化層堆疊(stack)的方式構成,比較容易形成較深的網絡結構,在字符識別過程中會影響算法的效率。本文選擇在VGG-16模型的基礎上進行改進。
(1)VGG-16 的卷積層是用來設計光學圖像的,而本文灰度圖的信息量較少,減少了網絡的特征提取能力,所以適當刪減模型的卷積層數量,提升模型的運算速度。
(2)在VGG-16模型中加入BN 算法[12]和Adam 算法。BP 算法能夠提高模型的泛化能力和增強參數的歸一化處理;而Adam 算法能幫助加強CNN 模型更新方向的收斂速度。
2.3.2 RNN模塊
傳統RNN 在進行反向傳播的時候,過長的序列導致梯度的計算異常, 發生梯度消失或爆炸。為減低這種影響,本文采用了深層雙向BLSTM 網絡[13],如圖8 所示。雙向LSTM 就是在隱層里面分別有一個正向和反向LSTM,來捕捉上文和下文的信息特征,對比于單向LSTM來說,能夠獲取更多的其他特征信息。
圖8 深層雙向BLSTM網絡結構
處理流程:采用兩層各256 單元的雙向LSTM 網絡,將CNN 模型中得到的40 個特征向量傳入LSTM 中,則有40個時間步分別對40個特征向量進行分類。RNN的目標就是根據輸入的特征向量預測,獲取所有字符的softmax概率分布,這是一個長度為字符類別數的向量,作為CTC 層的輸入。將每個時間步輸入的特征向量xT進行輸出,得到一個所有字符的概率分布yT,后驗概率矩陣則是由40個長度為字符類別數的向量構成。
2.3.3 CTC損失函數
輸入的各種類標簽字符中,由于字符間隔、圖像變形、字符模糊等問題,導致同個字符會錯誤地呈現出其他形式,相鄰字符可能會被重復識別。常見的交叉熵函數[14]網絡,對這種標簽字符長度及數量識別效果不夠理想。在CRNN 模型中將一個CTC[15]模型連接在雙向LSTM網絡層上,完成了端對端字符序列識別。解決了輸入數據與給定標簽的對齊問題,可用于執行端到端的訓練,輸出不定長的序列結果。
CTC 模型訓練過程中,對于LSTM 給定輸入x情況下,輸出的l率為:
式中S為訓練集。
實驗選用的軟件系統為Windows10,型號為64 位。軟件運行環境為64位操作系統下搭建的Halcon 深度學習框架。硬件平臺選用Intel(R)Core(TM)i5-9400 型號的計算機,其處理器的主頻大小為2.9 GHz。對基于機器視覺的多種類標簽識別系統進行設計。
對某公司生產標簽進行數據采集,選取2 000張圖片進行識別測試。其中1 000張為正常的字符圖像,命名為Test1;500張為字符斷裂、字符連接缺陷的圖像,命名為Test2;500張為光照不同,字跡模糊的圖像,命名為Test3。
3.3.1 實驗結果
本文主要從字母數字字符識別率(ACRR)、漢字識別率(CCRR)、標簽識別準確度(RA)和字符識別準確度(CRA)4個方面對算法進行評估,如表1所示。其中ACRR 和CCRR 主要是分析模糊字符、字符粘連等識別率低的原因。RA 和CRA 主要是分析改進算法性能,是否能夠達到工業要求。
表1 改進CRNN+CTC網絡實驗結果
由表1可以得出4種評估方法在Test1上都擁有較高的準確率,說明此算法對于完整標簽圖像能夠較好識別。CCRR在3種測試集種識別率為99.2%、95.3%和96.4%,均低于其他評估方法,可得知漢字的識別率是影響標簽識別準確度的主要原因。Test2測試集的綜合評估指標低于Test3,說明字符斷裂和粘連的影響要大于光照和字符模糊的影響。
3.3.2 對比與分析
為比較改進CRNN+CTC算法的識別效果,本文與傳統的字符分割法和原CRCC+CTC共3種進行實驗效果對比分析。主要分析標簽識別準確度、字符識別準確度以及檢測速度(T),分析結果如表2所示。由表可以得出,本文改進的CNCC+CTC算法相較于傳統分割字符識別算法,在Test2和Test3中RA識別準確率分別提升了6.0%和6.4%,CRA識別準確度上分別提升了11.4%和10.1%,對于模糊字符和字符粘連的情況,滿足了工業的需求;原CRNN+CTC算法在3種測試中識別準確率均在96.5%以上,但是在檢測速度上消耗時間較長。本文改進算法在Test2和Test3中檢測速度上分別提升了19 ms和23 ms,識別效率有大幅度提高。
表2 實驗對比結果
通過改進的CRNN+CTC 算法,解決了在各種類印刷字符識別過程中準確率低、分類難的問題。在CRNN 算法中減少模型的卷積層數量,加入BN 算法和Adam 算法,提升了對模型的收斂速度。改進的CRNN+CTC 算法相較于傳統字符分割算法解決了識別階段累計誤差的現象,識別的準確率有較大提升;相較于原CRNN+CTC 加強了CNN模型更新方向的收斂速度,使識別速度更快。
目前主要是在印刷標簽的字符上進行識別方法的研究,對于標簽的識別比較單一,未來可以加入模板匹配的算法來對標簽的圖畫進行識別,不僅可以篩選出符合工業生產的標簽進行分類,而且兩者的結合能夠更有效地提高識別的準確率。