趙 巖
(鄭州科技學(xué)院 河南 鄭州 450000)
每當(dāng)發(fā)票集中報(bào)銷時(shí),財(cái)務(wù)工作人員總會(huì)面對(duì)大量的票據(jù),為了降低財(cái)務(wù)工作人員的工作強(qiáng)度,也為了學(xué)習(xí)知識(shí)的運(yùn)用,項(xiàng)目團(tuán)隊(duì)開發(fā)了“基于光學(xué)字符識(shí)別(optical character recognition, OCR)技術(shù)與二維碼技術(shù)的發(fā)票錄入與處理系統(tǒng)”,通過市場調(diào)研與實(shí)際的學(xué)習(xí),此系統(tǒng)采用Java 語言利用其豐富的封裝庫進(jìn)行后端開發(fā),使用固定的網(wǎng)頁技術(shù)進(jìn)行前端的開發(fā),結(jié)合關(guān)系型數(shù)據(jù)庫、管理軟件數(shù)據(jù)庫進(jìn)行信息的存儲(chǔ),將系統(tǒng)運(yùn)行于Tomcat 服務(wù)器進(jìn)行本地的存儲(chǔ)與處理[1]。
OCR 是一種技術(shù),它使用計(jì)算機(jī)算法來將圖像中的文字轉(zhuǎn)換為可編輯和搜索的文本。
OCR 技術(shù)的工作原理是將圖像中的字符映射到計(jì)算機(jī)中的字符表示,通過機(jī)器學(xué)習(xí)、模式識(shí)別等方法進(jìn)行識(shí)別,將識(shí)別結(jié)果轉(zhuǎn)換為文本。OCR 技術(shù)的識(shí)別精度與圖像質(zhì)量、字符集、訓(xùn)練數(shù)據(jù)等因素密切相關(guān)。
OCR 技術(shù)原理流程圖如圖1 所示。

