基于OCR 与二维码技术的发票录入与处理系统的设计与实现
2024-05-03赵岩
赵 岩
(郑州科技学院 河南 郑州 450000)
0 引言
每当发票集中报销时,财务工作人员总会面对大量的票据,为了降低财务工作人员的工作强度,也为了学习知识的运用,项目团队开发了“基于光学字符识别(optical character recognition, OCR)技术与二维码技术的发票录入与处理系统”,通过市场调研与实际的学习,此系统采用Java 语言利用其丰富的封装库进行后端开发,使用固定的网页技术进行前端的开发,结合关系型数据库、管理软件数据库进行信息的存储,将系统运行于Tomcat 服务器进行本地的存储与处理[1]。
1 相关技术
1.1 OCR 技术
OCR 是一种技术,它使用计算机算法来将图像中的文字转换为可编辑和搜索的文本。
OCR 技术的工作原理是将图像中的字符映射到计算机中的字符表示,通过机器学习、模式识别等方法进行识别,将识别结果转换为文本。OCR 技术的识别精度与图像质量、字符集、训练数据等因素密切相关。
OCR 技术原理流程图如图1 所示。
图1 OCR 技术原理图
当使用OCR 进行发票识别时,通过相关算法对上传的发票图片进行预处理,然后进行票据定位、字符分割、字符识别等操作得到可编辑的文本信息,在系统后端进行处理,将相关信息进行划分输出在前端的表格中。
OCR 技术的核心在于分类器的训练,即对字符进行识别和分类。常用的分类器有:神经网络、支持向量机、贝叶斯分类器等。借助OCR 技术,可以实现对发票上文本信息的自动识别和录入。随着神经网络和深度学习的不断发展,OCR 技术对不同字体、不同尺寸、不同字母形状的字符的识别准确率也得到了很大提高[2]。
1.2 二维码技术
二维码是一种开放性的信息存储器,它可以将固定的信息,如文字、数字、图片等,通过某种特定的规律进行编码,使其转换成黑白相间的图形,也就是二维码。二维码的工作原理与条形码类似,只是将条形码的黑白条纹改成了黑白小方块。这些小方块可以通过不同的排列方式来存储不同的信息。二维码的种类有很多,其中QR 码是最常用的二维码之一,它可以存储多达2 710 个数字或1 850 个字母或500 多个汉字,因此也被广泛用于各种信息存储和传输场合。当使用手机扫描二维码时,可以通过解码程序将这些黑白小方块转换成所能理解的数字或文字等信息。二维码的优点在于它具有极高的信息密度和开放性,不仅可以存储文字信息,还可以存储图片、声音、视频等多媒体信息,而且可以被任何设备轻松识别。
二维码识别原理流程如图2 所示。
根据国家要求在开具发票时,通过对发票上的关键信息进行数据加密,生成一种具有防伪意义的电子密码(也称为密文),将其打印在发票(即密码区)上,并将其全部加密信息逐个记录到金税卡的黑盒子里。
而电子发票上的二维码就是利用的数字防伪技术,确保电子发票的安全应用。通过手机微信扫描二维码的方式,人们可以在没有计算机的情况下,便捷地查询到发票的一些关键信息,可以通过所得信息进行真伪验证。
因此,二维码是电子发票的重要特征之一。
1.3 其他相关技术
1.3.1 Ajax 异步请求
Ajax(asynchronous JavaScript and XML, Ajax)是一种使用JavaScript 和XML 进行异步数据请求的技术。它可以在不刷新整个页面的情况下更新网页内容,使用户有良好的交互体验[3]。
在Ajax 中,异步请求是核心部分。异步请求允许JavaScript 在后台与服务器通信,而不阻塞页面的其他部分。这使得Ajax 能够实现实时更新、表单验证、数据搜索建议等功能,也正因此将此技术应用于本系统中。
一般通过XMLHttpRequest 对象来实现Ajax 异步请求。这个对象可以让JavaScript 把一个超文本传输协议(hypertext transfer protocol, HTTP)请求发送到服务器,并且不用刷新整个网页就可以得到一个响应。对象的open()和send()方法可用于发出请求并处理响应。当处理回应时,可以使用回调函数的功能,以处理服务器所传回的资料。当服务器的回应结束后,便会使用回调函数的功能,然后便可利用JavaScript 对回应资料进行处理,并更新网页的内容。
1.3.2 MySQL 数据库
使用MySQL 数据库对发票信息与处理信息进行存储;相比其他数据库,MySQL 的优点如下:
快速、稳定:MySQL 的快速、稳定,能够满足海量数据的储存、读取等需要。
开源:这是一款开源软件,对于开发者比较友好,且技术成熟容易掌握。
对多个OS 的支持:MySQL 可以在多个OS 的平台上工作,包括Windows、Linux、Unix 等。
支持多个程序语言:MySQL 支持多个程序语言,包括C、C++、Java、PHP、Python 等。
支持多个存储引擎:MySQL 支持多个存储引擎,用户可以根据自己的需要进行选择。
应用程序接口和开发工具:MySQL 为用户提供了大量的应用程序接口,方便开发者的使用。
1.3.3 Tomcat 服务器
Apache Tomcat 是一个流行的开源Java Web 应用服务器,由Apache 软件基金会开发并维护。它是轻量级的,适用于中小型系统和并发访问用户不多的场景。
Tomcat 服务器的主要功能是作为Java 服务端页面(Java Server Pages, JSP)和Servlet 的容器,它能够运行Java 应用程序,并且支持最新的Servlet 和JSP 规范。由于Sun Microsystems 的参与和支持,Tomcat 总能得到最新的Servlet 和JSP 规范的支持。
Tomcat 的安装过程非常简单,用户可以从Apache 官方网站下载安装包,解压缩后即可使用。在配置正确的情况下,Apache 服务器可以与Tomcat 服务器协同工作,使得HTML 页面和JSP 页面的请求都能得到处理。
Apache Tomcat 是一个功能强大、易于使用、可扩展的Java Web 应用服务器,适用于各种规模的应用。无论是在开发阶段还是在生产环境中,Tomcat 都能提供稳定、高效的性能,因此得到了Java 爱好者和开发人员的广泛喜爱和认可。
2 系统设计
2.1 系统架构
发票处理系统的前端采用Vue. js 开发,界面简洁明了,交互性高;后端使用Java 开发,整体框架为SSM 框架集(Spring+SpringMVC+MyBatis, SSM);通过JSP 使前后端相链接。整体代码量较少,在维护方面不会增加工作量。数据库采用开源的MySQL 对发票信息进行存储;服务器也是采用开源的Tomcat 服务器。有效地降低开发成本,使用主机当作服务器不会有信息外泄的风险。
本系统有管理员与普通用户两种登录方式。普通用户通过用户名与登录密码登录后可以进行发票的上传、检索、删除(本人上传的)和导出Excel 表格等功能;管理员登录后可以增加用户,并设置对应的密码,并具有普通用户的权限。
系统在设计时,以学校财务相关问题为依据,并与财务相关专业的同学进行商讨,经过调研分析,对相关工作人员的需求进行归纳总结,以此进行系统搭建。
系统部署时是根据学校部门需求定的,因此最初只在单独部门进行了环境的搭建,使用Tomcat 服务器将系统部署在本地,相较于云服务部署虽然有一些劣势,但都在可控范围之内;同时将系统部署在本地可以保证数据的安全性和保密性,避免第三方的泄密;在技术架构方面也可以用提供服务的方式进行二次开发;有限的硬件资源也可以进行灵活调配;集成相对容易,数据在系统之间的传输会更快。
2.2 功能模块
2.2.1 管理员用户
用户管理模块:管理员进入系统后查看“报销列表”时可以查看操作员信息,点击可以进行用户的添加、删除与密码的重置。相关的操作信息会保存在数据库中,可以登录数据库进行查看。
发票上传模块:模块中使用Java 的开源库Apache POI 对上传的PDF 进行分析识别,提取发票的发票代码、发票号码、发票金额、开票日期等,并附上录入日期和操作用户名给予后台,后台会对已存的发票进行核对,若数据库中不存在则直接录入成功;若数据库中已存在则会提示“录入失败,重复录入”,并将记录保存到数据库中;其次可能有一些新式发票,票据相关信息与传统不同也会录入成功,但会进行备注“新票”。也可以点击“手动录入”然后按照传统的手动录入发票的方式对发票的相关信息进行录入。因办公原因也会有纸质发票的图片,将纸质发票的图片上传使用OCR 技术对上传的图片进行识别,提取信息进行录入。也可以配合扫码工具将发票上的二维码中的代码提取到后台进行解码,得到相关信息返还给展示界面。
发票管理模块:这一模块可以对已录入的发票进行查找、删除和导出Excel 表格。查找支持模糊查找,也可以按照日期或者操作用户等作为查询条件并导出Excel 表格到桌面进行二次整合。当发票进行重复录入时也有表格进行记录。
管理员操作的流程如图3 所示。
图3 管理员的操作流程图
2.2.2 普通用户
普通用户和管理员用户的权限只差用户管理模块,所以其他的操作界面都一样,可以进行发票的录入、删除、查询和导出Excel 表格;也能够修改自己的密码。
2.3 数据库设计
数据库在整个信息管理系统中起着举足轻重的作用,是整个信息管理系统的基础。以需求分析为基础,对基本的数据库模型进行了设计,并使用开源MySQL 数据库来对数据进行存储,系统主要包括3 个部分:用户数据表、发票数据表和日志数据表。其中,用户数据表存储用户登录信息,发票数据表存储识别出来的发票信息,日志数据表记录系统操作日志。当发票录入时间超过半年,数据库会自动将其删除。
用户资料表(见表1)保存用户的注册资料,包括用户ID、用户名、密码、用户角色等。其中,有两种类型的用户,一种是管理员,一种是普通用户,管理员具有管理权限,普通用户仅具有普通录入、删除、查询和导出信息操作权限。
表1 用户资料表
发票数据表(见表2)存储所识别出来的发票信息,并根据不同的数据字段进行划分和存储。主要的数据字段包括发票号码、发票日期、发票代码、金额等。
表2 发票数据表
日志数据表(见表3)记载了系统运行过程中的运行情况,包括运行人员,运行时间,运行内容,运行结果。日志记录表的信息便于管理人员跟踪和检查系统运行情况。
表3 日志数据表
3 系统实现
3.1 后端实现
后台进行分模块化编辑管理,使用Maven 对项目所使用的相关依赖进行管理,开发人员根据需求建立不同的包对代码进行管理,具体如下:
(1)Controller 包。包含前端信息的通讯与处理类,登录验证,Excel 导出,发票处理类等。
(2)dao 包。包含发票与用户对应的数据库操作类,执行一般的数据操作。
(3)entity 包。包含对发票与用户的相关信息的封装类。
(4)service 包。包含发票与用户类的服务包,包括执行发票的删除与查询的函数,用户的添加与删除的函数。
(5)util 包。包含数据库工具类,进行数据库的连接和相关的数据库操作。
3.2 前端实现
前端使用HTML、CSS、JS 进行设计,用户在前端页面进行数据的输入和管理,通过JSP 将数据给予后端执行相关操作。登录后用户可以根据需要进行相应的操作;系统有“自动录入、手动录入和报销列表”3 个界面。
点击报销列表就可以查看已录入的报销的发票,除了发票的相关信息也包含了操作日期与操作用户,在汇总时可以依据操作用户进行归纳总结,使工作内容更清晰。同时在报销列表界面也可以查看重复录入的发票的记录,重复录入的发票不会录入成功,但是会保留记录。在报销列表界面还可以进行用户管理(管理员用户的条件下)。点击“操作员列表”即可看到所有用户,管理员用户可以进行添加,删除与修改操作。
根据需求分析所得,在大环境的制约下,除了爆发式增长的电子发票,工作中仍然存在大量的纸质发票,或者要求将电子发票打印出纸质版进行报销,致使“纸电并存”的局面还要维持较长的一段时间,并且很多机构仍然对纸质发票有严格的要求,且拍照像素或角度会影响OCR 的精度,会造成录入信息的效率降低,所以本系统仍然保留了手动录入的功能[4-5]。
4 结语
综上所述,本文主要介绍了基于OCR 与二维码识别技术的发票的录入与处理系统的研究与实现,系统已在相应的部门进行初步的使用,根据反馈,系统的基本功能都已经实现,操作简单易上手,为财务部门的工作提供了极大的便利。未来还可以在前端的交互界面做相应的美化,使其更赏心悦目;在后端进行功能模块的丰富;以及在硬件设施上进行自我拓展。