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