发票识别demo
最近导师让我做一个发票识别的小项目。需要提取出发票上的一些信息。
1. 一阶段:github上找一些工具
首先在github上查找相关的项目。发现多数都是使用图像识别的技术。测试了几个发票文件发现识别率不是很高。甚至可能会出现识别不到的情况。在github上我找到了两个项目测试了下,例如下图的情况
这里数字是比较密集的。项目一就是识别不到(或者是识别出现了问题,判断的时候直接看做错误用例没有输出,具体原因没有细深究代码)。而项目二“996”就经常识别为“886”。这种错误显然是不可以的。
两种方法都是借助了神经网络做识别,有些发票数字不是很紧凑识别效果很好,但是一旦出现很紧凑的情况就不太好了。而且项目二的更新时间已经是5年前了,导出的requirements.txt
文件并没有携带版本号。使用pip install -r requirements.txt
配置环境会出现不兼容的问题(包括和显卡驱动),降低版本后代码上也会有些冲突。但考虑到最终还是深度学习方法解决问题还是有错误的可能性。
在想办法解决的时候突然对发票左上角的二维码产生了兴趣
2. 二阶段:发票二维码的秘密
扫描过后会得到这样的一串数据
01,10,发票代码,发票号码,开票金额,开票日期,校验码,不知道什么的编码
在网上查到了这篇文章
https://zhuanlan.zhihu.com/p/633025591
这就知道了每一位代表什么。这里已经有了我们想要的数据,所以通过识别二维码是可行的。而且识别二维码也不会出错
3. 三阶段:确认需求,开始干活
导师需求:识别出来,并且可以导出excel
我自己加了一些需求:需要用起来方便,那就使用前后端
需求蛮简单的,后端我使用了Spring Boot
解决。前端涉及到了文件上传,我使用了Bootstrap-fileinput
插件,省去了写CSS和一些交互上的js代码。
在examples中选择一个样式进行使用,支持多文件上传,并且可以限制文件上传类型。但是并没有找到如何接收服务端传回来的json,这里我就使用ajax进行前后端传值,只是用了该插件的样式。
- 核心功能就是将上传的文件识别出二维码,然后将识别到的字符串处理下即可。
- 如果是pdf文件则转换为jpg,然后再识别二维码
- 将(批量)上传的文件,识别到一个或多个二维码时,导出到excel,使用UUID进行命名,并下载
- 每天12点清理所有文件:上传的文件,转换格式后的文件,表格的xlsx文件等。
4. 四阶段:DEBUG
会出现png格式不识别二维码的情况
解决办法:转换成jpg格式
pdf文件转jpg时,二维码丢失(jpg文件中不显示二维码的情况)
解决办法:pdf转png,png再转jpg