圖1 OCR 技術(shù)原理圖
當(dāng)使用OCR 進(jìn)行發(fā)票識(shí)別時(shí),通過相關(guān)算法對(duì)上傳的發(fā)票圖片進(jìn)行預(yù)處理,然后進(jìn)行票據(jù)定位、字符分割、字符識(shí)別等操作得到可編輯的文本信息,在系統(tǒng)后端進(jìn)行處理,將相關(guān)信息進(jìn)行劃分輸出在前端的表格中。
OCR 技術(shù)的核心在于分類器的訓(xùn)練,即對(duì)字符進(jìn)行識(shí)別和分類。常用的分類器有:神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)、貝葉斯分類器等。借助OCR 技術(shù),可以實(shí)現(xiàn)對(duì)發(fā)票上文本信息的自動(dòng)識(shí)別和錄入。隨著神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的不斷發(fā)展,OCR 技術(shù)對(duì)不同字體、不同尺寸、不同字母形狀的字符的識(shí)別準(zhǔn)確率也得到了很大提高[2]。
二維碼是一種開放性的信息存儲(chǔ)器,它可以將固定的信息,如文字、數(shù)字、圖片等,通過某種特定的規(guī)律進(jìn)行編碼,使其轉(zhuǎn)換成黑白相間的圖形,也就是二維碼。二維碼的工作原理與條形碼類似,只是將條形碼的黑白條紋改成了黑白小方塊。這些小方塊可以通過不同的排列方式來存儲(chǔ)不同的信息。二維碼的種類有很多,其中QR 碼是最常用的二維碼之一,它可以存儲(chǔ)多達(dá)2 710 個(gè)數(shù)字或1 850 個(gè)字母或500 多個(gè)漢字,因此也被廣泛用于各種信息存儲(chǔ)和傳輸場合。當(dāng)使用手機(jī)掃描二維碼時(shí),可以通過解碼程序?qū)⑦@些黑白小方塊轉(zhuǎn)換成所能理解的數(shù)字或文字等信息。二維碼的優(yōu)點(diǎn)在于它具有極高的信息密度和開放性,不僅可以存儲(chǔ)文字信息,還可以存儲(chǔ)圖片、聲音、視頻等多媒體信息,而且可以被任何設(shè)備輕松識(shí)別。
二維碼識(shí)別原理流程如圖2 所示。
根據(jù)國家要求在開具發(fā)票時(shí),通過對(duì)發(fā)票上的關(guān)鍵信息進(jìn)行數(shù)據(jù)加密,生成一種具有防偽意義的電子密碼(也稱為密文),將其打印在發(fā)票(即密碼區(qū))上,并將其全部加密信息逐個(gè)記錄到金稅卡的黑盒子里。
而電子發(fā)票上的二維碼就是利用的數(shù)字防偽技術(shù),確保電子發(fā)票的安全應(yīng)用。通過手機(jī)微信掃描二維碼的方式,人們可以在沒有計(jì)算機(jī)的情況下,便捷地查詢到發(fā)票的一些關(guān)鍵信息,可以通過所得信息進(jìn)行真?zhèn)悟?yàn)證。
因此,二維碼是電子發(fā)票的重要特征之一。
1.3.1 Ajax 異步請(qǐng)求
Ajax(asynchronous JavaScript and XML, Ajax)是一種使用JavaScript 和XML 進(jìn)行異步數(shù)據(jù)請(qǐng)求的技術(shù)。它可以在不刷新整個(gè)頁面的情況下更新網(wǎng)頁內(nèi)容,使用戶有良好的交互體驗(yàn)[3]。
在Ajax 中,異步請(qǐng)求是核心部分。異步請(qǐng)求允許JavaScript 在后臺(tái)與服務(wù)器通信,而不阻塞頁面的其他部分。這使得Ajax 能夠?qū)崿F(xiàn)實(shí)時(shí)更新、表單驗(yàn)證、數(shù)據(jù)搜索建議等功能,也正因此將此技術(shù)應(yīng)用于本系統(tǒng)中。
一般通過XMLHttpRequest 對(duì)象來實(shí)現(xiàn)Ajax 異步請(qǐng)求。這個(gè)對(duì)象可以讓JavaScript 把一個(gè)超文本傳輸協(xié)議(hypertext transfer protocol, HTTP)請(qǐng)求發(fā)送到服務(wù)器,并且不用刷新整個(gè)網(wǎng)頁就可以得到一個(gè)響應(yīng)。對(duì)象的open()和send()方法可用于發(fā)出請(qǐng)求并處理響應(yīng)。當(dāng)處理回應(yīng)時(shí),可以使用回調(diào)函數(shù)的功能,以處理服務(wù)器所傳回的資料。當(dāng)服務(wù)器的回應(yīng)結(jié)束后,便會(huì)使用回調(diào)函數(shù)的功能,然后便可利用JavaScript 對(duì)回應(yīng)資料進(jìn)行處理,并更新網(wǎng)頁的內(nèi)容。
1.3.2 MySQL 數(shù)據(jù)庫
使用MySQL 數(shù)據(jù)庫對(duì)發(fā)票信息與處理信息進(jìn)行存儲(chǔ);相比其他數(shù)據(jù)庫,MySQL 的優(yōu)點(diǎn)如下:
快速、穩(wěn)定:MySQL 的快速、穩(wěn)定,能夠滿足海量數(shù)據(jù)的儲(chǔ)存、讀取等需要。
開源:這是一款開源軟件,對(duì)于開發(fā)者比較友好,且技術(shù)成熟容易掌握。
對(duì)多個(gè)OS 的支持:MySQL 可以在多個(gè)OS 的平臺(tái)上工作,包括Windows、Linux、Unix 等。
支持多個(gè)程序語言:MySQL 支持多個(gè)程序語言,包括C、C++、Java、PHP、Python 等。
支持多個(gè)存儲(chǔ)引擎:MySQL 支持多個(gè)存儲(chǔ)引擎,用戶可以根據(jù)自己的需要進(jìn)行選擇。
應(yīng)用程序接口和開發(fā)工具:MySQL 為用戶提供了大量的應(yīng)用程序接口,方便開發(fā)者的使用。
1.3.3 Tomcat 服務(wù)器
Apache Tomcat 是一個(gè)流行的開源Java Web 應(yīng)用服務(wù)器,由Apache 軟件基金會(huì)開發(fā)并維護(hù)。它是輕量級(jí)的,適用于中小型系統(tǒng)和并發(fā)訪問用戶不多的場景。
Tomcat 服務(wù)器的主要功能是作為Java 服務(wù)端頁面(Java Server Pages, JSP)和Servlet 的容器,它能夠運(yùn)行Java 應(yīng)用程序,并且支持最新的Servlet 和JSP 規(guī)范。由于Sun Microsystems 的參與和支持,Tomcat 總能得到最新的Servlet 和JSP 規(guī)范的支持。
Tomcat 的安裝過程非常簡單,用戶可以從Apache 官方網(wǎng)站下載安裝包,解壓縮后即可使用。在配置正確的情況下,Apache 服務(wù)器可以與Tomcat 服務(wù)器協(xié)同工作,使得HTML 頁面和JSP 頁面的請(qǐng)求都能得到處理。
Apache Tomcat 是一個(gè)功能強(qiáng)大、易于使用、可擴(kuò)展的Java Web 應(yīng)用服務(wù)器,適用于各種規(guī)模的應(yīng)用。無論是在開發(fā)階段還是在生產(chǎn)環(huán)境中,Tomcat 都能提供穩(wěn)定、高效的性能,因此得到了Java 愛好者和開發(fā)人員的廣泛喜愛和認(rèn)可。
發(fā)票處理系統(tǒng)的前端采用Vue. js 開發(fā),界面簡潔明了,交互性高;后端使用Java 開發(fā),整體框架為SSM 框架集(Spring+SpringMVC+MyBatis, SSM);通過JSP 使前后端相鏈接。整體代碼量較少,在維護(hù)方面不會(huì)增加工作量。數(shù)據(jù)庫采用開源的MySQL 對(duì)發(fā)票信息進(jìn)行存儲(chǔ);服務(wù)器也是采用開源的Tomcat 服務(wù)器。有效地降低開發(fā)成本,使用主機(jī)當(dāng)作服務(wù)器不會(huì)有信息外泄的風(fēng)險(xiǎn)。
本系統(tǒng)有管理員與普通用戶兩種登錄方式。普通用戶通過用戶名與登錄密碼登錄后可以進(jìn)行發(fā)票的上傳、檢索、刪除(本人上傳的)和導(dǎo)出Excel 表格等功能;管理員登錄后可以增加用戶,并設(shè)置對(duì)應(yīng)的密碼,并具有普通用戶的權(quán)限。
系統(tǒng)在設(shè)計(jì)時(shí),以學(xué)校財(cái)務(wù)相關(guān)問題為依據(jù),并與財(cái)務(wù)相關(guān)專業(yè)的同學(xué)進(jìn)行商討,經(jīng)過調(diào)研分析,對(duì)相關(guān)工作人員的需求進(jìn)行歸納總結(jié),以此進(jìn)行系統(tǒng)搭建。
系統(tǒng)部署時(shí)是根據(jù)學(xué)校部門需求定的,因此最初只在單獨(dú)部門進(jìn)行了環(huán)境的搭建,使用Tomcat 服務(wù)器將系統(tǒng)部署在本地,相較于云服務(wù)部署雖然有一些劣勢(shì),但都在可控范圍之內(nèi);同時(shí)將系統(tǒng)部署在本地可以保證數(shù)據(jù)的安全性和保密性,避免第三方的泄密;在技術(shù)架構(gòu)方面也可以用提供服務(wù)的方式進(jìn)行二次開發(fā);有限的硬件資源也可以進(jìn)行靈活調(diào)配;集成相對(duì)容易,數(shù)據(jù)在系統(tǒng)之間的傳輸會(huì)更快。
2.2.1 管理員用戶
用戶管理模塊:管理員進(jìn)入系統(tǒng)后查看“報(bào)銷列表”時(shí)可以查看操作員信息,點(diǎn)擊可以進(jìn)行用戶的添加、刪除與密碼的重置。相關(guān)的操作信息會(huì)保存在數(shù)據(jù)庫中,可以登錄數(shù)據(jù)庫進(jìn)行查看。
發(fā)票上傳模塊:模塊中使用Java 的開源庫Apache POI 對(duì)上傳的PDF 進(jìn)行分析識(shí)別,提取發(fā)票的發(fā)票代碼、發(fā)票號(hào)碼、發(fā)票金額、開票日期等,并附上錄入日期和操作用戶名給予后臺(tái),后臺(tái)會(huì)對(duì)已存的發(fā)票進(jìn)行核對(duì),若數(shù)據(jù)庫中不存在則直接錄入成功;若數(shù)據(jù)庫中已存在則會(huì)提示“錄入失敗,重復(fù)錄入”,并將記錄保存到數(shù)據(jù)庫中;其次可能有一些新式發(fā)票,票據(jù)相關(guān)信息與傳統(tǒng)不同也會(huì)錄入成功,但會(huì)進(jìn)行備注“新票”。也可以點(diǎn)擊“手動(dòng)錄入”然后按照傳統(tǒng)的手動(dòng)錄入發(fā)票的方式對(duì)發(fā)票的相關(guān)信息進(jìn)行錄入。因辦公原因也會(huì)有紙質(zhì)發(fā)票的圖片,將紙質(zhì)發(fā)票的圖片上傳使用OCR 技術(shù)對(duì)上傳的圖片進(jìn)行識(shí)別,提取信息進(jìn)行錄入。也可以配合掃碼工具將發(fā)票上的二維碼中的代碼提取到后臺(tái)進(jìn)行解碼,得到相關(guān)信息返還給展示界面。
發(fā)票管理模塊:這一模塊可以對(duì)已錄入的發(fā)票進(jìn)行查找、刪除和導(dǎo)出Excel 表格。查找支持模糊查找,也可以按照日期或者操作用戶等作為查詢條件并導(dǎo)出Excel 表格到桌面進(jìn)行二次整合。當(dāng)發(fā)票進(jìn)行重復(fù)錄入時(shí)也有表格進(jìn)行記錄。
管理員操作的流程如圖3 所示。

