摘" 要:增值稅發(fā)票是各類經(jīng)濟(jì)交易中最常用的支付憑證,財(cái)務(wù)報(bào)賬過程中人工處理發(fā)票效率低下?;诖?,文章設(shè)計(jì)并實(shí)現(xiàn)了增值稅發(fā)票解析和識別系統(tǒng)。該系統(tǒng)對不同類型的發(fā)票文檔進(jìn)行分類處理,文本類型的電子發(fā)票直接用XML文檔處理工具進(jìn)行解析,紙質(zhì)發(fā)票的掃描件使用PaddleOCR進(jìn)行識別。在識別紙質(zhì)發(fā)票掃描件之前先解析二維碼,得到二維碼的位置信息和文本內(nèi)容。基于位置信息對發(fā)票圖像進(jìn)行方向矯正,將矯正之后的圖像送入OCR識別模塊進(jìn)行文字識別,并通過二維碼解析得到的內(nèi)容對OCR識別結(jié)果進(jìn)行驗(yàn)證,從而提高識別結(jié)果的可靠性。
關(guān)鍵詞:增值稅發(fā)票;發(fā)票解析;發(fā)票識別
中圖分類號:TP311" " 文獻(xiàn)標(biāo)識碼:A" 文章編號:2096-4706(2024)10-0107-06
Research and Implementation of Value Added Tax Invoice Parsing and Recognition System
WANG Xiangjun, LIN Bingqing, CHEN Yuqiang, LIU Huifen
(College of Big Data and Internet, Shenzhen Technology University, Shenzhen" 518118, China)
Abstract: Value added tax invoices are the most commonly used payment vouchers in various economic transactions, and manual processing of invoices during financial reporting is inefficient. Based on this, the paper designs and implements a value added tax invoice parsing and recognition system. The system classifies different types of invoice documents. Electronic invoices in text type are directly parsed using XML document processing tools, while scanned copies of paper invoices are recognized using PaddleOCR. Before identifying scanned copies of paper invoices, first parse the QR code to obtain the location information and text content of the QR code. Based on location information, the invoice image is directional corrected, and the corrected image is sent to the OCR recognition module for text recognition. The content obtained through QR code parsing is used to verify the OCR recognition results, thereby improving the reliability of the recognition results.
Keywords: value added tax invoice; invoice parsing; invoice recognition
0" 引" 言
隨著新一代信息技術(shù)浪潮襲來,新興技術(shù)層出不窮,各項(xiàng)技術(shù)不斷創(chuàng)新,相繼融入經(jīng)濟(jì)社會發(fā)展的各個(gè)領(lǐng)域,展現(xiàn)出數(shù)字經(jīng)濟(jì)的蓬勃活力。增值稅發(fā)票(以下簡稱“發(fā)票”)是記錄商品交易行為的一種重要憑證,分為增值稅普通發(fā)票和專用發(fā)票,主要有紙質(zhì)和電子版兩種形態(tài)。電子增值稅發(fā)票因省卻了紙張成本以及便于傳遞,逐漸成為信息化支付和入庫的重要原始依據(jù)[1]。當(dāng)前的電子增值稅發(fā)票主要有.ofd和.pdf兩種格式,這兩種格式的電子發(fā)票都可以使用對應(yīng)的解析工具進(jìn)行信息提取。而紙質(zhì)發(fā)票則需要掃描成電子文檔后進(jìn)行識別,百度和騰訊等大型IT公司都有提供對應(yīng)的識別接口。由于發(fā)票信息的提取和識別直接關(guān)系到報(bào)賬業(yè)務(wù)的正確性,對信息準(zhǔn)確率的要求非常高。本系統(tǒng)會根據(jù)發(fā)票的不同而采用不同的處理方式,最大限度地提高準(zhǔn)確率。
1" 系統(tǒng)設(shè)計(jì)
1.1" 系統(tǒng)架構(gòu)設(shè)計(jì)
本系統(tǒng)采用的是B/S架構(gòu),前端部分通過HTML、CSS、JS等進(jìn)行頁面的開發(fā)和渲染,同時(shí)進(jìn)行請求和響應(yīng)。后端部分采用三層架構(gòu)模型,由表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層組成。當(dāng)表現(xiàn)層將客戶請求下放時(shí),業(yè)務(wù)邏輯層將調(diào)用業(yè)務(wù)邏輯進(jìn)行業(yè)務(wù)處理,再對數(shù)據(jù)訪問層發(fā)起對數(shù)據(jù)庫增刪改查的請求,系統(tǒng)最終將業(yè)務(wù)邏輯層與數(shù)據(jù)訪問層交互的結(jié)果返回到表現(xiàn)層進(jìn)行數(shù)據(jù)展示。系統(tǒng)架構(gòu)圖如圖1所示。
1.2" 數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫是應(yīng)用程序的關(guān)鍵要素之一,是系統(tǒng)設(shè)計(jì)的基石,好的數(shù)據(jù)庫設(shè)計(jì)應(yīng)當(dāng)做到為系統(tǒng)提供翔實(shí)細(xì)致的數(shù)據(jù)分析和清晰簡明的數(shù)據(jù)統(tǒng)計(jì),做到具有較高的獨(dú)立性和較小的冗余度。本系統(tǒng)主要是通過關(guān)系型數(shù)據(jù)庫SQLite3實(shí)現(xiàn)的,數(shù)據(jù)庫E-R圖如圖2所示,分為用戶信息表和票據(jù)信息表。
用戶信息表用于存儲用戶相關(guān)的信息,以系統(tǒng)使用者的ID作為主鍵,主要有用戶名、密碼、聯(lián)系電話、地址等信息。創(chuàng)建用戶信息表能夠方便管理,提升效率。
用戶在系統(tǒng)中上傳發(fā)票后,系統(tǒng)會將識別后提取的內(nèi)容存入票據(jù)信息表中供用戶查詢。其中以發(fā)票號碼為主鍵,還包含有銀行卡號、開戶行、開票日期、不含稅的開具金額、總金額五個(gè)字段。票據(jù)信息表會在內(nèi)容展示頁中將內(nèi)容呈現(xiàn)給用戶,用戶還可以選中其中的某項(xiàng)數(shù)據(jù)進(jìn)行大小排序。
1.3" 系統(tǒng)功能設(shè)計(jì)
增值稅發(fā)票解析和識別系統(tǒng)主要是提供服務(wù)供財(cái)務(wù)報(bào)賬的中間流程調(diào)用,結(jié)合信息處理等基礎(chǔ)功能部署成Web系統(tǒng),這樣用戶使用起來更加方便。針對該系統(tǒng)的目標(biāo)用戶及其使用需求,發(fā)票解析和識別系統(tǒng)需要具備如下基本功能:注冊、登錄、發(fā)票上傳、發(fā)票識別、數(shù)據(jù)展示和數(shù)據(jù)下載等。
1.3.1" 注冊登錄
在用戶登錄模塊中,前端在獲取用戶輸入的登錄信息后會將賬號和密碼與數(shù)據(jù)庫中的賬號密碼進(jìn)行比對。如果用戶信息正確,回傳系統(tǒng)主頁;如果賬號不存在,則提示用戶注冊賬號。在用戶注冊賬號時(shí),前端會獲取到用戶填寫的信息并將用戶信息寫入數(shù)據(jù)庫。
當(dāng)用戶需要修改用戶信息時(shí),其提交修改信息,系統(tǒng)將用戶提交的修改信息與原有信息進(jìn)行對比。倘若信息無變化,返回“您的資料沒有改動”,如果信息有變化,則存入數(shù)據(jù)庫,同時(shí)反饋“您的資料已重新提交”的提示信息。
1.3.2" 發(fā)票上傳
用戶打開“上傳文件”頁面時(shí)呈現(xiàn)上傳接口,在用戶點(diǎn)擊“上傳”按鈕后,系統(tǒng)對文件進(jìn)行處理。
當(dāng)用戶選擇文件時(shí),前端會對文件類型進(jìn)行判斷。系統(tǒng)可對OFD、PDF、PNG和JPG等格式的文件進(jìn)行解析或識別,如果是其他格式的文件則提示用戶不支持該種類型文件的處理。在發(fā)票上傳時(shí)為發(fā)票自動識別創(chuàng)建進(jìn)程,前端以進(jìn)度條顯示當(dāng)前處理進(jìn)度,后端工作繼續(xù)運(yùn)轉(zhuǎn)。
1.3.3" 發(fā)票識別
發(fā)票上傳到系統(tǒng)后臺后,后臺會根據(jù)發(fā)票類型對發(fā)票進(jìn)行解析或識別,獲取發(fā)票上面的發(fā)票代碼、發(fā)票號碼、合計(jì)稅額、合計(jì)金額、開票日期、銷售方名稱、銷售方開戶行及賬號等信息返回給前端。
1.3.4" 發(fā)票下載
單次上傳發(fā)票成功后,可以將該次識別的數(shù)據(jù)下載下來以供后續(xù)審查和使用。在發(fā)票審核頁面中查詢到該用戶上傳過的全部發(fā)票時(shí),也可以根據(jù)需求下載曾經(jīng)處理過的原始發(fā)票和處理過的發(fā)票信息。下載后的發(fā)票信息以CSV格式保存到本地,文件中包含發(fā)票號碼、銀行卡號、開戶行等重要信息和金額核對等相關(guān)處理的結(jié)果。
2" 系統(tǒng)實(shí)現(xiàn)
本系統(tǒng)采用的是B/S架構(gòu),使用HTML、CSS、JavaScript以及開發(fā)框架Bootstrap進(jìn)行前端開發(fā)。選用jQuery進(jìn)行前后端數(shù)據(jù)交互和傳遞,采用jQuery作為微型JavaScript庫,通過創(chuàng)建服務(wù)端函數(shù)并在服務(wù)端與客戶端之間交換JSON數(shù)據(jù),能夠很好地體現(xiàn)Web應(yīng)用的動態(tài)性特點(diǎn)[2]。在功能邏輯的實(shí)現(xiàn)上采用了以Python語言編寫的Flask后臺框架,F(xiàn)lask的特點(diǎn)在于其小巧靈活,可以很好地結(jié)合MVC模式,非常適用于中小型網(wǎng)站的開發(fā)[3]。
發(fā)票提取識別模塊根據(jù)發(fā)票的類型進(jìn)行相應(yīng)的處理,電子發(fā)票一般有OFD和PDF兩種格式,紙質(zhì)發(fā)票掃描件有PDF、PNG和JPG等圖片格式,不同格式發(fā)票需要采用不同的方法進(jìn)行處理,OFD格式和文本格式的PDF文件可直接進(jìn)行解析,而發(fā)票掃描件則需要進(jìn)行文字識別。
2.1" 發(fā)票解析
OFD是開放版式文檔(Open Fixed-layout Document)的英文縮寫,是我國國家版式文檔格式《GB/T 33190—2016電子文件存儲與交換格式-版式文檔》標(biāo)準(zhǔn)[4]。OFD文檔不受設(shè)備影響,版式固定。在版式、版面、字體、字號等方面與紙質(zhì)文件完全一致。版式文檔格式的特點(diǎn)使它成為嚴(yán)肅類電子文檔發(fā)布、數(shù)字化信息傳播和電子存檔的理想文檔格式,特別適合用于保存電子發(fā)票。
OFD文件本身是壓縮文件,在提取OFD格式的電子發(fā)票時(shí),首先對文件進(jìn)行解壓縮,在解壓的根目錄下面有OFD.xml文件,如圖3所示。
如圖3所示,OFD.xml文件包含發(fā)票代碼、發(fā)票號碼、合計(jì)稅額、合計(jì)金額和開票日期等信息,若要獲得銷售方名稱和銀行賬號等信息,需要對./Doc_0/Attachs目錄下的original_invoice.xml文件進(jìn)行解析,該文件的部分內(nèi)容如圖4所示。
如圖4所示,original_invoice.xml文件包含購買方名稱、銷售方名稱、納稅號、地址、開戶行等信息。OFD.xml和original_invoice.xml是xml格式的文件,利用xml解析庫就可以得到所需的字段信息。而后綴為.pdf的發(fā)票文件可能是文本格式的電子發(fā)票,也可能是紙質(zhì)版發(fā)票的掃描件,前者可直接運(yùn)用PDF解析工具進(jìn)行信息提取,后者則需要使用OCR方法進(jìn)行字符識別[5]。但是發(fā)票文件中沒有用以判斷一份PDF文件到底是文本格式文件還是掃描件的字段,可以借助pdfplumber庫來判斷[6]。pdfplumber是一個(gè)用于處理PDF文件的Python庫,可以提取文本、圖像、表格等元素。它的extract_words函數(shù)可以獲取文本類型PDF文件的文本內(nèi)容,如果能夠獲取文本內(nèi)容則為文本格式的PDF,否則就是掃描件。文本格式PDF文件利用pdfplumber的extract_text函數(shù)得到每一頁的文本,然后運(yùn)用正則表達(dá)式提取所需的字段信息。
2.2" 發(fā)票識別
紙質(zhì)發(fā)票掃描件需要使用光學(xué)字符識別技術(shù)(Optical Character Recognition, OCR)進(jìn)行識別,OCR是采用光學(xué)的方式將紙質(zhì)文檔中的文字轉(zhuǎn)換成為黑白點(diǎn)陣的圖像,并通過識別算法將圖像中的文字轉(zhuǎn)換成文本格式的一種技術(shù)[7,8]。隨著大數(shù)據(jù)以及人工智能掀起的狂潮,尤其是近年來深度學(xué)習(xí)的蓬勃發(fā)展,基于卷積神經(jīng)網(wǎng)絡(luò)的OCR技術(shù)可以快速識別到重要的信息,而且能達(dá)到很高的準(zhǔn)確率。
目前,國內(nèi)主流的ICT公司(例如騰訊、阿里巴巴、百度、華為和字節(jié)跳動)都有提供OCR服務(wù)[9]。其中,百度的PaddleOCR是一個(gè)開源的超輕量級OCR模型庫[10],其通用OCR識別準(zhǔn)確率已經(jīng)超過95%,其端到端的識別模型將檢測和識別放到一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中,使得訓(xùn)練的效率更高,預(yù)測階段的資源開銷更少,所以我們選用PaddleOCR識別紙質(zhì)發(fā)票掃描件。
PaddleOCR對圖片格式的發(fā)票進(jìn)行識別,所以當(dāng)發(fā)票掃描件為PDF格式時(shí),需要先將其轉(zhuǎn)換成圖片。當(dāng)前無論是增值稅普通發(fā)票還是增值稅專用發(fā)票都是橫板的,即從正向看(文字從左向右,從上向下排列)發(fā)票圖片的寬度比長度要大,但是發(fā)票掃描時(shí)可能會將紙質(zhì)發(fā)票采集成豎版,所以還需要對發(fā)票的方向進(jìn)行校正。當(dāng)圖片的長大于寬時(shí),代表圖片是豎直方向的,需要對圖片進(jìn)行由豎直向水平方向的旋轉(zhuǎn),但究竟是向左旋轉(zhuǎn)90度還是向右旋轉(zhuǎn)90度還需要做進(jìn)一步的確定。
如圖5(a)所示的發(fā)票需要向右旋轉(zhuǎn)90度變?yōu)檎?,而如圖5(b)所示的發(fā)票需要向左旋轉(zhuǎn)90度變成正向。我們可以借助發(fā)票上的二維碼來判斷發(fā)票當(dāng)前的方向,圖5(a)發(fā)票上的二維碼在左下角,而圖5(b)發(fā)票上的二維碼在右上角。二維碼的識別可以借助微信開發(fā)團(tuán)隊(duì)貢獻(xiàn)給OpenCV社區(qū)的二維碼掃描工具,先調(diào)用wechat_qrcode_WeChatQRCode()創(chuàng)建檢測實(shí)例,再調(diào)用該實(shí)例的detectAndDecode()方法檢測和識別二維碼,它不僅能定位二維碼所在的位置,還能解析二維碼上的文本信息,對圖5(b)發(fā)票調(diào)用二維碼識別接口,得到的二維碼識別結(jié)果如圖6所示。
在如圖6所示的二維碼識別結(jié)果中,最上面一行數(shù)據(jù)是二維碼的內(nèi)容,其中的第三項(xiàng)044002000404是發(fā)票代碼,第四項(xiàng)22477767是發(fā)票號碼,第五項(xiàng)754.72是不含稅的發(fā)票金額,第六項(xiàng)20221128是開票日期。第二行行首的array部分是二維碼的坐標(biāo),每行有兩個(gè)浮點(diǎn)數(shù),分別表示二維碼四個(gè)角的水平和豎直方向坐標(biāo)。當(dāng)二維碼在左下角時(shí),水平方向坐標(biāo)較小,而豎直方向的坐標(biāo)較大。反之,當(dāng)二維碼在右上角時(shí),水平方向的坐標(biāo)較大,豎直方向的坐標(biāo)較小。我們可以根據(jù)二維碼的坐標(biāo)來確定向左還是向右旋轉(zhuǎn)發(fā)票,將圖5(b)發(fā)票向左旋轉(zhuǎn)90度后得到矯正方向后的發(fā)票,如圖7所示。
矯正圖片方向后就可以調(diào)用PaddleOCR進(jìn)行文字識別,調(diào)用PaddleOCR庫的PaddleOCR()方法創(chuàng)建實(shí)例,然后調(diào)用該實(shí)例的ocr(self, img, det, rec, cls)方法進(jìn)行識別。OCR方法有五個(gè)參數(shù),第一個(gè)參數(shù)self表示類的實(shí)例本身,第二個(gè)參數(shù)img表示要識別的對象,可以是ndarray對象,圖片的路徑或者是列表對象,第三至第五個(gè)參數(shù)分別表示是否進(jìn)行文本檢測,是否進(jìn)行文本識別,是否進(jìn)行不同角度的識別,它們的默認(rèn)值都是true。由于我們既要檢測文本的位置,又要識別文本的內(nèi)容,所以第三和第四個(gè)參數(shù)就使用默認(rèn)值,但是我們在將圖片對象送入OCR函數(shù)識別之前已經(jīng)利用二維碼信息對圖片進(jìn)行了方向矯正,所以將最后的參數(shù)cls設(shè)為1,這樣就不用在各個(gè)方向上進(jìn)行識別,提高處理速度。對如圖7所示的發(fā)票進(jìn)行OCR識別后得到如圖8所示的識別結(jié)果(部分截圖)。
每行結(jié)果是一個(gè)列表,每個(gè)列表有兩個(gè)元素,第一個(gè)元素是一個(gè)列表,該列表有四個(gè)元素,表示檢測到文本框四個(gè)角的x軸和y軸坐標(biāo),第二個(gè)元素是一個(gè)元組,元組的第一個(gè)元素是文本框中包含的文字,第二個(gè)元素是置信度。我們提取所有的文本框信息畫在原始發(fā)票圖片上,可以看到如圖9所示的文本框檢測結(jié)果。
從圖9可以看出,發(fā)票上絕大部分的文本框都檢測出來了,但是OCR識別并不能達(dá)到100%的準(zhǔn)確率,而發(fā)票信息直接關(guān)系到財(cái)務(wù)的安全,容不得半點(diǎn)差錯(cuò)。所以我們可以將如圖6所示二維碼識別結(jié)果和如圖8所示識別結(jié)果的相同字段進(jìn)行比對,如果有不一致的地方說明出現(xiàn)了識別錯(cuò)誤,當(dāng)出現(xiàn)識別錯(cuò)誤時(shí)將該信息傳遞到前臺界面,提示用戶進(jìn)行人工比對和手動矯正。
最后,將識別結(jié)果返回到前端進(jìn)行頁面展示,如圖10所示。
3" 結(jié)" 論
本文設(shè)計(jì)并實(shí)現(xiàn)了增值稅發(fā)票解析和識別系統(tǒng),介紹了不同類型發(fā)票的解析和識別方法。利用二維碼解析工具對發(fā)票圖片的方向進(jìn)行矯正,并對OCR的識別結(jié)果進(jìn)行驗(yàn)證,以此保證發(fā)票識別結(jié)果的可靠性。后續(xù)考慮對接國稅局的發(fā)票查詢系統(tǒng),對發(fā)票的真?zhèn)芜M(jìn)行驗(yàn)證,進(jìn)一步完善和提升系統(tǒng)的功能。
參考文獻(xiàn):
[1] 唐詠,王偉波.基于大數(shù)據(jù)平臺的增值稅發(fā)票識別與管理 [J].物聯(lián)網(wǎng)技術(shù),2022,12(6):125-126.
[2] 王夢梅,劉浩.基于jQuery Mobile的溫室智能控制系統(tǒng) [J].信息技術(shù)與信息化,2021(6):222-224.
[3] 唐滿華,柳毅,段立軍,等.基于MVC模式的科技管理信息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(9):165-170.
[4] 陳亞軍,張程,呂艷靜.《信息技術(shù)OFD 檔案應(yīng)用指南》國家標(biāo)準(zhǔn)解讀 [J].信息技術(shù)與標(biāo)準(zhǔn)化,2023(6):11-15.
[5] 張曄.電子文件歸檔格式研究 [D].沈陽:遼寧大學(xué),2021.
[6] 周璐喆.面向PDF文件的研招數(shù)據(jù)輔助整合軟件研發(fā) [D].南昌:江西財(cái)經(jīng)大學(xué),2021.
[7] 劉艷菊,伊鑫海,李炎閣,等.深度學(xué)習(xí)在場景文字識別技術(shù)中的應(yīng)用綜述 [J].計(jì)算機(jī)工程與應(yīng)用,2022,58(4):52-63.
[8] 劉崇宇,陳曉雪,羅燦杰,等.自然場景文本檢測與識別的深度學(xué)習(xí)方法 [J].中國圖象圖形學(xué)報(bào),2021,26(6):1330-1367.
[9] 仇建民.開源PaddleOCR技術(shù)在企業(yè)營業(yè)執(zhí)照識別上的改進(jìn)與實(shí)踐 [J].現(xiàn)代信息科技,2021,5(9):65-69+74.
[10] 成日冉.基于嵌入式圖像處理平臺的集裝箱編碼識別系統(tǒng)研發(fā) [D].成都:電子科技大學(xué),2022.
作者簡介:汪香君(1982.05—),女,漢族,湖北黃岡人,實(shí)驗(yàn)師,碩士,研究方向:人臉識別、深度學(xué)習(xí);林冰清(2000.08—),女,漢族,廣東深圳人,工程師,本科,研究方向:物聯(lián)網(wǎng)工程;陳玉強(qiáng)(2002.10—),男,漢族,廣東梅州人,本科在讀,研究方向:數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù);劉會芬(1983.11—),女,漢族,湖北黃岡人,實(shí)驗(yàn)師,碩士,研究方向:物聯(lián)網(wǎng)應(yīng)用、軟件工程。