丘 浩,張 煒,林翔宇,蒙 亮,彭博雅
(1.廣西電網(wǎng)有限責(zé)任公司電力科學(xué)研究院,廣西 南寧 530023;2.廣西電網(wǎng)有限責(zé)任公司,廣西 南寧 530023)
電力作業(yè)中票證作業(yè)制度是保障危險性較大作業(yè)(如動火、動電、動土、進(jìn)入受限空間、高處作業(yè)及檢查維修作業(yè)等)安全性的基本制度。工作票的主要內(nèi)容是明確工作職責(zé)、評估危險作業(yè)時可能發(fā)生的問題以及應(yīng)采取的應(yīng)對措施[1-2]?;诠ぷ髌敝械淖鳂I(yè)信息,可以有效引導(dǎo)工作人員規(guī)避作業(yè)風(fēng)險。
為了便于傳輸與打印,電力工作票文件通常以PDF(portable document format)格式存儲,需要人為將其內(nèi)容錄入作業(yè)前風(fēng)險評估系統(tǒng)。由于工作票表格結(jié)構(gòu)復(fù)雜、內(nèi)容繁多,人工提取表格信息不僅耗費(fèi)時間,而且容易出錯。光學(xué)字符識(optical character recognition,OCR)技術(shù)是近年來得到快速發(fā)展的一種自動文本提取技術(shù)。1929年德國科學(xué)家Tausheck首次提出了OCR的概念[1]。1960年后得益于計算機(jī)技術(shù)的發(fā)展,OCR技術(shù)逐漸得以實現(xiàn)。近10年來,深度學(xué)習(xí)算法的發(fā)展成熟顯著地推動了OCR技術(shù)的普及應(yīng)用。1998年LeCun等人提出了LeNet卷積神經(jīng)網(wǎng)絡(luò)框架[3],并首次將深度學(xué)習(xí)算法用于識別手寫數(shù)字;為了提高卷積神經(jīng)網(wǎng)絡(luò)的特征提取能力,Alex于2012年提出了AlexNet深度卷積神經(jīng)網(wǎng)絡(luò)[4]。文獻(xiàn)[5]在AlexNet的基礎(chǔ)之上提出了VGGNet,增加網(wǎng)絡(luò)深度的同時使用了更多連續(xù)的小尺寸卷積核,可以減小模型的參數(shù)量、提高易用性;文獻(xiàn)[6]將字符識別看成序列識別問題,提出卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(convolutional recurrent neural network,CRNN),成為了當(dāng)下的主流OCR模型之一。OCR技術(shù)的識別準(zhǔn)確率能較好地滿足一般應(yīng)用,已在交通和貿(mào)易等領(lǐng)域得到廣泛應(yīng)用[7-8]。
與簡單的字符識別不同,實際業(yè)務(wù)文檔往往包含多個相對復(fù)雜的結(jié)構(gòu)性模塊,這些模塊之間具有相對獨(dú)立而又關(guān)聯(lián)的復(fù)雜關(guān)系,從具有復(fù)雜結(jié)構(gòu)的文檔中提取有效信息仍然是一項具有挑戰(zhàn)性的工作。除識別文字外,準(zhǔn)確識別復(fù)雜表格結(jié)構(gòu)以及單元格信息之間的匹配關(guān)系是在實際業(yè)務(wù)文檔中應(yīng)用OCR技術(shù)的瓶頸。
文獻(xiàn)[9]提出了一種基于深度學(xué)習(xí)的表格結(jié)構(gòu)識別方案,該方案可處理結(jié)構(gòu)簡單的表格文件,但失敗案例也將隨結(jié)構(gòu)復(fù)雜度的提升而明顯增多;文獻(xiàn)[10]設(shè)計了一個票據(jù)字符識別平臺,對市場交易中常見票據(jù)的采取票據(jù)版面分析后,由基于YOLO-v3的目標(biāo)檢測算法提取定位票據(jù)中表格區(qū)域信息,再采取OCR引擎識別。該模型能泛化不同格式的票據(jù)圖像,但由于模型參數(shù)量龐大,需要有海量的訓(xùn)練數(shù)據(jù),對硬件性能的要求也較為苛刻。文獻(xiàn)[11]提出使用語義識別的方法進(jìn)行電力工作票的文字識別與語義分割,但OCR字符檢測效果受表格框線影響較大并會導(dǎo)致識別精度低下、影響語義識別的效果。以上方法均基于“深度學(xué)習(xí)+OCR”的方法實現(xiàn)表格分割,但普遍存在模型訓(xùn)練量大、工作票分割效果受OCR檢測準(zhǔn)確率影響較大等問題。
本文利用電力作業(yè)工作票的復(fù)雜結(jié)構(gòu)具有框線分割的特點(diǎn),提出一種電力作業(yè)工作票分割與作業(yè)信息自動提取方法。該方法首先提取框線來分割單元格,然后使用OCR技術(shù)識別各單元格的工作票作業(yè)信息,最后基于正則匹配方法對識別結(jié)果進(jìn)行結(jié)構(gòu)化處理。與傳統(tǒng)方法相比,該方法不需要額外的模型訓(xùn)練,運(yùn)算量小,同時可有效避免表格框線對OCR檢測精度的影響,提高電力工作票的識別效率。
光學(xué)字符識別是模式識別領(lǐng)域的重要分支在圖像文檔的信息提取中有廣泛應(yīng)用。傳統(tǒng)OCR方法采取人工設(shè)計的特征,在復(fù)雜場景中表現(xiàn)出識別率低、泛化能力弱等缺點(diǎn)[12-13]。因此,對基于深度學(xué)習(xí)的OCR方法的研究成為主流。在基于深度學(xué)習(xí)框架的OCR技術(shù)中,人工神經(jīng)網(wǎng)絡(luò)主要用于提取字符特征以及根據(jù)特征進(jìn)行分類的功能。人工神經(jīng)網(wǎng)絡(luò)的加入省去了人工設(shè)計特征和訓(xùn)練分類器的步驟,極大地簡化了人工設(shè)計的過程。
在CRNN應(yīng)用于字符識別技術(shù)之前,文字識別過程分為單字切割和分類任務(wù)兩步。識別過程高度依賴于字符切分結(jié)果,誤切分對識別準(zhǔn)確率有突出影響?;贑RNN的字符識別模型將文字識別轉(zhuǎn)化為序列學(xué)習(xí)問題,不再需要字符切割環(huán)節(jié),在圖像的序列識別上具有良好的表現(xiàn)。CRNN由卷積層、循環(huán)層和轉(zhuǎn)錄層3個部分組成,其結(jié)構(gòu)如圖1所示。
圖1 CRNN結(jié)構(gòu)Figure 1 The network architecture of CRNN
CRNN從輸入圖像提取文字信息的流程可以分為兩部分:①特征序列提取,即在CRNN底部,由連續(xù)分布的多層卷積神經(jīng)網(wǎng)絡(luò)自動從輸入圖像中提取特征,得到特征圖,然后轉(zhuǎn)化成特征序列;②特征序列識別,即循環(huán)神經(jīng)網(wǎng)絡(luò)對特征序列中的每個特征向量進(jìn)行學(xué)習(xí)后輸出預(yù)測標(biāo)簽分布,由轉(zhuǎn)錄層從預(yù)測的標(biāo)簽分布中找到概率最高的標(biāo)簽序列,之后轉(zhuǎn)換成最終的識別結(jié)果。
CRNN的卷積層采用卷積計算層和最大池化層的組合。卷積計算層的核心是一個二維濾波器(卷積核)。卷積操作如圖2所示,卷積核中每個元素都代表一個權(quán)重值,通過滑動濾波的方式,將輸入圖像與卷積核中的對應(yīng)元素依次相乘并求和,進(jìn)而確定特征圖中的元素值[14]。
圖2 卷積操作Figure 2 Convolution operation
池化層分布在卷積計算層之間,常用的池化方式有平均池化和最大池化,平均池化選取區(qū)域均值作為該區(qū)域的值,而最大池化則選取區(qū)域最大值作為該區(qū)域的值。池化操作可以去除冗余信息,壓縮數(shù)據(jù)和參數(shù)的量,對鄰域內(nèi)特征進(jìn)行聚合[15]。
通過卷積與池化操作會將輸入圖像所包含的原始數(shù)據(jù)映射到特征空間,形成特征圖。從卷積層輸出的特征圖無法直接送入循環(huán)層進(jìn)行訓(xùn)練,需要轉(zhuǎn)化為特征序列。因此,在CRNN的結(jié)構(gòu)中加入了一個轉(zhuǎn)換層,在該層將特征圖中的某列像素順序連接就形成了一個特征向量,所有的特征向量就構(gòu)成一個序列。
區(qū)別于傳統(tǒng)的目標(biāo)檢測方法,字符識別的目標(biāo)通常是一個序列,將字符識別看成序列識別問題,需要引入循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network, RNN),RNN以序列數(shù)據(jù)為輸入,具有一定記憶能力,能夠存儲短時間內(nèi)輸入數(shù)據(jù)的信息,這是因為在RNN中,當(dāng)前時刻的輸出ht由當(dāng)前輸入xt和前一時刻輸出ht-1共同決定,即
ht=f(Uxt+Wht-1+b)
(1)
其中,U、W是權(quán)重系數(shù),b為偏差量,這些值都是通過訓(xùn)練得到的。
在傳統(tǒng)的RNN中,時間累積會最終導(dǎo)致梯度消失現(xiàn)象。為克服該問題,有學(xué)者提出了一種改進(jìn)后的RNN結(jié)構(gòu)—長短時記憶網(wǎng)絡(luò)(long short-term memory,LSTM)[16],LSTM單元引入門控機(jī)制,通過遺忘門、輸入門和輸出門來控制細(xì)胞狀態(tài),實現(xiàn)新信息的加入和無用信息的遺忘,其結(jié)構(gòu)如圖3所示,具體步驟如下。
圖3 LSTM單元結(jié)構(gòu)Figure 3 The structure of LSTM
1)由遺忘門決定細(xì)胞狀態(tài),需要遺忘上一個狀態(tài)ht-1的部分信息,其表達(dá)式為
ft=σ(Wf[ht-1,xt]+bf)
(2)
2)經(jīng)過輸入門決定細(xì)胞狀態(tài)添加哪些新的信息。輸入門的輸出可以表示為
it=σ(Wi[ht-1,xt]+bi)
(3)
(4)
(5)
4)由輸出門輸出更新后的狀態(tài)ot,并將其與處理后的細(xì)胞狀態(tài)相乘,獲得序列的識別結(jié)果ht。
ot=σ(Wo[ht-1,xt]+bo)
(6)
ht=tanhCt
(7)
在LSTM單元中,信息的傳遞是一個單向過程,因此,單個LSTM單元只能利用文字序列中某一個方向的信息。將一個LSTM向前另一個向后組合,形成一個雙向LSTM,就能同時利用上下文信息。當(dāng)LSTM輸出的序列分布輸入轉(zhuǎn)錄層后,通過去冗余操作,解碼即可輸出概率最大的文字識別結(jié)果。
本文設(shè)計的電力作業(yè)工作票分割與作業(yè)信息提取方法具體工作流程如圖4所示。該方法主要包括表格分割和作業(yè)信息提取與結(jié)構(gòu)化兩部分。工作票表格分割部分包括3個模塊:工作票二值化處理、表格框線檢測和單元格分割模塊。作業(yè)信息提取與結(jié)構(gòu)化部分包括:作業(yè)信息提取和信息結(jié)構(gòu)化處理模塊。
圖4 電力作業(yè)工作票分割與作業(yè)信息提取流程Figure 4 The workflow of proposed method
2.1.1 工作票二值化處理模塊
輸入的工作票文件為彩色圖像,為去除圖像中的冗余信息、提高工作效率,需要對輸入的工作票圖像進(jìn)行二值化處理,把大于某個臨界灰度值的像素灰度設(shè)為灰度極大值,把小于這個值的像素灰度設(shè)為灰度極小值,其公式如下:
(8)
式中g(shù)(x,y)為該點(diǎn)的灰度值,范圍為0~255;T為臨界灰度值(閾值),工作票文件存在的色系固定且有限,因此閾值T可設(shè)為固定值。
對工作票進(jìn)行二值化處理后的效果如圖5所示。二值化僅去除對文字識別無用的部分顏色信息,不會改變圖像中的作業(yè)信息與表格結(jié)構(gòu)信息。
圖5 工作票經(jīng)二值化處理后的效果Figure 5 Result of binarization of work ticket
2.1.2 表格框線提取模塊
表格框線提取實際上是將表格框線像素與非框線像素分離的過程,可以采取基于數(shù)學(xué)形態(tài)學(xué)的方法來實現(xiàn)。數(shù)學(xué)形態(tài)學(xué)中有2種最基本的運(yùn)算:腐蝕和膨脹[17]。數(shù)學(xué)形態(tài)學(xué)的運(yùn)算過程需要2個對象:一個是輸入圖像,記其代表的所有像素集合為A;另一個是結(jié)構(gòu)元素,記其代表的所有像素集合為B。腐蝕和膨脹運(yùn)算的過程如圖6所示。
圖6 數(shù)學(xué)形態(tài)學(xué)基本運(yùn)算Figure 6 Basic operations of mathematical morphology
腐蝕是一種消除邊界點(diǎn),使邊界向內(nèi)收縮的過程。膨脹是腐蝕的對偶運(yùn)算,是一種使邊界向外擴(kuò)展的過程。形態(tài)學(xué)運(yùn)算可以看成是在目標(biāo)圖像中檢測由結(jié)構(gòu)元素所描述的特征形狀的過程,這一特性可用來檢測圖像中的表格框線。采用形態(tài)學(xué)運(yùn)算的表格框線提取步驟如下:
1)使用大小為l1×1的水平結(jié)構(gòu)和1×l2的垂直結(jié)構(gòu)元素,對表格區(qū)域進(jìn)行水平和垂直方向的腐蝕,分別獲得水平和豎直框線;2)使用大小為l1×1的水平結(jié)構(gòu)和1×l2的垂直結(jié)構(gòu)元素,對腐蝕過的圖像進(jìn)行膨脹,更好地恢復(fù)水平和垂直表格框線;
3)將前兩步得到的框線在同一坐標(biāo)系下相加,即得到完整的表格區(qū)域以及單元格頂點(diǎn)位置信息。
表格框線提取效果主要取決于結(jié)構(gòu)元素的長度l1、l2。若l1、l2太長,在步驟1)中會腐蝕掉一些較短的表格框線,得到的表格結(jié)構(gòu)不完整;若l1、l2太短,則會保留一些不必要的文字線段,對之后的識別造成干擾。因此,結(jié)構(gòu)元素的長度應(yīng)滿足2個條件:小于最短表格線的長度和大于單個字符的尺寸。
使用本文提出的框線提取方法處理電力作業(yè)工作票的結(jié)果如圖7所示,可以看出,2種表格框線均被完整提取,而在水平表格框線圖中存在部分非框線像素,這些像素來自于工作票文檔中的文下劃線,由于這些下劃線不會與垂直表格框線相交,因此不會影響對表格結(jié)構(gòu)的判斷。
圖7 表格框線提取Figure 7 Table frame lines extraction
2.1.3 單元格分割模塊
該模塊接收來自表格框線檢測模塊輸出的表格框線和交點(diǎn)位置,然后對工作票表格進(jìn)行單元格分割,其流程如圖8所示。具體步驟如下:
圖8 單元格分割流程Figure 8 Flow chart of cell segmentation
1)從圖片最上方開始,記錄下第1條水平表格框線上所有點(diǎn)的位置,從第1個點(diǎn)開始,以它為一個單元格的左上角頂點(diǎn),然后判斷該點(diǎn)下方是否存在構(gòu)成直線的連續(xù)像素;若存在,則該點(diǎn)為一個單元格的左上角頂點(diǎn);2)在同一水平位置上向右尋找該單元格的右上角頂點(diǎn),找到右上角頂點(diǎn)后,判斷該頂點(diǎn)下是否存在構(gòu)成直線的連續(xù)像素;3)在與左上角頂點(diǎn)同一垂直位置的直線上尋找該單元格的左下角頂點(diǎn),最后一個頂點(diǎn)可以根據(jù)已知的3個頂點(diǎn)位置推斷確定,只需驗證在對應(yīng)位置是否存在第4個頂點(diǎn)即可;4)通過4個頂點(diǎn)的位置信息,可確定對應(yīng)單元格所在區(qū)域;而后可將該單元格所在區(qū)域裁剪、保存并進(jìn)行編號,保留其所在的行信息與列信息;5)對處在同一水平位置的頂點(diǎn)重復(fù)步驟1)~4)中的操作,可分割出該行所有的單元格;6)跳轉(zhuǎn)到下一行重復(fù)上述所有操作,直至所有單元格分割完畢。
單元格分割結(jié)果如圖9所示。對單元格進(jìn)行編號時應(yīng)當(dāng)保留單元格在原表格中的行列信息,統(tǒng)一命名格式為“0i_0j_0k”,表示該單元格在工作票文件的第i頁,第j行,第k列。
圖9 單元格分割結(jié)果Figure 9 Result of cell segmentation
分割單元格可將復(fù)雜表格的識別任務(wù)分解為多個單元格圖像識別子任務(wù)。對所獲得的單元格圖像只需要通過CRNN模型就能準(zhǔn)確提取其中的作業(yè)信息。進(jìn)行本次電力作業(yè)風(fēng)險評估只需要全部作業(yè)信息中的部分關(guān)鍵信息(如工作任務(wù),工作地點(diǎn),單位和班組等)。為此,需要對文字識別結(jié)果進(jìn)行結(jié)構(gòu)化處理,通過正則表達(dá)式檢索和匹配符合所需模式(規(guī)則)的文本以提取所需信息。
為評估所提方法的性能,訓(xùn)練一個卷積循環(huán)神經(jīng)網(wǎng)絡(luò),并對100份實際的工作票文檔進(jìn)行信息自動提取。
基于MXNet深度學(xué)習(xí)框架搭建CRNN模型,具體結(jié)構(gòu)如表1所示。在特征提取階段共包含6層卷積計算,均采用3×3大小的卷積核,0~5層的卷積神經(jīng)網(wǎng)絡(luò)濾波器數(shù)量分別為64、128、256、512、512、512。循環(huán)層為2層各256個隱藏單元的雙向LSTM。轉(zhuǎn)錄層使用CTC(connectionist temporal classifier)作為損失函數(shù),對序列進(jìn)行解碼。表中k表示卷積核大小,s表示卷積核滑動時的步長,p表示可用于填充的零元素列數(shù)。
表1 CRNN網(wǎng)絡(luò)參數(shù)Table 1 Network parameters of CRNN
從中文語料庫抽取文字后,通過計算機(jī)合成文本圖像樣本作為數(shù)據(jù)集。該數(shù)據(jù)集共包括約200萬張圖片,涵蓋了漢字、英文、數(shù)字和標(biāo)點(diǎn)4大類共3 870個字符。按9∶1將數(shù)據(jù)集分成訓(xùn)練集和測試集。在搭載Intel Xeon Gold 6240 CPU(2.50 GHz)和NVIDIA GeForce GTX 1650 顯卡(4 G)的計算機(jī)上完成訓(xùn)練,訓(xùn)練準(zhǔn)確率如圖10所示。
圖10 識別準(zhǔn)確率Figure 10 Training accuracy
分別采用本文所提方法與市面常見的商業(yè)文字識別軟件對工作票文檔進(jìn)行信息提取,如圖11所示。
圖11 文字識別結(jié)果Figure 11 Results of character recognition
在圖11(b)中,當(dāng)商業(yè)軟件對標(biāo)題“計劃工作時間”及其對應(yīng)字段值“自2020年06月30日09時30分至2020年06月30日18時30分”進(jìn)行識別時,由于沒有正確處理表格結(jié)構(gòu)出現(xiàn)了識別錯誤,標(biāo)題與字段值無法保持正確的匹配關(guān)系,導(dǎo)致后續(xù)數(shù)據(jù)結(jié)構(gòu)化時提取“工作時間”項信息失敗。本文所提方法采用單元格分割算法將復(fù)雜表格文檔的文字識別拆分為多個單元格圖像的文字識別,識別結(jié)果正確保留了原表格中各個標(biāo)題及對應(yīng)字段值的邏輯關(guān)系。對該結(jié)果進(jìn)行結(jié)構(gòu)化處理得到的效果如圖12所示。
圖12 數(shù)據(jù)結(jié)構(gòu)化處理Figure 12 Data structure processing
對100份實際工作票文檔進(jìn)行信息提取的實驗統(tǒng)計結(jié)果表明,本文所提方法文字識別準(zhǔn)確率達(dá)95.18%,略低于文字識別模型在測試集上的識別準(zhǔn)確率。單次信息提取過程平均耗時為22.41 s。
本文著眼于實際應(yīng)用場景,提出了一種電力作業(yè)工作票分割與作業(yè)信息提取方法,能夠從工作票文檔復(fù)雜的表格結(jié)構(gòu)中快速且準(zhǔn)確的提取電力作業(yè)的關(guān)鍵信息,提升了電力作業(yè)風(fēng)險評估效率。在框線提取過程中,由于有少量下劃線像素保留,可能會造成文字識別錯誤,因此,本文的研究工作還可以進(jìn)一步完善。之后的研究也將關(guān)注自然語言處理領(lǐng)域[18],對識別結(jié)果進(jìn)行查錯和糾錯,以進(jìn)一步提升輸出的工作票信息的正確程度。