圖3 管理員的操作流程圖
2.2.2 普通用戶
普通用戶和管理員用戶的權(quán)限只差用戶管理模塊,所以其他的操作界面都一樣,可以進(jìn)行發(fā)票的錄入、刪除、查詢和導(dǎo)出Excel 表格;也能夠修改自己的密碼。
數(shù)據(jù)庫在整個(gè)信息管理系統(tǒng)中起著舉足輕重的作用,是整個(gè)信息管理系統(tǒng)的基礎(chǔ)。以需求分析為基礎(chǔ),對(duì)基本的數(shù)據(jù)庫模型進(jìn)行了設(shè)計(jì),并使用開源MySQL 數(shù)據(jù)庫來對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),系統(tǒng)主要包括3 個(gè)部分:用戶數(shù)據(jù)表、發(fā)票數(shù)據(jù)表和日志數(shù)據(jù)表。其中,用戶數(shù)據(jù)表存儲(chǔ)用戶登錄信息,發(fā)票數(shù)據(jù)表存儲(chǔ)識(shí)別出來的發(fā)票信息,日志數(shù)據(jù)表記錄系統(tǒng)操作日志。當(dāng)發(fā)票錄入時(shí)間超過半年,數(shù)據(jù)庫會(huì)自動(dòng)將其刪除。
用戶資料表(見表1)保存用戶的注冊(cè)資料,包括用戶ID、用戶名、密碼、用戶角色等。其中,有兩種類型的用戶,一種是管理員,一種是普通用戶,管理員具有管理權(quán)限,普通用戶僅具有普通錄入、刪除、查詢和導(dǎo)出信息操作權(quán)限。

