徐宏強,徐望明,3,王 望,伍世虔
(1.武漢科技大學信息科學與工程學院,湖北 武漢,430081;2.武漢科技大學機器人與智能系統(tǒng)研究院,湖北 武漢,430081;3.武漢科技大學冶金自動化與檢測技術教育部工程研究中心,湖北 武漢,430081)
七段碼式液晶顯示(liquid crystal display,LCD)數(shù)字儀表被廣泛應用于日常生活和工業(yè)生產(chǎn)中,如電表、水表、氣表、溫度表、壓力表等,為了能及時記錄能耗情況及其他監(jiān)測量,遠程自動抄表技術應運而生,其中常用的方式是采集儀表圖像并運用圖像處理技術對表盤上顯示的讀數(shù)進行識別[1]。然而,為節(jié)約運營成本,采集儀表圖像時一般通過廉價的普通攝像頭,其圖像分辨率不高,還容易受到拍攝視角、光照條件以及灰塵、油污和劃痕等多種因素的影響,出現(xiàn)讀數(shù)字符傾斜、模糊、部分缺失等現(xiàn)象,再加上不同類型LCD儀表的表盤樣式、字體顯示風格和背景復雜多樣,這些都對儀表讀數(shù)的準確檢測和識別帶來了挑戰(zhàn)[2]。
對于段碼液晶數(shù)字儀表讀數(shù)識別問題的研究成果有不少。陳剛等[3]將表盤圖像進行預處理后,先定位數(shù)顯屏,再通過列切法分割出單個數(shù)碼字符,最后結合七段特征檢測法和五線相交檢測法實現(xiàn)對正體和斜體數(shù)碼的快速識別。鄧清男等[4]建立了七段碼數(shù)字0~9的標準模板庫,采用最大類間方差法(OTSU)分割出目標數(shù)字區(qū)域并使用模板匹配法完成數(shù)顯儀表讀數(shù)識別。Kanagarathinam等[5]使用MSER算法檢測出LCD儀表圖像的七段碼字符區(qū)域,通過圖像預處理、二值化等操作將字符進行分割,最后使用訓練好的OCR(optical character recognition)模型對單個七段碼字符進行識別。上述傳統(tǒng)字符識別方法簡單易實現(xiàn),但通常依賴于前期圖像預處理效果,還依賴于模板文件或手工設計的圖像特征,且參數(shù)難以調(diào)整,因而算法的魯棒性較差。朱立倩[6]針對傳統(tǒng)方法適應性差、準確度低的不足,提出一種基于深度學習的數(shù)顯儀表字符自動識別方法,其由基于改進Faster R-CNN的字符區(qū)域定位網(wǎng)絡和嵌入了注意力機制的字符識別網(wǎng)絡構成,在一定程度上提高了識別準確率,但圖像模糊以及反光造成的字符漏檢和定位不準現(xiàn)象仍然無法避免。
深度學習一般依賴于訓練樣本的多樣性,實際應用中往往存在樣本不足的情況,這時單一的深度學習方法就難以應對多種環(huán)境因素對字符識別造成的干擾。為此,本文將深度學習和傳統(tǒng)方法相結合,提出一種針對多干擾環(huán)境下段碼LCD儀表讀數(shù)的自動識別方法,并通過構建包含視角傾斜、光照不均、碼字尺度變化、表盤外觀變化、讀數(shù)區(qū)數(shù)量變化等多種情況的儀表圖像數(shù)據(jù)集進行實驗研究,以驗證該方法的有效性。
儀表讀數(shù)識別一般按照“先檢測、后識別”的兩步式流程進行,考慮到多干擾環(huán)境下圖像質(zhì)量不佳,且實際應用中多樣性的訓練樣本通常難以獲得,即便采用深度學習方法,直接將讀數(shù)區(qū)域檢測結果輸入識別模型也并不總能得到理想的效果,因此根據(jù)段碼LCD儀表的特點,本文有針對性地增加了讀數(shù)區(qū)域的后處理環(huán)節(jié),作為基于深度學習的讀數(shù)檢測模型和識別模型之間的橋梁,以改善識別效果。
如圖1所示,本文提出的段碼LCD儀表讀數(shù)識別方法的工作流程分為3個階段,即讀數(shù)檢測階段、讀數(shù)區(qū)域后處理階段和讀數(shù)識別階段。
圖1 本文提出的段碼LCD儀表讀數(shù)識別方法流程
(1)讀數(shù)檢測階段:自動檢測所輸入儀表圖像上七段碼讀數(shù)字符的位置信息,包括單個數(shù)字的字符位置和整體讀數(shù)中相鄰字符的連接關系,這可用于確定數(shù)字字符和讀數(shù)區(qū)域邊界位置。本文借鑒經(jīng)典CRAFT模型[7]的設計思想,改進了其主干網(wǎng)絡和字符連接關系,新模型用M-CRAFT(modified CRAFT)表示,其輸出是高斯熱力圖形式的可表征七段碼字符位置的數(shù)字中心概率圖以及連通域形式的可表征儀表讀數(shù)區(qū)域位置信息的字符連接關系圖。
(2)讀數(shù)區(qū)域后處理階段:考慮到前述各種成像條件和干擾因素可能造成讀數(shù)識別困難,為確保讀數(shù)識別效果,有針對性地對檢測到的儀表讀數(shù)區(qū)域進行后處理操作,主要包括:將檢測階段與識別階段關聯(lián),利用透視變換對檢測到的讀數(shù)區(qū)域子圖和相應數(shù)字中心概率圖的方向和尺度進行同時校正;通過分析光照影響進行圖像對比度增強。
(3)讀數(shù)識別階段:無需字符分割,以序列識別方式直接整體識別儀表讀數(shù)[8]。但不同于直接將讀數(shù)區(qū)域子圖像送入CRNN模型[9]識別的方法,本文采用基于注意力機制引導的方式來改善CRNN識別效果,故稱之為AG-CRNN(attention guided CRNN)模型。具體做法是:將后處理得到的儀表讀數(shù)區(qū)域子圖像和對應數(shù)字中心概率圖進行通道融合后輸入專門訓練的AG-CRNN模型,得到讀數(shù)數(shù)字序列識別結果,同時針對不同儀表小數(shù)點顯示差異性較大的問題,再次基于傳統(tǒng)圖像處理方法識別出小數(shù)點,從而得到最終識別結果。
根據(jù)段碼LCD儀表圖像的特點,本文基于CRAFT模型進行改進,提出了M-CRAFT模型,如圖2所示。M-CRAFT以Resnet34[10]替換原VGG-16作為骨干網(wǎng)絡,以輕量級FPN[11]作為不同尺度特征的融合網(wǎng)絡,最終輸出尺寸為原圖一半的2通道特征圖,即數(shù)字中心概率圖和字符連接關系圖。Resnet34主干網(wǎng)絡中1/n(n=2,4,8,16,32)表示該層特征圖與原圖相比的尺寸縮放比例,輕量級FPN網(wǎng)絡中Dwise表示深度可分離卷積,up×n(n=2,4,8)表示特征圖上采樣倍數(shù)。由于M-CRAFT模型專門針對七段碼數(shù)字字符進行訓練,數(shù)字中心概率圖表示儀表圖像中每個像素位置為七段碼字符中心的概率,用于確定儀表讀數(shù)中每個七段碼字符的位置,而字符連接關系圖則表示同一讀數(shù)區(qū)域中七段碼字符的連接關系,用于確定讀數(shù)區(qū)域的邊界位置。
圖2 M-CARFT模型的網(wǎng)絡結構
在對儀表圖像進行標注時,M-CRAFT與CRAFT一樣使用高斯熱力圖的形式定義數(shù)字中心概率圖,不同之處在于前者改變了字符連接關系圖的定義方式。由于儀表同一讀數(shù)區(qū)域里的七段碼字符呈直線布局,M-CRAFT用同一讀數(shù)區(qū)域相鄰七段碼字符之間中心線附近的四邊形連接起來的二值圖作為字符連接關系圖。如圖3所示,包含兩個讀數(shù)區(qū)域的圖3(a)的數(shù)字中心概率標簽圖為圖3(b),字符連接關系標簽圖為圖3(d),它按圖3(c)所示的方法生成,先初始化一個和原圖同尺寸的全0值圖,然后對于任意兩個相鄰七段碼字符,在前一字符最小外接矩形框左側和后一字符最小外接矩形框右側的1/3和2/3高度處各取一個點連接成四邊形,并將四邊形以內(nèi)像素值置1即可。
M-CRAFT模型訓練采用的數(shù)字中心概率損失函數(shù)、字符連接關系損失函數(shù)及總損失函數(shù)分別為:
(1)
(2)
Ldet=Lcenter+Llink
(3)
(a)原圖 (b)數(shù)字中心概率標簽圖
對讀數(shù)字符檢測模型的輸出進行后處理,其目的是為了給儀表讀數(shù)識別模型提供更合適的輸入,提高數(shù)字識別準確率。由于成像視角的原因,非正對拍攝情況下儀表圖像中讀數(shù)區(qū)域可能是傾斜的,同一讀數(shù)區(qū)域中七段碼字符尺度也可能不一致,一般表現(xiàn)為向一邊逐漸變大或逐漸變小的趨勢。實際應用場景下這種干擾幾乎不可避免,如果直接裁剪這樣的讀數(shù)區(qū)域子圖進行識別則效果較差,因此本文根據(jù)前述讀數(shù)字符檢測網(wǎng)絡得到的結果,采用傳統(tǒng)圖像處理方法,一方面進行讀數(shù)區(qū)域的邊界擬合并求解透視變換矩陣,來實現(xiàn)讀數(shù)區(qū)域的方向和尺度校正,另一方面針對特殊情況下的小尺度數(shù)字字符進行判定和拉伸,同時針對光照不均造成的圖像質(zhì)量問題進行對比度增強。
對二維平面圖像的透視變換一般可表示為:
(4)
令a33=1,可將式(4)展開得:
(5)
由上式可見,根據(jù)8個方程便可求解透視變換矩陣中的8個未知數(shù),因此在變換前、后的圖像中找出4組對應像素點坐標即可。在本文方法中,將包含讀數(shù)區(qū)域邊界的緊湊四邊形4個頂點與后續(xù)數(shù)字字符序列識別模型需要輸入的矩形子圖像的4個頂點建立對應關系求解透視變換矩陣,可一步實現(xiàn)讀數(shù)區(qū)域子圖像及其對應的數(shù)字中心概率圖的方向和尺度的校正。
因LCD儀表讀數(shù)區(qū)域不存在彎曲現(xiàn)象,可使用分水嶺算法對數(shù)字中心概率圖二值化,再使用最小二乘法分別對讀數(shù)區(qū)域數(shù)字字符的上、下邊界點進行直線擬合,并結合字符連接關系圖確定的讀數(shù)區(qū)域起止位置信息,即可確定包含讀數(shù)數(shù)字字符的緊湊四邊形。
設識別模型輸入圖像尺寸為W×H,坐標(0,0)、(W-1,0)、(0,H-1)和(W-1,H-1)分別與上述緊湊四邊形4個頂點坐標(xi,yi) (i=1,2,3,4)對應。代入式(5),得:
(6)
解式(6)即得透視變換矩陣,將其應用于緊湊四邊形包圍的讀數(shù)區(qū)域和對應的數(shù)字中心概率圖即可實現(xiàn)方向和尺度的同時校正。
另外,借助傳統(tǒng)圖像處理方法的優(yōu)勢,針對某些LCD儀表讀數(shù)可能存在小數(shù)最后一位高度明顯偏小的情況進行特殊處理,先通過連通域分析判斷最后一位是否為小尺度數(shù)字,若是則按歸一化高度與自身高度的比值進行擴展。
同時,為減少光照不均的影響,按下式進一步計算校正后讀數(shù)區(qū)域灰度圖像的平均梯度:
(7)
式中:(i,j)為像素點坐標;Gx為水平方向梯度;Gy為垂直方向梯度。對于G低于指定閾值的圖像,使用CLAHE算法[12]進行對比度增強。
對圖1中輸入圖像進行后處理的結果如圖4所示,后處理得到的灰度化讀數(shù)區(qū)域子圖(圖4(f))和相應的數(shù)字中心概率子圖(圖4(e))將參與后續(xù)讀數(shù)識別過程。
圖4 輸入圖像的后處理結果
傳統(tǒng)讀數(shù)識別方法和一些基于CNN的讀數(shù)識別方法需要將讀數(shù)區(qū)域子圖分割成單個數(shù)字字符進行識別[13],其效果易受成像干擾因素和分割算法性能的影響。本文方法在讀數(shù)識別階段將讀數(shù)區(qū)域子圖作為整體進行序列識別。一般來說,直接輸入讀數(shù)區(qū)域子圖到CRNN模型即可,但為了有效利用數(shù)字中心概率圖,這里將其視為注意力引導圖用于輔助訓練CRNN,即AG-CRNN模型。在數(shù)字中心概率圖中,數(shù)字字符中心處的數(shù)值最大,遠離中心時數(shù)值逐漸減小。將數(shù)字中心概率圖與讀數(shù)區(qū)域子圖進行信息融合,使得模型在提取特征時更關注數(shù)字區(qū)域。具體實現(xiàn)時,本文將后處理階段最終得到的讀數(shù)區(qū)域子圖和數(shù)字中心概率子圖進行通道融合后輸入AG-CRNN模型。在結構設計上,AG-CRNN只需改變原CRNN的輸入通道數(shù),之后同樣使用“CNN+RNN+CTC”的網(wǎng)絡結構得到識別結果。
AG-CRNN模型訓練采用CTC損失函數(shù)[14]。由于識別模型訓練效果對檢測模型的最終結果影響較大,因此AG-CRNN模型采取先獨立訓練再協(xié)同訓練的方式進行。在獨立訓練階段,不依賴M-CRAFT模型的預測結果,直接根據(jù)訓練樣本真實標簽裁剪得到讀數(shù)區(qū)域子圖和對應數(shù)字中心概率子圖進行訓練,直到模型收斂;在協(xié)同訓練階段,采用已收斂的M-CRAFT模型預測的讀數(shù)區(qū)域來裁剪圖像,并過濾掉檢測誤差較大的樣本,繼續(xù)訓練得到最終的AG-CRNN模型。
需要說明的是,小數(shù)點是段碼液晶儀表讀數(shù)中的特殊字符,實際應用中不同儀表顯示的小數(shù)點差異較大,本文通過實驗發(fā)現(xiàn)使用CRNN模型識別小數(shù)點效果不佳,因此AG-CRNN模型只用于識別數(shù)字序列,小數(shù)點識別仍然采用傳統(tǒng)圖像處理方法。由數(shù)字中心概率圖可得單個字符的位置信息,若小數(shù)點存在,則其必定位于相鄰數(shù)字字符中左邊字符的右下方,且其灰度與字符筆劃灰度接近,因此通過對去噪并二值化后的讀數(shù)區(qū)域子圖進行連通域分析即可準確檢測小數(shù)點位置。將數(shù)字序列識別結果與小數(shù)點識別結果相結合就得到最終的儀表讀數(shù)結果。
本文采用文獻[5]中以及自主采集的共913幅不同類型段碼LCD儀表圖像組成數(shù)據(jù)集,包含了視角傾斜、光照不均、碼字尺度變化、表盤外觀變化、讀數(shù)區(qū)域數(shù)量變化等多種情況,其中730幅作為訓練集,183幅作為測試集。訓練M-CRAFT模型時,網(wǎng)絡輸入圖像像素縮放成320×320,訓練AG-CRNN模型時,網(wǎng)絡輸入圖像像素縮放為128×32。為提升模型魯棒性,采用隨機裁剪、隨機旋轉、對比度增強等操作進行數(shù)據(jù)增強。實驗采用Pytorch框架,NVIDIA Quadro GP100 GPU,CUDA版本11.1,cuDNN版本7.5,檢測網(wǎng)絡使用Adam梯度下降法,識別網(wǎng)絡采用Adadelta梯度下降法,初始學習率為0.01,動量為0.9,批大小為16,獨立訓練階段迭代150次,協(xié)同訓練階段迭代100次。
對于讀數(shù)檢測模型,使用精確率(Precision)、召回率(Recall)和F1值作為評價指標:
(8)
(9)
(10)
式中:TP為七段碼數(shù)字被正確檢測的數(shù)量;FP為儀表背景被錯誤預測為七段碼數(shù)字的數(shù)量;FN為七段碼數(shù)字被錯誤預測為儀表背景的數(shù)量。本文采用交并比(intersection-over-union,IoU)判斷是否檢測到七段碼數(shù)字,根據(jù)設置的IoU閾值(本文取0.5)計算Precision和Recall值。
對于讀數(shù)識別模型,采用讀數(shù)識別準確率作為評價指標,即正確識別樣本數(shù)與總樣本數(shù)之比。
為了檢驗本文的注意力引導策略和協(xié)同訓練策略對識別效果的影響,首先進行了消融實驗研究,結果如表1所示,可以看到,兩種策略對提高識別準確率均有明顯作用。
表1 識別模型的消融實驗結果
為了進一步驗證本文方法的綜合性能,將其與幾種典型的深度學習方法進行對比,實驗結果如表2所示。表2中,F(xiàn)OTS[15]是一種端到端的區(qū)域級文本檢測與識別方法,“DB+CRNN”是區(qū)域級字符檢測網(wǎng)絡DBNet[16]與CRNN相結合的識別方法,這兩種方法不能進行單字符定位,故其單數(shù)字字符檢測指標為空;“CRAFT+CRNN”是字符級檢測網(wǎng)絡CRAFT與CRNN相結合的識別方法,可進行單字符定位及讀數(shù)區(qū)域定位。
由表2可見:在單數(shù)字字符檢測方面,本文方法的Recall指標與CRAFT+CRNN方法接近,且Precision和F1指標較后者對應指標有所提升;在讀數(shù)區(qū)域檢測方面,本文方法除了Precision指標稍低于CRAFT+CRNN方法之外,Recall和F1指標在4個方法中都是最高的,表明本文方法截取的讀數(shù)區(qū)域子圖更有利于識別;本文方法對于CRAFT+CRNN方法的改進策略取得了較好的效果,顯著提升了最終的讀數(shù)識別準確率,達到98.9%,是對比方法中最高的。
表2 采用不同深度學習方法的實驗結果對比
圖5展示了部分典型測試圖像的讀數(shù)識別結果,由圖可見,本文方法能較好地處理成像時視角傾斜、光照不均、七段碼字符尺度變化、儀表表盤外觀變化以及存在多個讀數(shù)區(qū)域的情況。
圖5 典型測試圖像讀數(shù)識別結果展示
本文提出了一種針對多干擾環(huán)境下的七段碼式液晶顯示儀表讀數(shù)識別方法,其主要特點在于:①針對實際應用中段碼液晶儀表圖像的特點,將深度學習和傳統(tǒng)圖像處理方法相結合,設計了改進的儀表讀數(shù)檢測模型和讀數(shù)序列識別模型,并采用一系列儀表讀數(shù)區(qū)域后處理方法來克服多重干擾的影響,搭建了檢測模型和識別模型之間的橋梁,三階段無縫連接可極大提高儀表讀數(shù)的識別準確率;②針對段碼讀數(shù)字符檢測任務,采用Resnet34主干網(wǎng)絡和輕量級FPN模塊改進了CRAFT模型,從字符級和區(qū)域級兩個層面定位儀表讀數(shù)區(qū)域,定位精度更高,有利于后續(xù)讀數(shù)識別;③針對讀數(shù)識別任務,采用注意力引導策略改進CRNN序列識別模型,并采用先獨立訓練再協(xié)同訓練的方式有效提升識別模型的準確率。
在測試數(shù)據(jù)集上的實驗結果顯示本文方法的 魯棒性優(yōu)于對比方法,取得了高達98.9%的儀表讀數(shù)識別準確率。本文方法亦可推廣用于解決其他數(shù)顯儀表(如字輪式儀表)的讀數(shù)識別問題。后續(xù)研究可進一步優(yōu)化模型結構和性能,進行輕量化改造,以期將該方法部署到算能有限的移動式或嵌入式終端設備上運行。