CV学习笔记(二十三):发票类OCR识别

2020-06-04 10:21:20 浏览数 (1)

在基本完成了银行卡识别之后,开始新的任务:发票类OCR识别。发票类OCR识别一直以来也是OCR之中的热点,包括证件类识别等等,后续都要一步步来。

一:发票格式解析

现在随着无纸化办公的推行,电子发票的使用率越来越多,纸质发票的数量越来越少,一般来说,我们现在的发票分为三大类:

①:增值税电子普通发票 ②:增值税普通发票 ③:增值税专用发票

现在以我在京东购物的发票为例:

发票的尺寸为24*14cm,都是比较规范的标准。

二:发票识别分析

我们识别一张发票,我们一定是想从当中查询到那些信息,那些信息有用我们着重识别,那些信息没用我们可以暂且放在一边。在国家税务总局全国增值税查验平台上,我们来验证一张发票是否合法,着重要注意四项:

①发票代码,②:发票号码,③:开票日期,④开票金额

只要找到这四项,基本上一张发票的利用价值就结束了。

那问题来了,如何找到这四项,现在有两个思路:

第一种,识别发票二维码。第二种,直接全局识别发票内容(最全,也是最麻烦)

当然,为了保证代码的有效性,这两种我们肯定都得做。

第一种:识别发票二维码

识别左上角的二维码,二维码中包含发票里面大部分有用信息,并且识别的结果基本上无误差。我写了个小代码识别了一下:

01,10,011002000111,31015945,251.77,20200407,68212483303223031362,A6CA,

这里边的信息需要说一下:

发票二维码中一共有8个属性:

以我识别出来的为例:

其中第二项:不同的代码表示的发票类型不一样

10表示的是增值税电子发票, 04表示的增值税普通发票(纸票),01表示增值税专用发票

微信识别结果:

但是二维码识别的问题在于,如果上传的都是电子版截图,效果很不错,很好识别,但是如果上传的是拍照的纸质发票,这种识别方法需要做一些图像处理后再去识别,并且很多情况下识别二维码是无效的。这是需要改进的地方。使用pyzbar

识别的成功率在65%左右。

第二种:OpenCV 神经网络

第二种方法使用的方法和之前识别银行卡的架构很相似,但是处理起来会更麻烦,原因有几点:

①:银行卡只需要识别卡号,而发票信息需要定位更多地方

②:需要标注数据量很多,人力要求高

初步思路:

读入图片-> 边缘检测->二值化->轮廓检测->筛选结果融合->定位->数据集制作->模型训练->识别

先慢慢进行,一点点摸索吧~

0 人点赞