表1 用戶資料表
發(fā)票數(shù)據(jù)表(見表2)存儲(chǔ)所識(shí)別出來的發(fā)票信息,并根據(jù)不同的數(shù)據(jù)字段進(jìn)行劃分和存儲(chǔ)。主要的數(shù)據(jù)字段包括發(fā)票號(hào)碼、發(fā)票日期、發(fā)票代碼、金額等。

表2 發(fā)票數(shù)據(jù)表
日志數(shù)據(jù)表(見表3)記載了系統(tǒng)運(yùn)行過程中的運(yùn)行情況,包括運(yùn)行人員,運(yùn)行時(shí)間,運(yùn)行內(nèi)容,運(yùn)行結(jié)果。日志記錄表的信息便于管理人員跟蹤和檢查系統(tǒng)運(yùn)行情況。

表3 日志數(shù)據(jù)表
后臺(tái)進(jìn)行分模塊化編輯管理,使用Maven 對(duì)項(xiàng)目所使用的相關(guān)依賴進(jìn)行管理,開發(fā)人員根據(jù)需求建立不同的包對(duì)代碼進(jìn)行管理,具體如下:
(1)Controller 包。包含前端信息的通訊與處理類,登錄驗(yàn)證,Excel 導(dǎo)出,發(fā)票處理類等。
(2)dao 包。包含發(fā)票與用戶對(duì)應(yīng)的數(shù)據(jù)庫操作類,執(zhí)行一般的數(shù)據(jù)操作。
(3)entity 包。包含對(duì)發(fā)票與用戶的相關(guān)信息的封裝類。
(4)service 包。包含發(fā)票與用戶類的服務(wù)包,包括執(zhí)行發(fā)票的刪除與查詢的函數(shù),用戶的添加與刪除的函數(shù)。
(5)util 包。包含數(shù)據(jù)庫工具類,進(jìn)行數(shù)據(jù)庫的連接和相關(guān)的數(shù)據(jù)庫操作。
前端使用HTML、CSS、JS 進(jìn)行設(shè)計(jì),用戶在前端頁面進(jìn)行數(shù)據(jù)的輸入和管理,通過JSP 將數(shù)據(jù)給予后端執(zhí)行相關(guān)操作。登錄后用戶可以根據(jù)需要進(jìn)行相應(yīng)的操作;系統(tǒng)有“自動(dòng)錄入、手動(dòng)錄入和報(bào)銷列表”3 個(gè)界面。
點(diǎn)擊報(bào)銷列表就可以查看已錄入的報(bào)銷的發(fā)票,除了發(fā)票的相關(guān)信息也包含了操作日期與操作用戶,在匯總時(shí)可以依據(jù)操作用戶進(jìn)行歸納總結(jié),使工作內(nèi)容更清晰。同時(shí)在報(bào)銷列表界面也可以查看重復(fù)錄入的發(fā)票的記錄,重復(fù)錄入的發(fā)票不會(huì)錄入成功,但是會(huì)保留記錄。在報(bào)銷列表界面還可以進(jìn)行用戶管理(管理員用戶的條件下)。點(diǎn)擊“操作員列表”即可看到所有用戶,管理員用戶可以進(jìn)行添加,刪除與修改操作。
根據(jù)需求分析所得,在大環(huán)境的制約下,除了爆發(fā)式增長的電子發(fā)票,工作中仍然存在大量的紙質(zhì)發(fā)票,或者要求將電子發(fā)票打印出紙質(zhì)版進(jìn)行報(bào)銷,致使“紙電并存”的局面還要維持較長的一段時(shí)間,并且很多機(jī)構(gòu)仍然對(duì)紙質(zhì)發(fā)票有嚴(yán)格的要求,且拍照像素或角度會(huì)影響OCR 的精度,會(huì)造成錄入信息的效率降低,所以本系統(tǒng)仍然保留了手動(dòng)錄入的功能[4-5]。
綜上所述,本文主要介紹了基于OCR 與二維碼識(shí)別技術(shù)的發(fā)票的錄入與處理系統(tǒng)的研究與實(shí)現(xiàn),系統(tǒng)已在相應(yīng)的部門進(jìn)行初步的使用,根據(jù)反饋,系統(tǒng)的基本功能都已經(jīng)實(shí)現(xiàn),操作簡單易上手,為財(cái)務(wù)部門的工作提供了極大的便利。未來還可以在前端的交互界面做相應(yīng)的美化,使其更賞心悅目;在后端進(jìn)行功能模塊的豐富;以及在硬件設(shè)施上進(jìn)行自我拓展。