APP下载

基于颜色分割的发票识别与自校正系统研究

2021-05-19

网络安全与数据管理 2021年5期
关键词:税号字符发票

王 涛

(同济大学浙江学院 电子与信息工程系,浙江 嘉兴314000)

0 引言

发票是企业经营或人们日常消费生活中不可或缺的一部分。面对日益增长的发票管理需求,无论是纸质发票还是电子发票,企业或个人都需要在发票信息的录入、存储及后续管理上花费很多时间。因此,应用现代技术对发票内容信息进行自动扫描识别并提取成为财务会计、计算机和软件应用等多个领域共同希望解决的课题。何文琦[1]在分析了高校财务报销难题后,提出了直接采用OCR 技术对票据图片进行识别,提取发票中的关键信息,减少网上报销过程中的手工录入环节。王林水[2]等提出了一个自动票据识别系统,采用图像预处理技术将图像进行二值化,通过版面分析后进行字符识别。王贵新[3]等人建立了利用隐态马尔可夫模型(HMMs)的银行票据识别系统,系统首先通过光电扫描设备将用户填写的票据扫描成灰度图像,然后去掉票据的底色,使之变为黑白图像,对黑白图像进行去噪处理后,再进行文字的分割。

纵观上述文献,现有的研究都是将采集的发票图像进行二值化处理,忽略掉图片本身的颜色信息,其次不区分二维码、印章等图片组成,直接采用版式分析的方法或者OCR 的方法对图片中的文字进行识别,这必然带来识别准确率的降低。而且上述方法都是对票面信息进行提取,并不进行验证,这导致存在最终结果上的差错率,在实际使用过程中还需要辅助人工验证。鉴于此,本文提出通过颜色分割方法对发票图片进行信息分层,得到二维码、印章区域和文字区域,针对文字区域按照预设的格式进行文字识别,获得发票上所记载的发票代码、发票号码、开票日期、购方税号、销方税号、金额和税额等信息;针对二维码图片进行自动扫描从互联网服务器获取发票代码、发票号码、开票日期、购方税号、销方税号、金额和税额等信息。然后将两部分信息进行比对验证发票的真伪。验证为正确的发票分别将原始图片和信息数据存入数据库,对用户的发票凭证进行统一的信息管理。验证为错误的信息以二维码获取得信息为准存入数据库,并在数据中进行标记以备后续查询。

1 发票组成

如图1 所示,一张普通的增值税发票由以下几个部分组成:

(1)两枚红色的印章。一枚为税务局印章,位于发票中间上方边缘位置;一枚为销售方公司发票专用印章,位于右下角边缘位置。

(2)橙色的格线与预填字符。发票的主体结构是橙色的表格,通过表格格线将各项信息齐整地包围,同时又分隔成整齐且有规律的区块,如购买方、密码区、销售方等。此外,橙色预填字符提示每个区块的内容信息。

(3)黑色的填写字符与二维码。用户填写的黑色字符是每张发票的核心信息,也是发票识别方法的提取目标信息。通过扫描左上角的二维码可以得到该发票的发票代码、发票号码、合计金额、开票日期和发票验证码。如需获得更多的信息,仍然需要通过恰当的方法提取黑色填写字符,包括购买方和销售方的名称、纳税人识别号、货物或应税劳务、服务名称、金额、税额等。

图1 增值税发票样例

2 系统设计

理想的识别与自校正系统结构如图2 所示。

图2 发票识别与自校正系统结构

基于发票版面三种不同的色值,系统首先将一张版面规范的发票图像进行颜色分割,针对分割出的包含有意义信息的黑色字符层进行版面分析,划分出图片区域和文本区域。对于文本区域采用OCR技术识别其中的字符和数字[4],经过信息分类模块的处理就可以获取发票图像中的发票代码、发票号码、开票日期、购方税号、销方税号、金额和税额区域中的数据。对于图片区域,利用二维码扫描技术对分割出的二维码区域进行扫描识别,获取发票的发票代码、发票号码、开票日期、购方税号、销方税号、金额和税额等项目信息[5]。凭证管理模块对识别和扫描出的相同域的数据进行数据库存储和比对验证,并将发票图片进行永久性存储,提供图形和程序接口供用户查询。

(1)颜色分割模块

颜色分割模块将从色彩维度对发票图像进行图层分离[6]。根据发票的主要颜色,该模块将一般增值税发票图像分成三层:红色印章层、橙色表格层、黑色字符层。黑色字符图层是由多个字符区域和二维码区域构成。

(2)版面分析模块

