陳妃奮 蘇 健 張紅梅 張向利
1(桂林電子科技大學信息與通信學院 廣西 桂林 541004)
2(廣西上善若水發展有限公司 廣西 南寧 530029)
近年來,由于智能水表取代傳統機械式水表仍然存在成本較高的問題,很多地區還是使用傳統的機械水表,而圖像識別為人工抄表提供了一個低成本的解決方案。然而,現有的方案在識別不同種類和不同拍攝角度的字輪式水表讀數時仍存在不足。文獻[1]使用霍夫直線檢測來對讀數區域進行檢測,采用模板匹配方法對單個字符進行識別,但對于不同的字輪式水表的讀數區域檢測能力較差,字符識別準確率較低。文獻[2]提出使用Canny邊緣檢測算法檢測出讀數區域,用卷積神經網絡來對字符數字進行識別。雖然卷積神經網絡相對于模板匹配具有更好的識別效果,但Canny邊緣檢測算法檢測出來的圖像中可能存在其他直線或噪點,容易導致最后結果出現誤檢。對于這個問題,文獻[3]采用Hough矩形邊緣檢測算法對水表讀數區域進行檢測,進一步提高了讀數區域檢測的準確性,但不同種類的字輪式水表讀數區域的邊緣特征差異較大,導致該方法的檢測能力仍然存在不足,泛化能力較差。
與邊緣檢測的方法相比,基于深度學習的水表讀數區域檢測與識別對不同的字輪式水表具有更好的泛化能力。不同種類和不同拍攝角度的字輪式水表的讀數區域存在不同的長寬比例,并且具有方向性。文獻[4]提出了一個新的連接主義文本建議網絡(Connectionist Text Proposal Network,CTPN),實現對文本區域的檢測,但CTPN網絡模型只能對水平方向的水表讀數區域進行檢測。為了實現對不同方向的文本檢測,文獻[5]利用一個完全卷積網絡模型對文本區域、字符及其關系進行預測,從而實現對不同方向的文本區域檢測。但該模型由多個階段組成,中間過程過于繁瑣導致檢測效率低。為了提高檢測效率,文獻[6]提出了一種快速高效的文本檢測算法模型(Efficient and Accurate Scene Text Detector,EAST),直接通過消除中間候選區域聚合和文本分割來實現對文本區域的預測,但該方法對長文本檢測存在一定的局限性。基于深度學習的分類模型,文獻[7]使用序列識別網絡來對水表讀數進行識別。該方法雖然不需要分割單個字符,但對于不同種類的水表讀數識別需要大量的數據集來對模型進行訓練,且模型對運行設備性能要求較高。
目前對字輪式水表讀數區域檢測與識別方法的研究雖然取得了一些成果,但一般都只是針對于某種類型的字輪式水表提出相應的讀數檢測與識別方法,缺乏普遍性,易受環境干擾,且識別模型對運行識別性能要求較高。此外,對于深度學習模型對運行設備性能的要求較高的問題,文獻[8]提出了一種高效率的卷積神經網絡架構,在保持精度的同時,降低了計算成本,但該模型依然較大。文獻[9]提出了一種輕量級的神經網絡模型,計算量比傳統的卷積神經網絡減少90%左右,識別精度較高,但該模型輸入張量較大,訓練和測試時間過長。
針對上述問題,本文提出一種針對不同種類和不同拍攝角度的字輪式水表檢測與識別方法。主要創新點如下。
(1) 在圖像預處理階段根據圖像均值變化來調節圖像的對比度和亮度,提高了水表圓盤檢測率,為后面的讀數區域旋轉矯正和分割提供條件。
(2) 改進文獻[6]中存在對多位數的讀數區域預測的局限性。本文采用讀數區域兩端的像素點預測出讀數區域的頂點坐標,提高了對不同類型水表的讀數區域的檢測能力。同時,提出一種圖像旋轉矯正算法,實現對任意旋轉角度下的讀數區域的矯正與分割。
(3) 對文獻[9]中的網絡模型進行降維,重新對中間層進行設計,減少中間層的計算量,采用最大池化來保留更多的字符特征,加速訓練過程的同時減小了模型大小,保持較高的識別精度。
本文提出的字輪式水表讀數檢測與識別方法具體過程如圖1所示,包括水表圖像預處理、讀數區域檢測與矯正、讀數識別三個部分。

