发票识别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代码。

bootstrap-fileinput的github地址

官方说明文档

在examples中选择一个样式进行使用,支持多文件上传,并且可以限制文件上传类型。但是并没有找到如何接收服务端传回来的json,这里我就使用ajax进行前后端传值,只是用了该插件的样式。

  1. 核心功能就是将上传的文件识别出二维码,然后将识别到的字符串处理下即可。
  2. 如果是pdf文件则转换为jpg,然后再识别二维码
  3. 将(批量)上传的文件,识别到一个或多个二维码时,导出到excel,使用UUID进行命名,并下载
  4. 每天12点清理所有文件:上传的文件,转换格式后的文件,表格的xlsx文件等。

4. 四阶段:DEBUG

  1. 会出现png格式不识别二维码的情况

    解决办法:转换成jpg格式

  2. pdf文件转jpg时,二维码丢失(jpg文件中不显示二维码的情况)

    解决办法:pdf转png,png再转jpg


发票识别demo
https://promisewang.github.io/post/3068ab21.html
作者
Promise
发布于
2024年3月14日
许可协议