常用的版面分析方法有基于连通域、 二分法、基于组合等方法。基于连通域的版面分析是一种典型的自底向上的方法;二分法版面分析思路简捷、易于编程,但是对于复杂的版面分析不太适应[7]。本文采用了传统的基于连通域的分析方法对颜色分割以后的发票黑色字符图层进行划分,得到不同的文字区域和图片区域[8]。

(3)字符识别模块

对文字区域进行OCR 识别,通过文本增强、字符分割、字符细化和字符归一化[9],识别出发票中的文本和数字信息。对于中英文字符的识别很多文献都提出较好的方法并且也已经有成熟的软件产品和工具包可供使用[10]。

(4)二维码扫描模块

系统对分割出来的二维码图片区域调用标准的二维码扫描程序接口,就可以从互联网获取发票的发票代码、发票号码、开票日期、购方税号、销方税号、金额和税额项目信息,并将其存入到数据库中与文字识别的结果进行比对验证。

(5)信息项分类模块

信息项分类模块是指在字符识别以后对所得到的文字信息进行按项目分类,分别归入所属的信息域中。一般发票都包含了发票代码、发票号码、开票日期、购方税号、销方税号、金额和税额等关键项,按照这些关键字把识别出来的文本信息进行归类形成信息项。同时对错误字符进行纠正最后存入数据库。识别工具包并不能准确识别所有的印刷字,而且加上版面噪音的干扰,实际识别后得到的信息域往往不完整。本文综合利用动态规划字典匹配等技术,利用规则数据库中的信息结合识别后的结果最大程度使所需域中的信息完整[11]。

(6)凭证管理模块

将从两个模块得到的票据信息项分别存入数据库中,并进行比对验证,对于有差异信息项的记录进行标记。同时,将发票原图像进行永久性存储,并将路径保存在数据库中。用户可以通过该模块查看识别出的发票信息和发票图片,也可以通过程序接口调用获取特定发票的处理结果。

3 关键模块的实现

3.1 颜色分割

颜色分割就是将图片按颜色分割出只有该颜色或类似颜色的图片[12]。

该发票识别系统采用的是以RGB 颜色空间为主、HSV 和HSL 为辅的分层策略。更具体地说,RGB可以将所有的颜色分成三个成分,任一颜色都可以根据这三个成分的值调配出来,每个成分值为0~255,其中(0,0,0)为黑,(255,255,255)为白。HSV 和HSL是色调、饱和度和亮度的描述,对比度在识别图像时可以发挥重要的作用。

系统通过OpenCV 计算机视觉库进行颜色分割[13],可以将OpenCV 提供的颜色空间转换保存到变量中:

Flags=[i for i in dir(cv2) if i.startswith(‘COLOR_’)]

颜色空间转换就是从一个通道到另一个通道,例 如:Flags [40] 的 值 为“COLOR_BGR2RGB”,其 中“COLOR_”后面的字符代表原始颜色空间,“2”后面的字符表示目标颜色空间。其作用是从BGR 到RGB通道的交换。

通过matplotlib.pyplot 来查看图像:

HSV 可以获得颜色的分布,也可以在3D 中显示出来,还可以根据每个像素的组件将每个像素放置在对应的位置,以及将对应的颜色放置在对应的位置上。

从图3 可以看到发票图片在该图的颜色分布情况。不过由于图片变量nemo 数据的一部分延伸到整个颜色空间,根据RGB 值的范围在RGB 空间分割nemo 并不容易。

如果把HSV 代表的色调、饱和度的值表示到一个圆柱色空间,那么颜色可以建模为围绕中心垂直轴旋转的角度尺寸代表值 通 道[14]。第 三 个 轴“饱和度”定义色调的深浅,从垂直轴上的最不饱和到离中心最远的最饱和,如图3 所示。系统通过cvt-Color 函数将图像转换到HSV 空间,此时发票橙色和黑色的饱和度和亮度值与其他颜色很不相同,但其大部分都处于色调轴上的小范围内,是分段的关键点。当获得合适的颜色范围,便可以使用这些值去判断阈值。系统通过inRange()返回图像范围大小的二进制掩码,其中值1 表示范围内的值,0 表示范围外的值。

mask=cv2.inRange(图像,较低范围,较高范围)

最后,系统通过在原始图像的顶部加上遮罩,即完成了某颜色图层的初步分割:

如果此时分割边界上仍有一些杂散像素,系统可以进一步使用高斯模糊对这些像素进行平滑去噪处理。

Blur=cv.GaussianBlur(result,(7,7),0)

基于颜色分割的发票各个图层效果如图4~图7所示。

图3 颜色分布结构图

图4 原始发票图像

