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