孫瑞彬 錢夔 徐偉敏 路紅
1 南京工程學院 自動化學院,南京,211167 2 南京學府睿捷信息科技有限公司,南京,210009
隨著信息的快速發展,數字時代已然來臨.OCR (Optical Character Recognition) 技術即光學字符識別作為計算機視覺領域的一個重要分支,通過具有拍照功能的設備獲取文檔圖片,再利用諸多算法對文檔內容進行分析識別.發票識別作為OCR領域的重要研究方向,可有效解決票據信息人工錄入時效率低、準確率低的問題,提升企業的辦事效率.
票據類OCR技術的研究吸引了眾多學者,產生了許多研究成果,比如:王陽等[1]基于深度學習的OCR文字識別方法,解決了銀行業對于海量圖像處理效率低下的問題;郭劍雄等[2]的英文字符算法研究,有效解決了英文字符識別不準確的問題;劉淼等[3]對Android圖文同步識別系統的研究,改善了Tesseract-OCR引擎對模糊圖像識別效果不佳的問題.但現有的技術對復雜票據的版面分析并無較好的處理方法,對內容涵蓋多種字符的文檔圖像也做不到高效的精準識別[4].
本文基于Tesseract-OCR引擎給出了一套自適應識別方法.利用OpenCV函數庫對圖像進行濾波[5],閾值化處理得到二值圖像,然后進行開運算提取發票表格以改善票據版面復雜時難以識別的問題;結合表格交點坐標與自定義模板,完成表頭匹配后,再通過jTessBoxEditor有針對性地訓練字庫,優化圖文中涵蓋中英文、數字及各種符號的識別準確率.最終實現對該類含復雜版面、多語言文本的發票圖像感興趣區域的自適應識別.
復雜發票的OCR識別主要包括圖像預處理、表格提取、內容匹配、字符識別4個模塊,其識別架構如圖1所示.

圖1 OCR總體架構Fig.1 General architecture of OCR for invoice recognition
預處理即對發票原圖進行簡單的形態學操作.采用自適應閾值化得到二值圖像時,為了獲取最佳的二值圖像,要求出最佳閾值[6].假設兩個高斯分布[7]為
(1)
(2)
其中σ1,σ2和μ1,μ2分別是兩個高斯分布的平均值和方差,且假設μ1<μ2,最佳閾值x需滿足:
F1(x)=F2(x).
(3)
結合式(1)—(3),得到最佳閾值關于x的方程組:
ax2+bx+c=0,
(4)
其中a,b,c為常數.求解該二次方程,取決于μ1和μ2之間的解即圖像的最佳全局閾值T.由于程序開始閾值和高斯分布的參數均未知,所以運行過程中要給定一個初始閾值去估計高斯分布的參數,再利用高斯分布更新閾值,以此反復直到收斂便可求得全局最佳閾值T.
接下來,對二值圖像進行線段識別,以實現表格提取.表格由水平線和垂直線組成,因此需分別在兩個方向上對發票進行線段提取,提取線段的形態學操作就是通過自定義的結構元素,構造對指定形狀敏感的形態學運算,再通過膨脹和腐蝕操作處理敏感像素.以提取水平線為例:創建自定義內核形態為豎向矩形,此時的敏感對象是垂直線段,通過開運算腐蝕垂直方向像素,水平線即被保留.提取垂直線段時,只需把內核形態定義為橫向矩形.圖像所有線段均提取后,對輸出結果進行“與”操作以求得交點坐標,發票內容需通過坐標對進行匹配.再對提取出的水平線圖、垂直線圖做加法合并,即可得到完整的表格框線圖.
發票內容為多行多列文本,整體識別效果較差,因此對發票先分割再識別[8],把含有用信息的表格單獨切割,每個表格都是一張圖像,對于含多行文本的表格,通過算法對其進行再分割,使得到的每張圖像都只含一列文本.提取感興趣區域的公式如下:
r1=s1[y1:y2,x1:x2] ,
(5)
其中,r1是待識別區域,s1為目標圖像,x,y分別為圖像的橫縱坐標.在交點坐標已知的條件下,將內容與表頭進行匹配,再根據字符寬度進行修正,使文本內容與邊框分離.坐標x,y并非固定數值,而是相對位置[9].
圖2是兩行兩列的表格,已標明橫、縱坐標.其中(x1,y1)并非具體數值如(1,2)、(2,3),x1代表第1個橫坐標,x2代表第2個橫坐標,縱坐標也是同理.取得坐標后將其有序排列,無論圖像的位置或大小如何改變,(x1,y1)、(x2,y2)兩點代表的總是圖中左上角的表格,(x2,y2)、(x3,y3)代表的總是右下角的表格.由于絕對位置會隨圖像大小、位置改變而改變,因此本文采用相對位置,實現表頭與內容自適應匹配[10].