3.2 信息项分类

由于字符识别程序自身存在差错率,因此对文本信息进行字符识别往往得不到完整的文字信息。所以在得到发票信息项之前,需要对这些不能识别的字符进行补充和完善。由于分类项目的名称和含义是已知的,因此可以根据已知信息建立字典,将这些域内的信息与规则数据库中的信息进行匹配,就可以将缺少的信息补充完整。

图5 橙色表格图层

图6 黑色字符图层

图7 红色印章图层

在图8 中信息项分类器的构造规则主要基于以下几点:

(1)姓名、城市、省、州等都是某些固定的字符;

(2)用户和账号等信息一般切分为两个区域;

(3)根据表达习惯,地址信息的书写往往有固定的次序关系;

(4)信息项的名字往往位于行的开始位置。

根据如上四点建立信息项分类器,并利用信息项名字字典和值域规则对识别后的文本信息进行分类,同时,充分考虑文字长度,与数据库的信息进行匹配后得到最为理想的分类结果。

构造字符容错器是利用了信息项之间的固有关系,比如城市和省名的相互关联、姓名自身字符的关联关系等,同时识别出的单词应该有意义,否则可以利用拼写检查对其进行纠正。规则数据库中存有这些关联关系,以及常用姓名表字典等信息。但是在进行匹配纠正时需要注意对于不能唯一匹配的信息项需要综合考虑各种信息来确定结果,经过字符容错器纠正的信息需要被反馈给信息项分类器重复进行分类、纠错、再分类的操作直到输出结果不再变化为止。经过这样的错误纠正和信息分类后得到的文字将以信息项和值域的形式交给其他模块再进行处理。

3.3 实现效果

图9、图10 为该系统在移动端的实现效果图,通过移动端手机扫描或者上传发票图片,系统在服务端自动对发票图像进行识别和自校正,将正确的发票信息项存入到数据库中并反馈给客户端界面。

用户通过该系统可以方便地管理自己的发票凭证,整个过程中不需要用户输入数据和编辑数据,避免了因为信息输入错误或者发票字符识别错误导致的凭证信息错误。

图8 信息项分类模块处理过程

图9 发票图片选择界面

图10 发票识别结果界面

3.4 实验验证

系统设计了两种方法:一种是采用传统的发票识别,通过对扫描的发票图像进行图像预处理、二值化后通过字符识别完成发票版面的数据信息的提取[15];第二种是按照本文的方法根据发票图像的特点,基于颜色分割技术,提取发票图像中有意义的区域,而忽略掉与发票信息项无关的区域。通过对50 张发票图片进行实验对比发现,传统方法可以正确识别其中的42 张,识别率为84%,而采用本文的方法可以正确识别其中的48 张,识别率为96%。可以看出本文的方法由于大大减少了发票图片无关区域的干扰,从而在整体上提高了发票图片的识别率。

4 结论

随着计算机科学技术的发展,机器逐渐代替人类来做重复性工作。在费用报销业务过程中,对于个人和企业都需要花费大量人力和精力来处理原始发票信息。发票的自动识别系统脱离人工完成。本文根据发票图像的特点,提出了基于颜色分割技术,提取发票图像中有意义的区域,而忽略掉与发票信息项无关的区域,这大大减少了干扰区域,提高了发票识别的准确率;同时将发票图像中的二维码区域分割出来进行单独识别,将两部分识别出来的信息进行比对验证,提高了发票信息项识别的准确性和可靠性。对于企业来说,可以利用该系统完全取代发票信息采集的人力,不再需要人工验证,就可以利用这些数据进行后续的信息处理。对于个人来说,在费用报销过程中,也可以方便地将发票凭证留存到信息系统中以便查询和管理。

今后将进一步地研究颜色分割技术,因为这可以大大减少不必要干扰信息的存在。在本系统,印章与字符信息分离的过程中,在字符信息的图层中,还留有印章淡淡的痕迹,这意味着采用RGB 颜色通道的分割方法对边缘线段部分并没有很好地取舍,后续可考虑基于HSV 空间分割的方法来提高分割的准确度。由于印章和部分文字会发生覆盖,覆盖掉的部分信息很难被准确识别,后续需要研究去除印章的技术,以及对缺失的信息进行修补后再进行识别的方法。

猜你喜欢

税号字符发票
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
关于发票显示额外费用的分歧
HBM电子称与西门子S7-200系列PLC自由口通讯
《中国锰业》编辑部订单回执
《中国锰业》编辑部订单回执
采购发票系统:全流程电子化实现
全国增值税发票查验平台启用
澳大利亚税号制度体系监控纳税的启示