陳曉冰,彭浩滇,歐德煒
(中國移動汕頭分公司,汕頭 515000)
目前通信運營商的基站、機房等基礎設施還有很多使用機械式電表,每月需要花費大量人力抄寫電表行碼,效率低、容易出錯,本文提出了一種基于深度學習的電表行碼識別方法,抄表員只需對電表拍照,即可自動識別出電表行碼。
由于電表圖像是抄表員用手機拍電表上傳的,可能會存在照片模糊、光線太暗等情況,對識別有很大影響。本文通過采用SSD方法來對電表的行碼區域進行檢測定位,SSD方法是利用卷積神經網絡在特征圖上通過采用卷積核來預測一系列候選框的類別分數,以分數最高的類別作為輸出結果。
不同類型電表的行碼格式不一樣,且拍照的角度、光線明暗也不盡相同,增加了行碼識別的難度。本文通過對電表行碼進行特征處理,提取關鍵信息,主要步驟如下:
①灰度化:采用加權平均法對行碼區域進行灰度化處理,以減少運算量。對每個像素的R、G、B值分別增加加權系數,然后求和;②直方圖均衡:為減少電表圖像的光線明暗差異,通過直方圖均衡化,把原始圖像的灰度直方圖從比較集中的某個灰度區域變成了在全部灰度范圍內的均勻分布,進行圖像的非線性拉伸和重新分配,使一定灰度范圍內的像素數量大致相同;③去噪平滑:為提升圖像的質量,通過“中值濾波器”進行去噪平滑,該濾波器在圖像上采用一個奇數大小的滑動窗口,使用中間位置像素的灰度級(中位數)來替代窗口中心像素原來的灰度級;④自適應二值化:通過將圖像分成多個小塊區域,并計算相應的閾值,根據閾值將圖像轉化成只包含0、1兩個灰度值的黑白圖像,進行自適應二值化處理,實現圖像的分割;⑤腐蝕膨脹:通過腐蝕、膨脹操作,將電表行碼數字之間分開,將行碼數字內的線條連通起來,便于后續進行識別。處理后的效果如下圖:
對電表行碼標注數據進行維度轉換,用10位01向量表示一個行碼數字,例如3使用[0,0,0,1,0,0,0,0,0,0]表示。
由于電表行碼主要有5位、6位、7位三種情況,為了使模型結果更加準確,本文構建了三層卷積層的深度學習模型,按行碼位數分三個模型進行訓練。
模型訓練完成后,將電表照片輸入到模型,先進行電表行碼區域的定位,然后再進行特征處理,處理后分別經過三個模型進行推導,根據推導結果進行投票,取各個行碼中投票數量最高的作為結果,最后再進行結果糾正,主要有:

圖1 電表特征處理
①末位處理:由于不同類型的電表,最后一位有些代表1度,有些代表0.1度,其中代表0.1度的則用紅色底作為區分。因此,通過統計行碼區域的顏色,如果最后有出現紅色則表示0.1度,否則為1度;②行碼糾正:由于每個電表的行碼具有連續性,所以對于識別出來的行碼與近三個月的行碼進行比較,如果出現行碼比上個月少或突然出現暴增的情況,由于相鄰月份的高位數行碼變化不會太大,因此,將參考之前月份的高位數行碼進行糾正。
經糾正后,準確率可達93.6%。模型推導的流程見圖2:

圖2 電表行碼模型推導圖
本文通過構建深度學習模型,對電表行碼進行表盤區域定位和訓練行碼識別模型,能準確、高效地識別電表行碼,對運營商提升基站、機房的電費管理具有較強的實用價值。