圖1 水表讀數檢測與識別流程
本文采用加權平均值法對水表原圖像進行灰度化處理,使用雙邊濾波算法[10]消除干擾噪聲,在文獻[11]方法的基礎上,根據水表圖像的均值,加入了亮度與對比度調節算法,提高對不同環境下的水表圓盤的檢測率,有利于后面水表讀數區域的矯正與分割,如式(1)所示。
O=I·α+B·β+γ
(1)
式中:I表示原圖像數據矩陣;B表示與I同維度的零矩陣;權重α(α=k/m)調節圖像對比度,m表示圖像均值,k表示調節系數;權重γ調節圖像亮度;α權重和β關系為β=1-α;O表示調節后的圖像數據。
對調節后的圖像O采用Sobel算子進行邊緣檢測,通過連通性分析將圓盤邊緣曲線間隙不超過1個像素點的曲線進行合并。使用文獻[11]中曲率輔助霍夫變換的方法對水表圓盤進行檢測,根據檢測得到的圓盤中心坐標以及半徑,分割出圓盤區域的內切圓正方形,分別用H和W表示正方形的長和寬。
不同的水表圖像可能存在不同的尺寸大小,為了提高檢測模型對讀數區域的檢測能力,使用三次曲線插值法將分割出來的圓盤圖像縮放為2r×2r,r表示圓盤的半徑,并采用自適應直方圖均衡化方法[12]來增強圖像的清晰度。通過前面的圓盤檢測、分割以及縮放處理之后,減小了水表圖像讀數區域的尺寸變化,有助于提高檢測模型的檢測精度。
1.2.1檢測模型
讀數區域檢測模型采用文獻[6]的方法對讀數區域的特征進行提取,同時對不同層的特征信息進行融合,提高網絡模型對不同位數的水表讀數區域的檢測能力。文獻[6]使用每個文本區域的像素點對文本框進行預測,但是每個像素點都有感受野的限制,導致用一端的像素點去預測到另一端的邊距時,就會出現檢測不到的情況,使模型在長文本的檢測上存在一定的局限性。為了提高對更多位數的水表讀數區域的檢測能力,本文采用讀數區域兩端的像素點分別對讀數區域兩端的頂點坐標進行預測,從而計算出讀數區域的頂點坐標。即分別使用1×1的卷積核將合并輸出的特征通道映射為1個通道的像素分數圖的置信度Y和多個通道的讀數區域信息。由分數圖置信度Y篩選出屬于讀數區域的信息。輸出的讀數區域信息由兩個通道的邊界元素信息G和四個通道的頂點坐標偏移量D表示,如式(2)-式(3)所示。
G={S,F}
(2)
D={(dxi,dyi)|i∈1,2}
(3)
式中:S表示邊界元素的置信度;F表示讀數區域的首/尾部元素(F中0表示首部元素,1表示尾部元素);(dxi,dyi)表示首或尾部元素頂點坐標偏移量,預測的讀數區域矩形框四個頂點坐標計算如式(4)所示。
(4)
1.2.2損失函數
每個讀數區域損失包括分數圖損失和讀數區域信息損失,定義為:
(5)
式中:Ls表示分數圖損失函數;Lg表示讀數區域信息損失函數。分數圖損失主要采用文獻[13]中的類平衡交叉熵進行計算,定義為:
(6)

(7)
對于讀數區域信息的損失函數,包括頂點坐標偏移量損失和邊界元素信息損失,由文獻[14]提出的smoothed-L1損失來計算頂點坐標偏移量損失,該方法可以將L1范數和L2范數的優點相結合,使得損失對離群點具有更強的魯棒性。讀數區域信息的損失函數定義為:
(8)

(9)

(10)
水表圖像的讀數區域可能存在不同的旋轉角度,本文將其分為四個部分來分析,如圖2所示。

