郭毛琴,謝紅薇,張效良
(太原理工大學 軟件學院,山西 太原 030024)
我國越來越龐大的工業(yè)生產(chǎn)中,設備類型及數(shù)量也日趨豐富。設備表面基本都有用于表明設備基本信息的多種類型的字符,在進行設備檢修、維護、管理等操作時,采用人工方式統(tǒng)計設備銘牌信息時,需要手動的對信息進行輸入整合,這種傳統(tǒng)方法效率很低。若采用人工智能技術(shù)對設備銘牌中的文本進行檢測,依然存在諸多難點:①設備銘牌包括中英文、數(shù)字、特殊符號等多種字符,不同的文本類型的文本特征也存在較大的差異,加大了文本檢測與識別的難度;②由于圖像采集環(huán)境和設備參差不齊,使設備銘牌表面的文本出現(xiàn)變形、模糊、光照不均等問題,導致增加了文本區(qū)域的噪聲,影響文本檢測精度;③在自然場景下,采集圖像的背景有很大的不確定性,對文本行的檢測可能會受到背景的影響,從而增加了檢測難度;④在設備銘牌的字符識別過程中,由于文本行長度不一,而且包括多種類型的字符,需要精確識別任意長度的文本序列,存在一定的困難[1]。本文為解決上述問題,分析并改進現(xiàn)有的文本檢測與識別算法,提出一種適用于銘牌文本識別的算法模型。
利用深度學習技術(shù)進行文本檢測,主流的方法有以下幾種。Tian等[2]提出CTPN(connectionist text proposal network)算法,采用FasterRCNN中的RPN(region proposal network)架構(gòu),使用VGG16網(wǎng)絡作為模型的基礎框架。在檢測過程中,字符序列的上下文信息十分重要,CTPN算法中借助循環(huán)神經(jīng)網(wǎng)絡來獲取,使得檢測更加有效[3]。Liao等[4]提出TextBoxes檢測方法,采用SSD算法結(jié)構(gòu),支持多尺度訓練,是一種端到端的模型結(jié)構(gòu),檢測細長文本行效果較好。Li等[5]提出了PSENet算法,該算法沿用了特征金字塔網(wǎng)絡的結(jié)構(gòu),提出漸進式擴展算法能夠?qū)崿F(xiàn)對彎曲文本的定位,并且能將相鄰的文本區(qū)域分割開來。Zhou等[6]提出EAST算法,算法中借鑒全卷積網(wǎng)絡的架構(gòu)模式。在像素級層面對圖像中的文本信息做出預測,這種方法能實現(xiàn)多方向的檢測,與CTPN算法相比,檢測中文文本的效果較差。現(xiàn)階段,利用深度學習技術(shù),對字符進行識別越來越普遍。Shi等[7]提出的CRNN(convolutional recurrent neural network)模型,將卷積神經(jīng)網(wǎng)絡和雙向長短期記憶網(wǎng)絡連接起來,可以在一個網(wǎng)絡中實現(xiàn)特征提取、序列建模和序列分析。而且,該過程中不存在字符分割,可以對不同長度的文本序列進行識別。
由于污水處理設備銘牌的特殊性,需在自然場景下采集的圖像中檢測并識別多種字符類型。結(jié)合實際應用場景,本文提出一種改進的CTPN文本檢測算法,該算法在檢測網(wǎng)絡之前設計圖像預處理模塊,使用ResNet50網(wǎng)絡代替CTPN模型中的VGG16網(wǎng)絡,改進了NMS非極大值抑制算法,解決了由于圖像傾斜以及復雜背景等影響檢測精度的一系列難點。將CRNN文本識別模型整合到檢測算法中,可以直接對輸入的銘牌圖像進行檢測與識別,有效提升了檢測與識別的效果。
CTPN算法采用雙向的LSTM結(jié)構(gòu)可以實現(xiàn)對多種語言和不同尺度文本行的檢測,為解決此算法只能檢測水平方向文本行的問題,對傳統(tǒng)的CTPN網(wǎng)絡模型進行改進。本文提出的AdvancedCTPN文本檢測算法由3個模塊組成。
在采集過程中,由于拍攝角度存在差異,會導致銘牌圖像出現(xiàn)傾斜情況,進而導致文本行不是水平的,如圖1所示。一般來說,傳統(tǒng)的矯正算法可以解決由于拍攝角度而導致的傾斜,比如Radon變換和霍夫變換。采用傳統(tǒng)方法進行圖像校正時,對噪聲比較敏感,而且算法實現(xiàn)比較復雜。在銘牌識別場景中,為同時解決角度傾斜與視角傾斜對文本檢測與識別帶來的影響,本文提出了一種基于銘牌角點的校正網(wǎng)絡。
2.1.1 角點定位網(wǎng)絡
在采集的銘牌圖像中,由于光照或者拍攝角度的偏差,會導致圖像呈現(xiàn)出亮度不均勻狀態(tài)。為避免由于上述情況導致檢測結(jié)果不準確,將拍攝的銘牌圖片進行處理,原始圖像如圖2(a)所示,先進行灰度化,結(jié)果如圖2(b)所示。然后為減少圖像中參數(shù)個數(shù),使得背景與銘牌更易區(qū)分,對灰度圖像作局部自適應閾值二值化操作,讓圖片呈現(xiàn)出黑白效果。由于實際場景中的銘牌圖像顏色不完全相同,確定一個固定的閾值來進行二值化,效果并不理想[8]。根據(jù)圖像的局部像素分布,使得圖像中的每一個像素位置都分別對應一個閾值,可以達到較好的處理效果。局部自適應二值化是在計算圖像的局部閾值thi時引入一個常量C,公式中像素點i的鄰域像素用Ri來表示,在[-20,20]區(qū)間中均勻選取10個數(shù)值作為常量C的取值,也就是說,通過改變C的值,實現(xiàn)多級的局部自適應二值化,本文實驗中將20×20的正方形區(qū)域設置為像素點的鄰域大小。計算出圖像i點的鄰域像素的平均值,然后減去常量C得到thi,如式(1)所示。圖像灰度化以及二值化的處理效果如圖2所示
thi=avg(Ri)-C
(1)
在二值化后的銘牌圖像中,根據(jù)銘牌形狀的先驗條件,篩選出符合條件的連通域范圍,得到銘牌圖像輪廓,如圖3(a)所示。將銘牌區(qū)域的邊界點坐標值記錄下來,如圖3(b)所示。將邊界點坐標進行線性擬合,確定銘牌圖像的4條邊界線,如圖3(c)所示。其中,銘牌圖像的4個角點為4條邊界線的交點所在位置,如圖3(d)中D1、D2、D3、D4所示。在銘牌圖像邊界的坐標點集合中查找橫縱坐標的最值,確定最小外接矩形4個角點的坐標。根據(jù)數(shù)學運算規(guī)則,可以得到:左上點R1的坐標,由圖3(d)中直線D1D2上的坐標點確定,橫縱坐標的取值分別是D1D2中坐標點的最小值和最大值,即R1的坐標由D1點的橫坐標與D2點的縱坐標確定;同理,右上點R2的坐標由D3點的橫坐標以及D2點的縱坐標確定;右下點R3的坐標由D3點的橫坐標以及D4點的縱坐標確定;左下點R4的坐標由D1的橫坐標與D4的縱坐標確定,如圖3(e)所示。銘牌角點的確定以及校正過程如圖3所示。
2.1.2 圖像校正網(wǎng)絡
基于上述角點定位網(wǎng)絡確定了圖像中銘牌的關鍵點,然后利用透視變換規(guī)則,可以將發(fā)生形變的區(qū)域校正為規(guī)則的矩形圖像。將傾斜文本校正的同時也一定程度上減少了復雜背景對文本檢測的干擾[9]。一般的線性變換是二維坐標之間的變換,也就是說只能實現(xiàn)旋轉(zhuǎn)和縮放。而透視變換的實質(zhì)是一種非線性變換,其變換過程是將二維坐標轉(zhuǎn)換到三維坐標系中,進行投影運算,得到一個新的二維坐標,即把一個圖像平面投影到一個新的平面的過程。由于透視變換過程中涉及到三維變換,所以要引入?yún)?shù)w。假設原始坐標為 (u,v), 由x=x′/w′,y=y′/w′可以得到透視變換后的坐標,兩者關系如式(2)所示
(2)
可以推出
x′=a11u+a21v+a31wy′=a12u+a22v+a32ww′=a13u+a23v+a33w
(3)
其中,透視變換矩陣為
(4)
在Transform矩陣中,分塊矩陣T1中的a11,a21,a12,a22用于對圖像的放大和縮小等操作。T2中a13,a23用于圖像產(chǎn)生透視變換。T3中a31,a32表示圖像的平移,a33實現(xiàn)全比例變換。全比例變換可以實現(xiàn)圖像在二維空間的均勻放大或者縮小,不會發(fā)生形變。為實現(xiàn)圖像的平移,所以在二維線性變換的基礎上增加了一個維度,所以透視變換矩陣為3×3的矩陣。
根據(jù)上述規(guī)則,可以得到透視變換的表達式為
(5)
其中,以本文的銘牌圖像為例,將最小外接矩形的4個坐標點看作是發(fā)生透視變換的點,根據(jù)上述變換規(guī)則,校正效果如圖3(f)所示。
CTPN算法借鑒了Faster RCNN的anchor回歸機制,即用固定大小的滑動窗口實現(xiàn)對尺寸不相同目標的檢測[3],在本文中,設置了k個anchor。并且規(guī)定每個anchor的寬度為16像素,垂直高度的值在11像素到273像素范圍內(nèi)取10個值,依次除以0.7,所以anchor設置的數(shù)量為10個。RPN中的anchor回歸機制需要預測4個參數(shù),即 (X,Y,W,H), 其中,候選區(qū)域的中心點坐標用X和Y表示,H表示高度,W表示寬度。CTPN算法中W的取值為16像素,anchor的橫坐標為X,因此,采用CTPN算法預測文本區(qū)域時,只需要學習Y和H兩個參數(shù)。在銘牌圖像中,文字信息具有連續(xù)性的特點,使用BLSTM結(jié)構(gòu)可以學習到文本信息的序列特征,以減少信息的丟失。在卷積網(wǎng)絡中得到的特征圖序列用S表示,將特征序列輸入到BLSTM網(wǎng)絡中,分別用S與S’代表網(wǎng)絡的前向與后向隱含層,經(jīng)過計算后的特征序列用Q表示,直至在BLSTM網(wǎng)絡中將輸入序列全部處理完畢后更新輸出結(jié)果。CTPN算法結(jié)構(gòu)如圖4所示。
為更好地適應銘牌圖像中文本行的檢測,在傳統(tǒng)的CTPN算法基礎上,做出以下改進。
首先,改進CTPN算法中的特征提取網(wǎng)絡。文本能否被準確檢測到,會受到特征提取效果的干擾。相比于VGG16,ResNet50卷積神經(jīng)網(wǎng)絡的層數(shù)更深,該網(wǎng)絡為避免出現(xiàn)梯度消失問題,采用殘差跳躍連接的方式[12]。在ResNet50網(wǎng)絡中,采用一種不引入額外參數(shù)的恒等映射方法,這樣不會增加計算的復雜度。由16個殘差塊疊加組成ResNet50網(wǎng)絡,可以訓練更深層的網(wǎng)絡。殘差塊的結(jié)構(gòu)如圖5所示。文獻[12]中的實驗數(shù)據(jù)表明,網(wǎng)絡層數(shù)更深的ResNet50性能表現(xiàn)要優(yōu)于VGG16。將ResNet50作為CTPN模型中的特征網(wǎng)絡,提取圖像中字符特征。ResNet50的參數(shù)見表1。
表1 ResNet50網(wǎng)絡的參數(shù)
在圖5中,用k表示輸入,WL1和WL2分別表示網(wǎng)絡中第一層和第二層的權(quán)重,激活函數(shù)使用ReLU函數(shù)。殘差塊中第一次輸出用F(k)表示,即在第二次使用激活函數(shù)之前。在殘差塊中,最終的輸出結(jié)果為H(k),在進行二次激活之前加入k,即在一般的兩層網(wǎng)絡中加入shortcut連接。在沒有shortcut路徑的VGG16網(wǎng)絡中, H(k)=F(k) 是該網(wǎng)絡的學習目標。假設將k作為這兩層網(wǎng)絡的最優(yōu)輸出,對于VGG16網(wǎng)絡來說, H(k)=k是它的優(yōu)化目標。而對于ResNet50網(wǎng)絡來說,如果k為最優(yōu)值,只需學習F(k)=0, 方法就是在初始化每層網(wǎng)絡中的參數(shù)時偏向0,這樣相比于通過更新每層的參數(shù)學習H(k)=k要簡單,并且收斂速度快。所以,本文中用ResNet50作為特征提取網(wǎng)絡。
其次,對NMS算法進行改進。CTPN文本檢測算法中,在生成的多個文本候選框中選擇效果最好的保留下來,并且去掉多余的,是采用了非極大值抑制算法(non maximum suppression,NMS),如圖6所示。NMS算法原理是:檢測銘牌圖片中的文本行時,即使是同一個文本行,也可能會產(chǎn)生多個存在重疊情況的候選區(qū)域,而我們只需要保留效果最佳的。把生成的多個候選框存放在一個初始狀態(tài)為空的集合中,挑選出集合中得分最高的框,然后與集合中剩余的框計算IOU值,若比給定的IOU閾值大,則刪除該候選框[13]。重復迭代以上步驟,直到集合為空。CTPN算法中IOU值表示檢測結(jié)果X和真實值Y的相交區(qū)域與并集區(qū)域的比值,計算公式如下
(6)
識別文本候選框中的文字時,如果檢測區(qū)域過小會造成識別錯誤,傳統(tǒng)的NMS算法會將檢測框區(qū)域面積較大文字完整的檢測框,由于置信分數(shù)較低造成誤刪[10],如圖7左邊圖像中邊框①、③、⑤號文本框,就會由于置信分數(shù)低而被刪除。②、④、⑥號邊框置信分數(shù)高,但是會丟失邊界,即上下左右邊界處會有部分文本內(nèi)容的缺失。為避免將左圖中①、③、⑤號文本框誤刪的情況本文將檢測框面積與置信分數(shù)兩個指標進行綜合考慮,檢測框最后的得分由面積與置信分數(shù)的乘積決定,從而將完整的文本框保留,如圖7左邊圖像中所標注的數(shù)據(jù)信息,表達式為
score=score×area
(7)
一般的NMS算法中,會設定一個IOU閾值,在執(zhí)行代碼時,使用貪婪算法的思想,直接把大于IOU閾值的候選框刪除。由于文本區(qū)域的邊界難以確定,如果直接刪除可能會導致邊界丟失,在后續(xù)處理中造成識別錯誤。本文采用區(qū)域融合的方法,在對冗余的檢測框進行處理時,根據(jù)式(6)所示,先將檢測框集合中小于置信閾值的檢測框刪除,將大于IOU閾值的檢測框進行融合,即把滿足以上條件的檢測框進行合并,最大程度上保留具有完整文本信息的文本框。合并之后的結(jié)果如圖7右邊圖像中①、②、③號邊框所示,而在最終保留文本框的內(nèi)部區(qū)域的檢測框都有不同程度上的邊界缺失。
在進行銘牌字符識別時,由于銘牌圖像中字符種類不一,通常情況下是以單詞或者文本行的形式存在的,單個字符出現(xiàn)的情況較少。一般來說,對單個字符的識別比較容易,但是會涉及到字符分割。為了避免分割而導致誤差的情況, 本文采用卷積循環(huán)神經(jīng)網(wǎng)絡(convolutional recurrent network,CRNN),結(jié)合時序分類算法(connectionist temporal classification,CTC)搭建網(wǎng)絡來識別銘牌圖像中的不定長字符序列[7],CRNN將卷積網(wǎng)絡與循環(huán)網(wǎng)絡結(jié)合起來。CRNN算法結(jié)構(gòu)如圖8所示。
算法處理過程為:將檢測到的文本行實例圖像作為CRNN模塊的輸入,首先在卷積神經(jīng)網(wǎng)絡DenseNet[14]中,提取文字的特征信息,并輸出高維特征圖。然后把特征圖輸入循環(huán)神經(jīng)網(wǎng)絡,采用雙向長短期記憶網(wǎng)絡對特征序列進行編碼,利用上下文信息對文本行的字符序列進行處理會更加有效。最后采用CTC機制進行解碼,通過增加空白元素擴展了標簽字符集合。在識別算法中,循環(huán)神經(jīng)網(wǎng)絡的輸出應該和文本圖像中的位置一一對應,由于銘牌圖像中文本行字符數(shù)量、大小等各不相同,若采用手工方式來標記位置,不僅工作量大,而且不能保證輸出和字符對應。CTC機制解決了特征序列與文本的對齊問題,能夠識別銘牌圖像中的不定長文本。
本文設備銘牌圖像中基本信息的采集流程為:首先,使用手機、平板等設備采集圖像;其次,對銘牌圖像進行預處理,這是為了減少多種因素影響照片成像質(zhì)量,從而影響文本檢測結(jié)果的問題;然后,檢測與定位銘牌圖像中的文本行,并且截取出來;最后,對截取的圖像進行字符識別,并保存結(jié)果。根據(jù)前文中提出的AdvancedCTPN算法,銘牌圖像中字符的檢測與識別過程如下:
首先,將待檢測的銘牌圖像輸入模型中,進行預處理,目的是輸出規(guī)則的矩形銘牌圖像。
其次,將預處理后的圖片輸入ResNet50網(wǎng)絡,得到深層的特征圖,再輸入到雙向長短期記憶網(wǎng)絡中,提取序列特征,生成文本候選區(qū)域。
然后,根據(jù)文本候選框的得分,采用本文中改進的NMS算法過濾掉效果不夠理想的預測區(qū)域;將保留候選框的中心點擬合為直線,連接候選區(qū)域生成銘牌圖像中文本定位結(jié)果,并且將定位區(qū)域截取下來,輸入到文本識別模塊中。
最后,識別模塊的輸入為上一步驟中截取的文本行,根據(jù)CRNN算法規(guī)則對銘牌中的字符進行識別。圖9為銘牌圖像中文本行檢測與識別的過程。
本文提出的算法都是基于深度學習的,硬件的配置對實驗結(jié)果有一定影響,為保證實驗效果,本文在服務器中完成模型訓練以及測試。其中,處理器為Intel(R) Core(TM) i7-9750H CPU@2.60 GHz,顯卡為GeForce RTX 2080 Ti 10GiB。實驗環(huán)境Ubuntu 18.04,采用TensorFlow-gpu 1.15深度學習框架,編程語言為Python。
文本檢測的評價標準是由精確率(Precision,P)、召回率(Recall,R)和綜合評價指標(F-measure,F(xiàn)值)3個指標來確定的。計算方式如下
(8)
(9)
(10)
其中,TP表示正樣本預測正確的數(shù)量;FP表示將負樣本預測錯誤的數(shù)量;FN為正樣本預測為負樣本的數(shù)量。
本文中整個系統(tǒng)由檢測模塊和識別模塊兩部分組成,需要分別選取合適的數(shù)據(jù)集對兩個模塊進行訓練,數(shù)據(jù)集中樣本示例如圖10所示。由于在AdvanceCTPN模型中,使用了網(wǎng)絡層數(shù)較深的ResNet50,而且參數(shù)數(shù)量較多。使用遷移學習方法對AdvanceCTPN模型進行訓練,來提高訓練過程中的收斂速度以及泛化能力。使用在ImageNet數(shù)據(jù)集上預訓練的模型對網(wǎng)絡參數(shù)進行初始化,在ICDAR2003、2011、2013以及COCO-text公開數(shù)據(jù)集中挑選整合圖像,選擇與銘牌圖像具有相似文本分布特點的廣告牌圖像,用于提供更多的訓練樣本, 共選擇了3422張廣告牌圖片,數(shù)據(jù)集樣本如圖10(a)中所示。選取AdamOptimizer作為參數(shù)優(yōu)化器,初始學習率為0.001,Batchsize為16,總共迭代20 000次。迭代過程中,每2000次保存一次模型參數(shù),然后選擇效果最好的。在識別模塊中,用Synthetic Chinese String Dataset中文數(shù)據(jù)集進行訓練,輸入圖像的分辨率為32×280,包含漢字、數(shù)字、標點以及英文等多種類型的字符。Batchsize設置為32,訓練過程迭代20 000次。本實驗中共采集了724張銘牌圖像,為得到檢測結(jié)果,需將銘牌圖像中的文本區(qū)域標注出來,標注工具為LableImg。然后進行測試,驗證模型是否有效。銘牌數(shù)據(jù)集中圖片樣例如圖10(b)所示。
按照上述環(huán)境配置和設定的參數(shù),完成AdvancedCTPN模型的訓練,并在銘牌數(shù)據(jù)集中測試驗證,分析結(jié)果。本實驗的測試集由724張銘牌圖片組成,共計2941個文本行。
實驗一:在文本檢測模塊中,使用VGG16、ResNet50分別對銘牌圖像中的文本進行檢測,實驗結(jié)果見表2。分析表2中實驗結(jié)果,使用ResNet50網(wǎng)絡提取銘牌圖像中的特征,相比于VGG16網(wǎng)絡,文本行檢測的精確率P、召回率R以及F值均有提高,由此得出,ResNet50網(wǎng)絡在文本檢測時提取特征能力更強。
表2 不同特征網(wǎng)絡實驗結(jié)果對比
實驗二:對文本檢測算法中有無圖像校正模塊進行對比實驗,并且本實驗中卷積層網(wǎng)絡都使用ResNet50,實驗結(jié)果見表3。從結(jié)果可以看出,增加基于銘牌角點的校正網(wǎng)絡,可以將傾斜的圖像進行校正,而且很大程度上提升了檢測效果,驗證了設計校正模塊的有效性。
表3 有無校正網(wǎng)絡實驗結(jié)果對比
實驗三:使用目前先進的算法對銘牌圖像進行文本檢測,與本文提出的算法進行比較,從表4中結(jié)果得知,改進的檢測算法P值為95.8%,F(xiàn)值為93.9%,表現(xiàn)更優(yōu)。
表4 不同方法文本定位結(jié)果對比
實驗四:在銘牌字符識別中,用表5的3種模型對文本序列進行識別。實驗中,把準確率作為評價指標,實際上就是在銘牌數(shù)據(jù)集的2491個文本行中,完全識別正確的樣本所占的比例,如果出現(xiàn)單個或幾個字符錯檢、漏檢都視為識別錯誤。從實驗數(shù)據(jù)中得出本文的DenseNet+BLSTM+CTC算法識別準確率更高,我們可以根據(jù)識別結(jié)果對設備參數(shù)信息進行采集。改進的NMS算法一定程度上改善了由于邊界缺失而影響識別準確率的問題。從結(jié)果可以看出,識別算法中使用CTC機制比使用注意力機制的識別準確率要高,增加雙向長短期記憶網(wǎng)絡也能一定程度上提高識別準確率。
表5 3種算法的識別準確率
本文提出的AdvanceCTPN算法,在采集銘牌圖像中的參數(shù)信息時,為避免由于文本傾斜而影響文本檢測效果的問題,設計了基于銘牌角點的校正網(wǎng)絡。為能夠更加準確定位圖像中的字符序列,將網(wǎng)絡層數(shù)較深的ResNet50作為骨干網(wǎng)絡能夠得到更好的效果。為解決由于邊界丟失影響識別結(jié)果的問題,本文中提出了改進的NMS文本框去重算法。為了能在定位到文本行后直接進行字符識別,在優(yōu)化的CTPN檢測模型中增加DenseNet+BLSTM+CTC識別模型。在銘牌數(shù)據(jù)集中,AdvancedCTPN模型檢測精確率達到95.8%,F(xiàn)值為93.9%,識別準確率為92.6%,效果不錯。但是,銘牌圖片中存在文本行的分布比較密集的區(qū)域,在進行檢測時,相鄰的檢測框可能會重疊,從而影響識別效果。本文中采用的識別算法,當文本行中包含較多字符時,也會出現(xiàn)識別錯誤的情況,算法還需改進與優(yōu)化。