王 濤
(同濟(jì)大學(xué)浙江學(xué)院 電子與信息工程系,浙江 嘉興314000)
發(fā)票是企業(yè)經(jīng)營(yíng)或人們?nèi)粘OM(fèi)生活中不可或缺的一部分。面對(duì)日益增長(zhǎng)的發(fā)票管理需求,無(wú)論是紙質(zhì)發(fā)票還是電子發(fā)票,企業(yè)或個(gè)人都需要在發(fā)票信息的錄入、存儲(chǔ)及后續(xù)管理上花費(fèi)很多時(shí)間。因此,應(yīng)用現(xiàn)代技術(shù)對(duì)發(fā)票內(nèi)容信息進(jìn)行自動(dòng)掃描識(shí)別并提取成為財(cái)務(wù)會(huì)計(jì)、計(jì)算機(jī)和軟件應(yīng)用等多個(gè)領(lǐng)域共同希望解決的課題。何文琦[1]在分析了高校財(cái)務(wù)報(bào)銷難題后,提出了直接采用OCR 技術(shù)對(duì)票據(jù)圖片進(jìn)行識(shí)別,提取發(fā)票中的關(guān)鍵信息,減少網(wǎng)上報(bào)銷過(guò)程中的手工錄入環(huán)節(jié)。王林水[2]等提出了一個(gè)自動(dòng)票據(jù)識(shí)別系統(tǒng),采用圖像預(yù)處理技術(shù)將圖像進(jìn)行二值化,通過(guò)版面分析后進(jìn)行字符識(shí)別。王貴新[3]等人建立了利用隱態(tài)馬爾可夫模型(HMMs)的銀行票據(jù)識(shí)別系統(tǒng),系統(tǒng)首先通過(guò)光電掃描設(shè)備將用戶填寫的票據(jù)掃描成灰度圖像,然后去掉票據(jù)的底色,使之變?yōu)楹诎讏D像,對(duì)黑白圖像進(jìn)行去噪處理后,再進(jìn)行文字的分割。
縱觀上述文獻(xiàn),現(xiàn)有的研究都是將采集的發(fā)票圖像進(jìn)行二值化處理,忽略掉圖片本身的顏色信息,其次不區(qū)分二維碼、印章等圖片組成,直接采用版式分析的方法或者OCR 的方法對(duì)圖片中的文字進(jìn)行識(shí)別,這必然帶來(lái)識(shí)別準(zhǔn)確率的降低。而且上述方法都是對(duì)票面信息進(jìn)行提取,并不進(jìn)行驗(yàn)證,這導(dǎo)致存在最終結(jié)果上的差錯(cuò)率,在實(shí)際使用過(guò)程中還需要輔助人工驗(yàn)證。鑒于此,本文提出通過(guò)顏色分割方法對(duì)發(fā)票圖片進(jìn)行信息分層,得到二維碼、印章區(qū)域和文字區(qū)域,針對(duì)文字區(qū)域按照預(yù)設(shè)的格式進(jìn)行文字識(shí)別,獲得發(fā)票上所記載的發(fā)票代碼、發(fā)票號(hào)碼、開票日期、購(gòu)方稅號(hào)、銷方稅號(hào)、金額和稅額等信息;針對(duì)二維碼圖片進(jìn)行自動(dòng)掃描從互聯(lián)網(wǎng)服務(wù)器獲取發(fā)票代碼、發(fā)票號(hào)碼、開票日期、購(gòu)方稅號(hào)、銷方稅號(hào)、金額和稅額等信息。然后將兩部分信息進(jìn)行比對(duì)驗(yàn)證發(fā)票的真?zhèn)巍r?yàn)證為正確的發(fā)票分別將原始圖片和信息數(shù)據(jù)存入數(shù)據(jù)庫(kù),對(duì)用戶的發(fā)票憑證進(jìn)行統(tǒng)一的信息管理。驗(yàn)證為錯(cuò)誤的信息以二維碼獲取得信息為準(zhǔn)存入數(shù)據(jù)庫(kù),并在數(shù)據(jù)中進(jìn)行標(biāo)記以備后續(xù)查詢。
如圖1 所示,一張普通的增值稅發(fā)票由以下幾個(gè)部分組成:
(1)兩枚紅色的印章。一枚為稅務(wù)局印章,位于發(fā)票中間上方邊緣位置;一枚為銷售方公司發(fā)票專用印章,位于右下角邊緣位置。
(2)橙色的格線與預(yù)填字符。發(fā)票的主體結(jié)構(gòu)是橙色的表格,通過(guò)表格格線將各項(xiàng)信息齊整地包圍,同時(shí)又分隔成整齊且有規(guī)律的區(qū)塊,如購(gòu)買方、密碼區(qū)、銷售方等。此外,橙色預(yù)填字符提示每個(gè)區(qū)塊的內(nèi)容信息。
(3)黑色的填寫字符與二維碼。用戶填寫的黑色字符是每張發(fā)票的核心信息,也是發(fā)票識(shí)別方法的提取目標(biāo)信息。通過(guò)掃描左上角的二維碼可以得到該發(fā)票的發(fā)票代碼、發(fā)票號(hào)碼、合計(jì)金額、開票日期和發(fā)票驗(yàn)證碼。如需獲得更多的信息,仍然需要通過(guò)恰當(dāng)?shù)姆椒ㄌ崛『谏顚懽址?,包括?gòu)買方和銷售方的名稱、納稅人識(shí)別號(hào)、貨物或應(yīng)稅勞務(wù)、服務(wù)名稱、金額、稅額等。
圖1 增值稅發(fā)票樣例
理想的識(shí)別與自校正系統(tǒng)結(jié)構(gòu)如圖2 所示。
圖2 發(fā)票識(shí)別與自校正系統(tǒng)結(jié)構(gòu)
基于發(fā)票版面三種不同的色值,系統(tǒng)首先將一張版面規(guī)范的發(fā)票圖像進(jìn)行顏色分割,針對(duì)分割出的包含有意義信息的黑色字符層進(jìn)行版面分析,劃分出圖片區(qū)域和文本區(qū)域。對(duì)于文本區(qū)域采用OCR技術(shù)識(shí)別其中的字符和數(shù)字[4],經(jīng)過(guò)信息分類模塊的處理就可以獲取發(fā)票圖像中的發(fā)票代碼、發(fā)票號(hào)碼、開票日期、購(gòu)方稅號(hào)、銷方稅號(hào)、金額和稅額區(qū)域中的數(shù)據(jù)。對(duì)于圖片區(qū)域,利用二維碼掃描技術(shù)對(duì)分割出的二維碼區(qū)域進(jìn)行掃描識(shí)別,獲取發(fā)票的發(fā)票代碼、發(fā)票號(hào)碼、開票日期、購(gòu)方稅號(hào)、銷方稅號(hào)、金額和稅額等項(xiàng)目信息[5]。憑證管理模塊對(duì)識(shí)別和掃描出的相同域的數(shù)據(jù)進(jìn)行數(shù)據(jù)庫(kù)存儲(chǔ)和比對(duì)驗(yàn)證,并將發(fā)票圖片進(jìn)行永久性存儲(chǔ),提供圖形和程序接口供用戶查詢。
(1)顏色分割模塊
顏色分割模塊將從色彩維度對(duì)發(fā)票圖像進(jìn)行圖層分離[6]。根據(jù)發(fā)票的主要顏色,該模塊將一般增值稅發(fā)票圖像分成三層:紅色印章層、橙色表格層、黑色字符層。黑色字符圖層是由多個(gè)字符區(qū)域和二維碼區(qū)域構(gòu)成。
(2)版面分析模塊
常用的版面分析方法有基于連通域、 二分法、基于組合等方法?;谶B通域的版面分析是一種典型的自底向上的方法;二分法版面分析思路簡(jiǎn)捷、易于編程,但是對(duì)于復(fù)雜的版面分析不太適應(yīng)[7]。本文采用了傳統(tǒng)的基于連通域的分析方法對(duì)顏色分割以后的發(fā)票黑色字符圖層進(jìn)行劃分,得到不同的文字區(qū)域和圖片區(qū)域[8]。
(3)字符識(shí)別模塊
對(duì)文字區(qū)域進(jìn)行OCR 識(shí)別,通過(guò)文本增強(qiáng)、字符分割、字符細(xì)化和字符歸一化[9],識(shí)別出發(fā)票中的文本和數(shù)字信息。對(duì)于中英文字符的識(shí)別很多文獻(xiàn)都提出較好的方法并且也已經(jīng)有成熟的軟件產(chǎn)品和工具包可供使用[10]。
(4)二維碼掃描模塊
系統(tǒng)對(duì)分割出來(lái)的二維碼圖片區(qū)域調(diào)用標(biāo)準(zhǔn)的二維碼掃描程序接口,就可以從互聯(lián)網(wǎng)獲取發(fā)票的發(fā)票代碼、發(fā)票號(hào)碼、開票日期、購(gòu)方稅號(hào)、銷方稅號(hào)、金額和稅額項(xiàng)目信息,并將其存入到數(shù)據(jù)庫(kù)中與文字識(shí)別的結(jié)果進(jìn)行比對(duì)驗(yàn)證。
(5)信息項(xiàng)分類模塊
信息項(xiàng)分類模塊是指在字符識(shí)別以后對(duì)所得到的文字信息進(jìn)行按項(xiàng)目分類,分別歸入所屬的信息域中。一般發(fā)票都包含了發(fā)票代碼、發(fā)票號(hào)碼、開票日期、購(gòu)方稅號(hào)、銷方稅號(hào)、金額和稅額等關(guān)鍵項(xiàng),按照這些關(guān)鍵字把識(shí)別出來(lái)的文本信息進(jìn)行歸類形成信息項(xiàng)。同時(shí)對(duì)錯(cuò)誤字符進(jìn)行糾正最后存入數(shù)據(jù)庫(kù)。識(shí)別工具包并不能準(zhǔn)確識(shí)別所有的印刷字,而且加上版面噪音的干擾,實(shí)際識(shí)別后得到的信息域往往不完整。本文綜合利用動(dòng)態(tài)規(guī)劃字典匹配等技術(shù),利用規(guī)則數(shù)據(jù)庫(kù)中的信息結(jié)合識(shí)別后的結(jié)果最大程度使所需域中的信息完整[11]。
(6)憑證管理模塊
將從兩個(gè)模塊得到的票據(jù)信息項(xiàng)分別存入數(shù)據(jù)庫(kù)中,并進(jìn)行比對(duì)驗(yàn)證,對(duì)于有差異信息項(xiàng)的記錄進(jìn)行標(biāo)記。同時(shí),將發(fā)票原圖像進(jìn)行永久性存儲(chǔ),并將路徑保存在數(shù)據(jù)庫(kù)中。用戶可以通過(guò)該模塊查看識(shí)別出的發(fā)票信息和發(fā)票圖片,也可以通過(guò)程序接口調(diào)用獲取特定發(fā)票的處理結(jié)果。
顏色分割就是將圖片按顏色分割出只有該顏色或類似顏色的圖片[12]。
該發(fā)票識(shí)別系統(tǒng)采用的是以RGB 顏色空間為主、HSV 和HSL 為輔的分層策略。更具體地說(shuō),RGB可以將所有的顏色分成三個(gè)成分,任一顏色都可以根據(jù)這三個(gè)成分的值調(diào)配出來(lái),每個(gè)成分值為0~255,其中(0,0,0)為黑,(255,255,255)為白。HSV 和HSL是色調(diào)、飽和度和亮度的描述,對(duì)比度在識(shí)別圖像時(shí)可以發(fā)揮重要的作用。
系統(tǒng)通過(guò)OpenCV 計(jì)算機(jī)視覺(jué)庫(kù)進(jìn)行顏色分割[13],可以將OpenCV 提供的顏色空間轉(zhuǎn)換保存到變量中:
Flags=[i for i in dir(cv2) if i.startswith(‘COLOR_’)]
顏色空間轉(zhuǎn)換就是從一個(gè)通道到另一個(gè)通道,例 如:Flags [40] 的 值 為“COLOR_BGR2RGB”,其 中“COLOR_”后面的字符代表原始顏色空間,“2”后面的字符表示目標(biāo)顏色空間。其作用是從BGR 到RGB通道的交換。
通過(guò)matplotlib.pyplot 來(lái)查看圖像:
HSV 可以獲得顏色的分布,也可以在3D 中顯示出來(lái),還可以根據(jù)每個(gè)像素的組件將每個(gè)像素放置在對(duì)應(yīng)的位置,以及將對(duì)應(yīng)的顏色放置在對(duì)應(yīng)的位置上。
從圖3 可以看到發(fā)票圖片在該圖的顏色分布情況。不過(guò)由于圖片變量nemo 數(shù)據(jù)的一部分延伸到整個(gè)顏色空間,根據(jù)RGB 值的范圍在RGB 空間分割nemo 并不容易。
如果把HSV 代表的色調(diào)、飽和度的值表示到一個(gè)圓柱色空間,那么顏色可以建模為圍繞中心垂直軸旋轉(zhuǎn)的角度尺寸代表值 通 道[14]。第 三 個(gè) 軸“飽和度”定義色調(diào)的深淺,從垂直軸上的最不飽和到離中心最遠(yuǎn)的最飽和,如圖3 所示。系統(tǒng)通過(guò)cvt-Color 函數(shù)將圖像轉(zhuǎn)換到HSV 空間,此時(shí)發(fā)票橙色和黑色的飽和度和亮度值與其他顏色很不相同,但其大部分都處于色調(diào)軸上的小范圍內(nèi),是分段的關(guān)鍵點(diǎn)。當(dāng)獲得合適的顏色范圍,便可以使用這些值去判斷閾值。系統(tǒng)通過(guò)inRange()返回圖像范圍大小的二進(jìn)制掩碼,其中值1 表示范圍內(nèi)的值,0 表示范圍外的值。
mask=cv2.inRange(圖像,較低范圍,較高范圍)
最后,系統(tǒng)通過(guò)在原始圖像的頂部加上遮罩,即完成了某顏色圖層的初步分割:
如果此時(shí)分割邊界上仍有一些雜散像素,系統(tǒng)可以進(jìn)一步使用高斯模糊對(duì)這些像素進(jìn)行平滑去噪處理。
Blur=cv.GaussianBlur(result,(7,7),0)
基于顏色分割的發(fā)票各個(gè)圖層效果如圖4~圖7所示。
圖3 顏色分布結(jié)構(gòu)圖
圖4 原始發(fā)票圖像
由于字符識(shí)別程序自身存在差錯(cuò)率,因此對(duì)文本信息進(jìn)行字符識(shí)別往往得不到完整的文字信息。所以在得到發(fā)票信息項(xiàng)之前,需要對(duì)這些不能識(shí)別的字符進(jìn)行補(bǔ)充和完善。由于分類項(xiàng)目的名稱和含義是已知的,因此可以根據(jù)已知信息建立字典,將這些域內(nèi)的信息與規(guī)則數(shù)據(jù)庫(kù)中的信息進(jìn)行匹配,就可以將缺少的信息補(bǔ)充完整。
圖5 橙色表格圖層
圖6 黑色字符圖層
圖7 紅色印章圖層
在圖8 中信息項(xiàng)分類器的構(gòu)造規(guī)則主要基于以下幾點(diǎn):
(1)姓名、城市、省、州等都是某些固定的字符;
(2)用戶和賬號(hào)等信息一般切分為兩個(gè)區(qū)域;
(3)根據(jù)表達(dá)習(xí)慣,地址信息的書寫往往有固定的次序關(guān)系;
(4)信息項(xiàng)的名字往往位于行的開始位置。
根據(jù)如上四點(diǎn)建立信息項(xiàng)分類器,并利用信息項(xiàng)名字字典和值域規(guī)則對(duì)識(shí)別后的文本信息進(jìn)行分類,同時(shí),充分考慮文字長(zhǎng)度,與數(shù)據(jù)庫(kù)的信息進(jìn)行匹配后得到最為理想的分類結(jié)果。
構(gòu)造字符容錯(cuò)器是利用了信息項(xiàng)之間的固有關(guān)系,比如城市和省名的相互關(guān)聯(lián)、姓名自身字符的關(guān)聯(lián)關(guān)系等,同時(shí)識(shí)別出的單詞應(yīng)該有意義,否則可以利用拼寫檢查對(duì)其進(jìn)行糾正。規(guī)則數(shù)據(jù)庫(kù)中存有這些關(guān)聯(lián)關(guān)系,以及常用姓名表字典等信息。但是在進(jìn)行匹配糾正時(shí)需要注意對(duì)于不能唯一匹配的信息項(xiàng)需要綜合考慮各種信息來(lái)確定結(jié)果,經(jīng)過(guò)字符容錯(cuò)器糾正的信息需要被反饋給信息項(xiàng)分類器重復(fù)進(jìn)行分類、糾錯(cuò)、再分類的操作直到輸出結(jié)果不再變化為止。經(jīng)過(guò)這樣的錯(cuò)誤糾正和信息分類后得到的文字將以信息項(xiàng)和值域的形式交給其他模塊再進(jìn)行處理。
圖9、圖10 為該系統(tǒng)在移動(dòng)端的實(shí)現(xiàn)效果圖,通過(guò)移動(dòng)端手機(jī)掃描或者上傳發(fā)票圖片,系統(tǒng)在服務(wù)端自動(dòng)對(duì)發(fā)票圖像進(jìn)行識(shí)別和自校正,將正確的發(fā)票信息項(xiàng)存入到數(shù)據(jù)庫(kù)中并反饋給客戶端界面。
用戶通過(guò)該系統(tǒng)可以方便地管理自己的發(fā)票憑證,整個(gè)過(guò)程中不需要用戶輸入數(shù)據(jù)和編輯數(shù)據(jù),避免了因?yàn)樾畔⑤斎脲e(cuò)誤或者發(fā)票字符識(shí)別錯(cuò)誤導(dǎo)致的憑證信息錯(cuò)誤。
圖8 信息項(xiàng)分類模塊處理過(guò)程
圖9 發(fā)票圖片選擇界面
圖10 發(fā)票識(shí)別結(jié)果界面
系統(tǒng)設(shè)計(jì)了兩種方法:一種是采用傳統(tǒng)的發(fā)票識(shí)別,通過(guò)對(duì)掃描的發(fā)票圖像進(jìn)行圖像預(yù)處理、二值化后通過(guò)字符識(shí)別完成發(fā)票版面的數(shù)據(jù)信息的提取[15];第二種是按照本文的方法根據(jù)發(fā)票圖像的特點(diǎn),基于顏色分割技術(shù),提取發(fā)票圖像中有意義的區(qū)域,而忽略掉與發(fā)票信息項(xiàng)無(wú)關(guān)的區(qū)域。通過(guò)對(duì)50 張發(fā)票圖片進(jìn)行實(shí)驗(yàn)對(duì)比發(fā)現(xiàn),傳統(tǒng)方法可以正確識(shí)別其中的42 張,識(shí)別率為84%,而采用本文的方法可以正確識(shí)別其中的48 張,識(shí)別率為96%??梢钥闯霰疚牡姆椒ㄓ捎诖蟠鬁p少了發(fā)票圖片無(wú)關(guān)區(qū)域的干擾,從而在整體上提高了發(fā)票圖片的識(shí)別率。
隨著計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展,機(jī)器逐漸代替人類來(lái)做重復(fù)性工作。在費(fèi)用報(bào)銷業(yè)務(wù)過(guò)程中,對(duì)于個(gè)人和企業(yè)都需要花費(fèi)大量人力和精力來(lái)處理原始發(fā)票信息。發(fā)票的自動(dòng)識(shí)別系統(tǒng)脫離人工完成。本文根據(jù)發(fā)票圖像的特點(diǎn),提出了基于顏色分割技術(shù),提取發(fā)票圖像中有意義的區(qū)域,而忽略掉與發(fā)票信息項(xiàng)無(wú)關(guān)的區(qū)域,這大大減少了干擾區(qū)域,提高了發(fā)票識(shí)別的準(zhǔn)確率;同時(shí)將發(fā)票圖像中的二維碼區(qū)域分割出來(lái)進(jìn)行單獨(dú)識(shí)別,將兩部分識(shí)別出來(lái)的信息進(jìn)行比對(duì)驗(yàn)證,提高了發(fā)票信息項(xiàng)識(shí)別的準(zhǔn)確性和可靠性。對(duì)于企業(yè)來(lái)說(shuō),可以利用該系統(tǒng)完全取代發(fā)票信息采集的人力,不再需要人工驗(yàn)證,就可以利用這些數(shù)據(jù)進(jìn)行后續(xù)的信息處理。對(duì)于個(gè)人來(lái)說(shuō),在費(fèi)用報(bào)銷過(guò)程中,也可以方便地將發(fā)票憑證留存到信息系統(tǒng)中以便查詢和管理。
今后將進(jìn)一步地研究顏色分割技術(shù),因?yàn)檫@可以大大減少不必要干擾信息的存在。在本系統(tǒng),印章與字符信息分離的過(guò)程中,在字符信息的圖層中,還留有印章淡淡的痕跡,這意味著采用RGB 顏色通道的分割方法對(duì)邊緣線段部分并沒(méi)有很好地取舍,后續(xù)可考慮基于HSV 空間分割的方法來(lái)提高分割的準(zhǔn)確度。由于印章和部分文字會(huì)發(fā)生覆蓋,覆蓋掉的部分信息很難被準(zhǔn)確識(shí)別,后續(xù)需要研究去除印章的技術(shù),以及對(duì)缺失的信息進(jìn)行修補(bǔ)后再進(jìn)行識(shí)別的方法。