孫瑞彬 錢夔 徐偉敏 路紅
1 南京工程學(xué)院 自動化學(xué)院,南京,211167 2 南京學(xué)府睿捷信息科技有限公司,南京,210009
隨著信息的快速發(fā)展,數(shù)字時代已然來臨.OCR (Optical Character Recognition) 技術(shù)即光學(xué)字符識別作為計算機(jī)視覺領(lǐng)域的一個重要分支,通過具有拍照功能的設(shè)備獲取文檔圖片,再利用諸多算法對文檔內(nèi)容進(jìn)行分析識別.發(fā)票識別作為OCR領(lǐng)域的重要研究方向,可有效解決票據(jù)信息人工錄入時效率低、準(zhǔn)確率低的問題,提升企業(yè)的辦事效率.
票據(jù)類OCR技術(shù)的研究吸引了眾多學(xué)者,產(chǎn)生了許多研究成果,比如:王陽等[1]基于深度學(xué)習(xí)的OCR文字識別方法,解決了銀行業(yè)對于海量圖像處理效率低下的問題;郭劍雄等[2]的英文字符算法研究,有效解決了英文字符識別不準(zhǔn)確的問題;劉淼等[3]對Android圖文同步識別系統(tǒng)的研究,改善了Tesseract-OCR引擎對模糊圖像識別效果不佳的問題.但現(xiàn)有的技術(shù)對復(fù)雜票據(jù)的版面分析并無較好的處理方法,對內(nèi)容涵蓋多種字符的文檔圖像也做不到高效的精準(zhǔn)識別[4].
本文基于Tesseract-OCR引擎給出了一套自適應(yīng)識別方法.利用OpenCV函數(shù)庫對圖像進(jìn)行濾波[5],閾值化處理得到二值圖像,然后進(jìn)行開運算提取發(fā)票表格以改善票據(jù)版面復(fù)雜時難以識別的問題;結(jié)合表格交點坐標(biāo)與自定義模板,完成表頭匹配后,再通過jTessBoxEditor有針對性地訓(xùn)練字庫,優(yōu)化圖文中涵蓋中英文、數(shù)字及各種符號的識別準(zhǔn)確率.最終實現(xiàn)對該類含復(fù)雜版面、多語言文本的發(fā)票圖像感興趣區(qū)域的自適應(yīng)識別.
復(fù)雜發(fā)票的OCR識別主要包括圖像預(yù)處理、表格提取、內(nèi)容匹配、字符識別4個模塊,其識別架構(gòu)如圖1所示.
圖1 OCR總體架構(gòu)Fig.1 General architecture of OCR for invoice recognition
預(yù)處理即對發(fā)票原圖進(jìn)行簡單的形態(tài)學(xué)操作.采用自適應(yīng)閾值化得到二值圖像時,為了獲取最佳的二值圖像,要求出最佳閾值[6].假設(shè)兩個高斯分布[7]為
(1)
(2)
其中σ1,σ2和μ1,μ2分別是兩個高斯分布的平均值和方差,且假設(shè)μ1<μ2,最佳閾值x需滿足:
F1(x)=F2(x).
(3)
結(jié)合式(1)—(3),得到最佳閾值關(guān)于x的方程組:
ax2+bx+c=0,
(4)
其中a,b,c為常數(shù).求解該二次方程,取決于μ1和μ2之間的解即圖像的最佳全局閾值T.由于程序開始閾值和高斯分布的參數(shù)均未知,所以運行過程中要給定一個初始閾值去估計高斯分布的參數(shù),再利用高斯分布更新閾值,以此反復(fù)直到收斂便可求得全局最佳閾值T.
接下來,對二值圖像進(jìn)行線段識別,以實現(xiàn)表格提取.表格由水平線和垂直線組成,因此需分別在兩個方向上對發(fā)票進(jìn)行線段提取,提取線段的形態(tài)學(xué)操作就是通過自定義的結(jié)構(gòu)元素,構(gòu)造對指定形狀敏感的形態(tài)學(xué)運算,再通過膨脹和腐蝕操作處理敏感像素.以提取水平線為例:創(chuàng)建自定義內(nèi)核形態(tài)為豎向矩形,此時的敏感對象是垂直線段,通過開運算腐蝕垂直方向像素,水平線即被保留.提取垂直線段時,只需把內(nèi)核形態(tài)定義為橫向矩形.圖像所有線段均提取后,對輸出結(jié)果進(jìn)行“與”操作以求得交點坐標(biāo),發(fā)票內(nèi)容需通過坐標(biāo)對進(jìn)行匹配.再對提取出的水平線圖、垂直線圖做加法合并,即可得到完整的表格框線圖.
發(fā)票內(nèi)容為多行多列文本,整體識別效果較差,因此對發(fā)票先分割再識別[8],把含有用信息的表格單獨切割,每個表格都是一張圖像,對于含多行文本的表格,通過算法對其進(jìn)行再分割,使得到的每張圖像都只含一列文本.提取感興趣區(qū)域的公式如下:
r1=s1[y1:y2,x1:x2] ,
(5)
其中,r1是待識別區(qū)域,s1為目標(biāo)圖像,x,y分別為圖像的橫縱坐標(biāo).在交點坐標(biāo)已知的條件下,將內(nèi)容與表頭進(jìn)行匹配,再根據(jù)字符寬度進(jìn)行修正,使文本內(nèi)容與邊框分離.坐標(biāo)x,y并非固定數(shù)值,而是相對位置[9].
圖2是兩行兩列的表格,已標(biāo)明橫、縱坐標(biāo).其中(x1,y1)并非具體數(shù)值如(1,2)、(2,3),x1代表第1個橫坐標(biāo),x2代表第2個橫坐標(biāo),縱坐標(biāo)也是同理.取得坐標(biāo)后將其有序排列,無論圖像的位置或大小如何改變,(x1,y1)、(x2,y2)兩點代表的總是圖中左上角的表格,(x2,y2)、(x3,y3)代表的總是右下角的表格.由于絕對位置會隨圖像大小、位置改變而改變,因此本文采用相對位置,實現(xiàn)表頭與內(nèi)容自適應(yīng)匹配[10].
圖2 發(fā)票表格式樣Fig.2 Sample invoice form
發(fā)票文檔由中英文、數(shù)字和特殊符號共同組成,Tesseract-OCR引擎自帶的字庫識別準(zhǔn)確率并不高,因此引入jTessBoxEditor來訓(xùn)練專門針對發(fā)票識別的字庫[11].首先,通過jTessBoxEditor將所有要訓(xùn)練的發(fā)票圖片合并成一個tif文件,命名為name.tif,文件名任意命名即可.系統(tǒng)路徑導(dǎo)入到該name.tif文件所在目錄后,訓(xùn)練步驟如表1所示.
表1 訓(xùn)練步驟
作為本文實驗對象的復(fù)雜發(fā)票含大小不一的表格110余項,部分表格內(nèi)含多列文本,本方法將每一列信息都切割為一張圖像,因此有用信息共146項,發(fā)票原圖如圖3所示.識別前首先完成發(fā)票表格提取,提取出的表格圖像如圖4所示.
圖3 發(fā)票原圖Fig.3 Original invoice
圖4 表格提取圖Fig.4 Table extracted from invoice of Fig.3
其次進(jìn)行內(nèi)容匹配,通過修正坐標(biāo),將內(nèi)容與表格邊框分隔開,使表頭與內(nèi)容精準(zhǔn)匹配.通過jTessBoxEditor軟件訓(xùn)練字庫,對生成的100多張box文件逐一修改,其中背景模糊的數(shù)字圖像,box文件會出現(xiàn)無法檢測、識別錯誤的問題,如圖5a,使用原生的jTessBoxEditor軟件只出現(xiàn)了5個識別邊框,正確識別的數(shù)據(jù)僅2個;優(yōu)化后,8個數(shù)據(jù)均被邊框檢測到且準(zhǔn)確識別.圖5b展示了訓(xùn)練漢字優(yōu)化前后的對比效果[11].
圖5 字庫訓(xùn)練對比效果Fig.5 Comparison of character training effect on number (a) and Chinese character (b) recognition
本方法與騰訊云OCR、百度云OCR以及原生的Tesseract-OCR引擎展開對比,對多張發(fā)票的實驗數(shù)據(jù)進(jìn)行分析,將所得結(jié)果列于表2.
表2 實驗結(jié)果對比
分析表2可知,改進(jìn)后的Tesseract-OCR引擎對該類復(fù)雜發(fā)票的識別性能已有了很大提升,具體表現(xiàn)在以下方面:
1)識別時間上,本方法識別一張1 020×770像素的發(fā)票圖像,用時約1 s,而百度云OCR用時2 s,騰訊云OCR用時4 s.
2)識別準(zhǔn)確率方面:本方法對發(fā)票的關(guān)鍵信息即各類數(shù)字?jǐn)?shù)據(jù)的識別準(zhǔn)確率可達(dá)100%,其余兩款OCR引擎尚未做到;對于漢字和符號的識別準(zhǔn)確率,由表2可看出,相比較原生的Tesseract-OCR引擎,經(jīng)本方法優(yōu)化后的準(zhǔn)確率已有大幅提升,但由于可訓(xùn)練的漢字對象較少,因此仍存在少量的識別錯誤.
3)自適應(yīng)性方面,本方法對圖像采用先分割后識別,使表頭與內(nèi)容自適應(yīng)適配,從而實現(xiàn)任意區(qū)域下對特定表格進(jìn)行內(nèi)容提取,并高效精準(zhǔn)識別.而百度云OCR與騰訊云OCR都是對發(fā)票做整體識別,并不具備自適應(yīng)性.
因此,本方法能夠?qū)Πl(fā)票的特定區(qū)域?qū)崿F(xiàn)高效精準(zhǔn)的自適應(yīng)識別,具有良好的工程可用性.
本文以復(fù)雜發(fā)票為對象,針對其任意區(qū)域下的特定表格內(nèi)容提取與實時識別問題,提出了一種基于Tesseract-OCR開源引擎的識別方法.利用Python的第三方庫OpenCV對發(fā)票原圖進(jìn)行形態(tài)學(xué)處理以得到二值圖像.在此基礎(chǔ)上完成表格位置提取,并結(jié)合交點坐標(biāo)與自定義模板完成了表頭與內(nèi)容適配.再通過jTessBoxEditor對所有發(fā)票模板的表格內(nèi)容進(jìn)行字庫訓(xùn)練,使識別更具針對性.實驗結(jié)果表明,本方法能夠?qū)Πl(fā)票的感興趣區(qū)域?qū)崿F(xiàn)精準(zhǔn)高效的自適應(yīng)識別.下一個研究方向為污跡發(fā)票實時識別,以期實現(xiàn)模糊不規(guī)則表格內(nèi)容識別.