圖2 尺寸為2r×2r的水表圖像示意圖
每個部分的水表讀數區域可能存在多種情況。因此,本文提出了一種圖像旋轉矯正與分割算法,如算法1所示。計算出不同旋轉角度下的水表圖像需要矯正的角度值θ(負值表示順時針旋轉,正值表示逆時針旋轉)以及分割出讀數區域圖像A。
算法1計算矯正圖像的角度值θ和分割出讀數區域圖像A算法
輸入:{(xi,yi)|i∈1,2,3,4}。
輸出:θ,A。
1.初始化圓形圖像半徑r,計算出矩形讀數區域中心坐標(xc,yc)、水平夾角angle、長寬l和w,以及短邊的中心坐標值x12、x34、y14、y23。
2.由水平夾角angle判斷讀數區域框水平還是傾斜狀態。
3.若處于水平狀態,由讀數區域中心坐標計算出角度值θ。
如:function1(angle=0°或90°)
ifxc>rthenθ=90°
elseifxc elseifyc>rthenθ=180° elseifyc returnθ endfunction1 4.若處于傾斜狀態,由xc≤r和yc≤r,推斷出讀數區域框處于圖2中的①部分,計算出角度值θ。 如:function2(angle≠0°或90°) ifl elseifl elseifl>wandy14>y23thenθ=-angle elseifl>wandy14>y23thenθ=angle returnθ endfunction2 5.重復步驟4,修改相應的判斷條件,即可計算出讀數區域框在圖2中②、③、④情況下的角度值θ。 6.根據角度值θ及矯正前讀數區域中心坐標值(xc,yc),計算矯正后讀數區域中心坐標值(xnc,ync),分割出讀數區域圖像A。如: function3(θ,xc,yc) xnc=(yc-r)×sin(θ)+(xc-r)×cos(θ)+r ync=(yc-r)×cos(θ)-(xc-r)×sin(θ)+r wmax=max(l,w),lmin=min(l,w) A={(x,y)|x∈[xnc-wmax,xnc+wmax], y∈[ync-lmin,ync+wmin]} returnA endfunction3 不同的水表圖像在圖像預處理后得到相同的尺寸大小,使得讀數區域矩形框的長邊與讀數的位數成正比例關系。因此,為了更好地保留讀數區域中字符的特征信息,消除其他無用信息,提高讀數識別模型的準確度,本文將投影法和滑動窗口法相結合,實現對單個字符的分割,過程如算法2所示。 算法2字符分割算法 輸入:lmin,wmax,A。 輸出:字符集合C。 1.使用水平投影和垂直投影法去除尺寸為lmin×wmax的讀數區域圖像周圍的無關信息,得到尺寸為l*×w*的讀數區域圖像。 2.設y=bx,x為讀數個數,b(b>0)為比例系數,單個字符寬度為bx=w*/x。 3.使用滑動窗口的方法提取出單個字符。 如:function4(l*,bx,x) forj=0;j≤x;j++ do c=A[0:l*,bx×j:bx×(j+1)] C.append(c) returnC endfunction4 4.使用三次曲線插值法將字符集合C中的字符圖像縮放為28×28。 由于文獻[9]中的網絡模型輸入張量大,訓練及測試時間過長,因此設計一種輕量級的網絡模型用于水表讀數的識別,模型框架如圖3所示。 圖3 字符識別模型框架 根據分割出來的字符尺寸的特點,將網絡模型的輸入張量設計為(28,28,3)。先采用卷積核Conv(3×3)對輸入圖像的特征進行粗提取,s表示卷積步長。由于輸入層的特征維度較低,如果中間層直接對低緯度進行特征信息提取,可能無法獲得足夠多的特性信息。因此,中間層主要采用深度可分離卷積的方法,具體過程如圖4所示。 圖4 深度可分離卷積 使用Conv(1×1)的卷積核對輸入層輸出的特征信息進行維度擴展,I×t表示對輸入通道數I擴展t倍。然后用Conv(3×3)的卷積核分別對每一個通道提取特征信息,再采用半波整流器ReLU6來保留更多特征信息。最后用卷積核Conv(1×1)將高維特征信息轉為低維輸出。n表示中間層需要迭代的次數,本文中n取值范圍為1~7,即表示中間層的輸入到輸出循環7次。當n=1時,擴展倍數t=1;當2≤n≤7時,擴展倍數t=6。為了解決由高維轉低維導致字符特征信息保留不充分的問題,在輸出層中使用最大池化(Max-Pooling)來進行池化操作,保留更多的字符特征信息,提高網絡識別性能。最后使用softmax激活函數輸出模型的分類結果。softmax激活函數定義為: (11) 式中:i表示中的某個分類;zi表示該分類的值;N表示分類數。損失函數采用式(6)進行計算。 本文實驗環境的硬件環境為6核Intel(R) Core(TM)CPU@3.60 GHz處理器,16 GB內存;NVIDIA GeForce GTX 1 070的GPU,內存為8 GB;軟件環境為Windows 10操作系統,Anaconda 4.7.12,Python 3.6,CUDA 10.0。 為了驗證本文方法的有效性,本文收集了7 494幅水表原圖像,包括不同環境、不同旋轉角度、不同的尺寸大小的水表圖像。取γ=1,α取值與水表圓盤檢測率的關系如圖5所示,m為圖像均值。 圖5 水表圓盤檢測率 其中,α=1為文獻[11]的圓盤檢測率,其他為加入自動調節算法的圓盤檢測率。實驗結果表明,α=140/m時,水表圓盤檢測率從原來的93.97%提高到了96.38%。 本實驗設H=W=2r=512,如圖6所示。 圖6 圖像預處理 對原始的水表圖像進行預處理,并將水表圖像的讀數區域對應的標簽數據保存為txt文件。為了提高識別模型的泛化能力,除了水表原圖像數據集,本文還收集了6 000多個不同環境下的讀數區域數據集用于識別模型的訓練,對其進行單個字符分割處理,將每個字符進行分類以及標記上對應的標簽,數據集和分類標簽如表1所示。 表1 水表字符標簽數據集 本文使用ICDAR評估協議對水表讀數區域檢測模型算法進行評估,交并比(Intersection-over-Union,IoU)是指預測的讀數區域框與原先標記框的交疊率,即用交集和并集的比值來反映出預測的準確性。 (12) (13) (14) (15) 式中:T表示檢測水表圖像的總數。各模型算法的檢測效果如表2、表3所示。表2是對一種水表圖像進行檢測,表3是對多種水表圖像進行檢測。 表2 基于ICDAR評估協議的模型算法對比(單)(%) 表3 基于ICDAR評估協議的模型算法對比(多)(%) 本文方法對不同水表的讀數區域進行檢測的結果如圖7所示,可以看出對不同位數、不同旋轉角度的水表讀數區域都有很好的檢測效果。 圖7 不同水表讀數區域檢測結果 從表2、表3中的對比結果可以看出,文獻[3]的矩形邊緣檢測方法對一種水表圖像的讀數區域檢測效果較好,但對不同水表圖像的讀數區域檢測效果較差。這是因為不同水表具有不同的邊緣特征信息和背景環境,導致泛化能力較差。由于CTPN方法只能檢測水平方向的讀數區域,使得檢測效果一般。EAST方法的檢測效果較好,但缺乏對更多位數的檢測能力。本文方法具備對更多位數的檢測能力,因此優于其他方法。 根據讀數區域檢測結果,使用算法1對水表讀數區域圖像進行矯正和分割,如圖8所示。 圖8 水表讀數區域檢測、矯正以及分割 使用算法2對讀數區域圖像進行單個字符分割,并將單個字符圖像的尺寸縮放為28×28,如圖9所示。 圖9 單個字符分割及縮放 實驗中,將水表字符數據集按9∶1隨機劃分為訓練集和測試集,水表讀數識別模型的輸入張量為(28,28,3),經過對網絡模型的分析和測試,中間層n取值范圍為1~7,每一層的擴展倍數t與n的關系如下: (16) 本文識別模型與其他輕量級網絡模型對比如表4所示。可以看出本文識別模型大小小于其他模型,而且識別精度較高,訓練和測試時間短,進一步降低了對運行設備性能的要求。 表4 水表讀數識別模型方法的對比 對于現有的水表讀數檢測與識別方法不太適用于不同類型和不同拍攝角度下的水表讀數檢測與識別問題,本文提出一種水表讀數檢測與識別方法。采用一種改進的水表讀數區域檢測方法,提高對不同位數和不同旋轉方向的讀數區域的檢測能力。同時提出一種圖像旋轉矯正算法,實現對讀數區域的正確矯正與分割;設計一種輕量級的神經網絡讀數識別模型,降低對設備性能要求的同時,保持較高的識別精度。實驗結 果表明,本文方法對不同字輪式水表在不同的旋轉角度下都有較好的檢測和識別效果。下一步工作的重點,考慮在讀數區域出現嚴重受損的情況下進一步提高模型的檢測與識別能力,使該方法具有更強的泛化能力。1.4 水表讀數識別


2 實 驗
2.1 數據集預處理



2.2 檢測模型評價




2.3 旋轉矯正與分割


2.4 識別模型評價

3 結 語