圖2 發票表格式樣Fig.2 Sample invoice form
發票文檔由中英文、數字和特殊符號共同組成,Tesseract-OCR引擎自帶的字庫識別準確率并不高,因此引入jTessBoxEditor來訓練專門針對發票識別的字庫[11].首先,通過jTessBoxEditor將所有要訓練的發票圖片合并成一個tif文件,命名為name.tif,文件名任意命名即可.系統路徑導入到該name.tif文件所在目錄后,訓練步驟如表1所示.

表1 訓練步驟
作為本文實驗對象的復雜發票含大小不一的表格110余項,部分表格內含多列文本,本方法將每一列信息都切割為一張圖像,因此有用信息共146項,發票原圖如圖3所示.識別前首先完成發票表格提取,提取出的表格圖像如圖4所示.

圖3 發票原圖Fig.3 Original invoice

圖4 表格提取圖Fig.4 Table extracted from invoice of Fig.3
其次進行內容匹配,通過修正坐標,將內容與表格邊框分隔開,使表頭與內容精準匹配.通過jTessBoxEditor軟件訓練字庫,對生成的100多張box文件逐一修改,其中背景模糊的數字圖像,box文件會出現無法檢測、識別錯誤的問題,如圖5a,使用原生的jTessBoxEditor軟件只出現了5個識別邊框,正確識別的數據僅2個;優化后,8個數據均被邊框檢測到且準確識別.圖5b展示了訓練漢字優化前后的對比效果[11].

圖5 字庫訓練對比效果Fig.5 Comparison of character training effect on number (a) and Chinese character (b) recognition
本方法與騰訊云OCR、百度云OCR以及原生的Tesseract-OCR引擎展開對比,對多張發票的實驗數據進行分析,將所得結果列于表2.

表2 實驗結果對比
分析表2可知,改進后的Tesseract-OCR引擎對該類復雜發票的識別性能已有了很大提升,具體表現在以下方面:
1)識別時間上,本方法識別一張1 020×770像素的發票圖像,用時約1 s,而百度云OCR用時2 s,騰訊云OCR用時4 s.
2)識別準確率方面:本方法對發票的關鍵信息即各類數字數據的識別準確率可達100%,其余兩款OCR引擎尚未做到;對于漢字和符號的識別準確率,由表2可看出,相比較原生的Tesseract-OCR引擎,經本方法優化后的準確率已有大幅提升,但由于可訓練的漢字對象較少,因此仍存在少量的識別錯誤.
3)自適應性方面,本方法對圖像采用先分割后識別,使表頭與內容自適應適配,從而實現任意區域下對特定表格進行內容提取,并高效精準識別.而百度云OCR與騰訊云OCR都是對發票做整體識別,并不具備自適應性.
因此,本方法能夠對發票的特定區域實現高效精準的自適應識別,具有良好的工程可用性.
本文以復雜發票為對象,針對其任意區域下的特定表格內容提取與實時識別問題,提出了一種基于Tesseract-OCR開源引擎的識別方法.利用Python的第三方庫OpenCV對發票原圖進行形態學處理以得到二值圖像.在此基礎上完成表格位置提取,并結合交點坐標與自定義模板完成了表頭與內容適配.再通過jTessBoxEditor對所有發票模板的表格內容進行字庫訓練,使識別更具針對性.實驗結果表明,本方法能夠對發票的感興趣區域實現精準高效的自適應識別.下一個研究方向為污跡發票實時識別,以期實現模糊不規則表格內容識別.