《武汉工程大学学报》  2019年06期 586-590   出版日期:2021-01-24   ISSN:1674-2869   CN:42-1779/TQ
基于神经网络的发票文字检测与识别方法


随着计算机图像学的快速发展,光学字符识别(optical character recognition,OCR)技术越来越多的应用到各种领域。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。使用OCR识别的时候,需要对图片进行一系列的预处理操作,包括检测待识别区域、二值化、灰度化、去除干扰项[1-2]。场景文字识别具有很高的研究价值[3-4],随着信息化的高速发展,电子发票逐渐接触到日常生活中,但是传统发票仍然存在,例如饭店、加油站,以及往年的票务需要整理。普通的增值税发票和电子发票可以通过扫描二维码来查看发票代码、号码、日期、金额,但是部分发票没有二维码,而且发票中还存在一些别的信息需要识别,例如购买物品的名称、数量、多个物品的单价、开票单位以及备注内容,这些都是需要识别的内容,通过识别这些内容以便提取发票的完整信息,方便对票据的整理和信息的统计。针对发票场景,发票上的印章通常会遮挡部分有用信息,影响对字符的识别,去除印章不仅能够提高文本检测的效果,而且可以提高文字的识别率,方便采集和整理票据。2008年赵永涛等[5]提出了印章识别中图像预处理的方法,通过采用色相,饱和度和色明度模型(hue,saturation,value,HSV)提取印章然后将图像灰度、二值化处理。2014年季婧婧等[6]提出二次分割的票据彩色印章滤除,先分割印章、再分割文字信息,最后得到去除印章的图片。但是传统方法去定位和检测印章存在速度变慢精度低等问题。2016年 Liu等[7]提出了单一多框检测器(single shot detector,SSD)检测网络,基于一个前向传播的卷积神经网络(convolutional neural network,CNN),是在实时目标检测(you only look once,YOLO)[8]和Faster-RCNN[9]的基础上进行构建,包含基础网络和金字塔网络,基础网络是视觉几何(visuol geometry group,VGG)的前面4层网络,金字塔网络是特征图逐渐减小的卷积网络。改进使用一个小卷积滤波器去预测目标分类和边界框的位置的偏移。2016年Tian等[10]提出基于 RCNN,改进的文本检测网络(detecting text in natural image with connectionist text proposal network,CTPN),采用文本细尺度检测,据小窗口平滑,检测文本行,将小文本框连接起来。2017年Howaed等[11]提出了一种用于移动和嵌入式设的网络MobileNet,采用深度可分离卷积来构建轻量级深度神经网络,其作用是减少了计算参数,压缩了模型大小,但是在精度上有略微的降低。2018年欧阳欢等[12]提出国际标准化数据ISODATA聚类的方法,对印章的轮廓进行聚类分析定位印章,通过椭圆拟合寻找最优解,从而达到识别印章的目的。 本文首先使用MobileNet-SSD检测出印章的位置,以矩形形式标记出来。根据标记区域的颜色信息提取印章、提取被印章覆盖的文字信息和提取原图文本信息,最后将印章覆盖信息与原图文本信息叠加,得到去除印章后的发票。 1 印章定位及其去除 1.1 印章定位 采用MobleNet替换了SSD中提取特征的部分,来构建轻量级深度神经网络,达到模型轻量化的效果。深度可分离卷积是把标准卷积分成深度卷积和逐点卷积,将标准的3×3的卷积分为一个3×3和一个1×1的卷积,减少计算量达到模型压缩的效果。印章定位由特征提取、多尺度特征图检测组成[13-14]。 特征提取:用MobileNets代替VGG[15]作为模型基础,用来提取更多的特征图以用于检测;多尺度特征图检测:所谓多尺度采用大小不同的特征图,卷积神经网络前面的特征图比较大,后面会逐渐降低特征图大小,使用比较大的特征图来检测相对较小的目标,而小的特征图用来检测大目标。通过神经网络定位发票中印章的位置。 [ a ][ b ] 图1 不同尺度的特征图:(a)8*8,(b)4*4 Fig. 1 Characteristic maps of different scales: (a)8×8,(b)4×4 训练目标源自MultiBox目标[16-17],但是扩展到处理多个对象类别。算法损失函数定义为位置误差与置信度误差的加权和: [Lx,c,l,g= 1N[Lconfx,c+αLloc(x,l,g)]] (1) 其中[N]表示于真实物体框相匹配的默认框数量,假如[N]等于0,那么总体损失等于0;[c]是预测框的置信度;[g]是真实框的位置信息;[α]是一个权重参数,经过交叉验证将它设为1;[Lconf(x,c)]是置信损失,这里采用交叉熵损失函数;[Lloc(x,l,g)]位置损失是预测框与真实框的损失函数。 1.2 印章去除 根据印章的位置提取印章信息,将提取出来的印章信息放入一张和原图大小相同的白底图片里面,提取出来的印章信息包含被印章遮挡的文字信息。接着提取图片中文本信息,将提取出来的文本信息放入另外一张和原图大小相同的白底图片。然后提取被印章遮挡的文本信息。最后合并印章遮挡部分和文本信息部分中。流程图如图2所示。 1.2.1 提取印章 在日常生活中通常都是用摄像头和扫描仪来采集数据,根据拍摄角度的不同,得到图片颜色信息也有所不同,针对这一点本文尝试采用分离红色通道和色调,HSV模型来提取印章信息。但是由于拍色图片颜色信息不均匀导致提取效果并不好。通过分析图片的像素值可以发现,虽然拍摄的图片颜色不均匀,但是红色、蓝色、绿色、黑色之间区分度很大,所以采用红色值来确定印章信息。对于扫描仪采集的发票,红绿蓝色彩模式(red,greed,blue,RGB)都大于200而且三原色的值基本相同,所以提取红色信息只需要红色的值大于蓝色和绿色,并且差值大于一个值就认为它是红色。对于拍摄的发票,因为颜色不均匀,背景颜色的RGB值在80~240之间,虽然颜色的值在变化,但是提取红色依然可以按照之前的结论提取。获取发票印章过程如下: 将检测到印章的图片,按照高和宽遍历整张图片,可以得到每个像素点的颜色信息,红色记为[Kr],绿色值记为[Kb],蓝色值记为[Kg];根据颜色信息判断如果[Kr]>[Kb]、[Kr]>[Kg],并且两者之间的差值大于某个值那么认为这个像素点的颜色为红色,通过统计多种发票的印章颜色信息,将这个值设置为30。并且将像素值的位置信息和颜色信息保存在一个列表中,输出到另外一张白底图片上,这样做的目的是因为发票在盖章的时候因为人为的原因导致发票不均匀,提取出来之后,原图会有部分噪点。其效果如图3所示。 通过图3对比分析,可以发现HSV提取法有局限性,不能提取出印章,而分离通道法虽然可以保留红色通道,但是根据印章颜色的深度不同,会在图片上留下底印,这样导致图片信息在检测和识别的时候会有一定影响。 1.2.2 提取文本 在提取文本信息的时候需要解决的一个难题:对背景颜色的处理。通过去掉背景颜色来提取文本信息。扫描仪扫描的图片背景信息很均匀,想要提取蓝色和绿色的文本,只需要背景的[Kr]、[Kb]、[Kg]的值均大于240即可,小于的就是的文本信息。对于拍摄图片来说,这样做显然是不对的,拍摄出来的图片背景颜色呈现灰色,而且颜色不均匀,在这里通过采用分块处理的方法来解决这个问题。先将去除印章部分的图片转换成灰度图,再将一张图片分成若干块小的矩形,对每一个矩形来计算里面的每个像素点的值G,将所有的G叠加起来求平均值。定义[N]为矩形的高、[M]为矩形的宽,公式如下: [1N?Mi=1Nj=1Maij] (2) 图片中的文字信息所占的像素个数会小于图片背景像素个数,因此求得平均值后还要减去一个常量,取4个对角的G最大差值为减去的常量,这样小于这个平均值就是文本信息,对于大于的值,将其赋值255,将其变为白色;最后拼接所有的矩形块,拼接的时候按照从左到右、在从上到下的顺序拼接。 1.2.3 提取遮挡字符 提取出完整的印章信息后,接着提取被印章遮挡住的文字信息。因为印章的颜色和覆盖的颜色有所差异,在这里也采用分块的思路去提取遮挡字符。 1.2.4 合并遮挡字符和文本  最后合并提取出来的字符信息,通过两张图片像素点的值叠加就得到了最终的去章结果。最后遍历得到的结果图,记录灰度值小于255的位置信息,通过位置信息将灰度图像转换成彩色图像。 2 实验与结果讨论 2.1 实验方法 通过手机拍摄和扫描仪扫描采集增值税发票、中国石化发票等作为数据集,使用采集到的数据集进行训练。因为增值税发票和中国石化发票的印章位置比较固定,而且每张差异不大,所以采用60张作为训练集,10张作为验证集训练,标记每张图片印章的位置,在进网络之前将图片先填充为正方形然后缩放到300×300。 在深度学习框架上选择Caffe。采用GTX2080的显卡训练神经网络,迭代1万次达到收敛。用训练好的模型检测出20张图片中印章位置,用于之后的去除印章测试,最后采用CTPN检测文本框。图4为发票去章和文本检测。 2.2 识别率对比 本文使了20张图片进行测试,首先实验对图像进行了提取和合并等处理。然后使用腾讯OCR进行识别。表1是关于去除印章和不去除印章识别结果的对比。 表1中的识别率为检测到的印章矩形区域内的字符的识别准确率。根据测试表明,去除印章之后的识别率提升了约20%,对识别发票有提高。 2.3 检测率对比 该部分采用了CTPN去检测,采用10张去除印章的图片进行测试,规定只计算印章处,对于单行文本,完整检测出来的算检测到,否则认为检测失败。检测成功率为完整检测到的除以总数。表2是关于去除印章和不去除识印章的检测结果。 表2 测试结果对比 Tab. 2  Comparison of test results [测试方法\&测试图片数量\&检测成功率 / %\&去章图\&10\&89.3\&原图\&10\&35.7\&] 通过表和图可以得知,没去章的图片会存在很大的漏检和把印章作为识别的部分,去除印章后的检测率有了提升。 3 结 语 以上对特殊的场景文字识别进行了研究,在原有的识别基础上,提出了基于颜色信息的去章方法,解决在场景文字识别中印章遮挡的问题。实验结果表明,本文提出的方法提高了发票的检测率和识别率,有利于将发票识别推向使用。本文还有一些局限性,去除的印章图会存在噪点的情况,在神经网络部分还需要扩大实验的数据样本,使其具有更好的鲁棒性。