公众号:yk 坤帝
后台回复 发票识别 获取全部源代码

1.场景描述

2.准备环境

3.提取内容

1.提取发票金额
2.提取销售方名称
3.提取纳税人识别号
4.提取开票人

4.识别发票并保存到excel

5.发票验证真伪

1.申请百度AI应用
2.获取token
3.查验发票
4.税务局查询发票

6.扩展总结

大家好,我是坤哥!

坤哥今天来分享一篇办公干货文章:用Python批量识别发票并录入到Excel表格。对于财务专业等学生或者公司财务人员来说,将报账发票等汇总到excel简直就是一个折磨。坤哥就是学财务的,真是感同深受啊,今天就把具体流程方法发给大家。

尤其是到年底的时候,公司的财务人员面对一大堆的发票简直就是苦不堪言。正好我们学会了Python,我们应该将Python的优势发挥起来。在这里只给大家讲一下基于python的发票批量识别,另外还有基于机器学习的python的发票识别,感兴趣的可以先自己挖掘一下,我们来看看基于python的发票批量识别。

1.场景描述

这里有以四张发票为例(坤哥网上搜的),将发票图片放到pic文件夹下(放在任意文件夹都可以),先用四张批量识别一下。

随便打开一张发票。

提取目标:发票金额,销售方名称、纳税人识别号、发票开票人。

最后将每一张发票的这四个内容保存到excel中,如果有学过数据库的,还是建议直接储存在数据库中,也算是对数据库的复习了,毕竟一般情况下还是用数据库比较多:

2.准备环境

需要用到的库如下:


from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcr


安装的命令如下:

pip install pyocr
pip install cnocr
下面是需要用到的全部库,模块


发票中含有中文内容(一些机器学习的内容,大家只需要知道怎么用就可以了),我们需要对图片中的中文进行识别(页面识别), cnocr 是一个不错的选择。(上面有使用方法)

提示:安装好上面的库之外,还需要安装额外的exe文件,不然会出现下面这种错误(相关配置尽量安装好)


需要安装的exe文件:

ImageMagick
tesseract-OCR

这两个软件的安装过程就不再赘述了,大家可以自行搜索教程进行安装(可以在csdn上面)。

这两个软件最好还是安装上,之前好像不用安装也可以显示数据,报错可能不影响程序运行,不过最好还是安装一下,不然别的地方也报错的时候可能无法下手了。

3.提取内容

下面以其中一张图片为例,讲解如何提取目标内容:金额、名称、纳税人识别号、开票人。


读取图片:pic1.jpg

from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcrtool = pyocr.get_available_tools()[0]
img_url = "pic1.png"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))

1.提取金额

需要截取到发票中金额的位置,不同电脑可能坐标不一样。

注释是解析,按照自己的电脑调试位置。

from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcrtool = pyocr.get_available_tools()[0]
img_url = "pic1.png"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))#提取金额
# 金额
# left = 741
# top = 420
# right = 850
# bottom = 445
left = 645
top =360
right = 719
bottom = 385
image_text1 = new_img.crop((left, top, right, bottom))
#展示图片
image_text1.show()
txt1 = tool.image_to_string(image_text1)
print(txt1)

这里的left、top、right、bottom的数值是通过多次修改定位而来。大家根据自己的发票内容去定位即可,不要觉得麻烦,一步到位的话是不会提高的,代码还是要理解理解,自己敲一敲。

接着将图片中的数字提取出来

同样的,下面继续提取:名称

2.提取名称

from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcrtool = pyocr.get_available_tools()[0]
img_url = "发票识别/pic1.png"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))#提取名称
left = 135
top = 390
right = 450
bottom = 410
image_obj2 = new_img.crop((left, top, right, bottom))
#image_obj2.show()image_obj2.save("tmp.png")
ocr = CnOcr()
res = ocr.ocr("tmp.png")
print(res[0][0])print("".join(res[0][0]))#print("".join('%s' %a for a in res))


这里的名称是中文的,咱们不能再像提取金额(数字)操作。需要使用到cnocr去将图片中的中文取出。

image_obj2.save("tmp.jpg")
ocr = CnOcr()
res = ocr.ocr("tmp.jpg")
print("".join(res[0]))


3.提取纳税人识别号

from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcrtool = pyocr.get_available_tools()[0]
img_url = "pic1.png"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))#纳税人识别号
left = 135
top = 405
right = 450
bottom = 425
image_text3 = new_img.crop((left, top, right, bottom))
#展示图片
#image_text3.show()txt3 = tool.image_to_string(image_text3)
print(txt3)


将图片中的纳税人识别号提取出来,结果如下:

4.提取开票人

from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcrtool = pyocr.get_available_tools()[0]
img_url = "pic1.png"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))#提取开票人left = 458
top = 470
right = 570
bottom = 490
image_obj4 = new_img.crop((left, top, right, bottom))
#image_obj4.show()image_obj4.save("tmp.png")
ocr = CnOcr()
res = ocr.ocr("tmp.png")
#print("".join(res[0]))print("".join(res[0][0]))



由于有中文,咱们这里同样和提取名称一样,使用cnocr将图片中的中文取出。

ok这样我们就将发票中的四个目标内容提取出来,接着将文件夹pic下的所有发票,进行识别将内容保存到excel。

4.批量识别发票并保存到excel

在读取图片之前,先将上面的四个操作封装成函数,方便每一种发票对象进行调用。


读取文件夹下的所有图片。

from PIL import Image as PI
import pyocr
import io
import pyocr.builders
from cnocr import CnOcrtool = pyocr.get_available_tools()[0]
img_url = "pic1.png"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))


开始进行识别,并将结果写入到excel中。

#批量识别##写入到excelimport openpyxloutwb = openpyxl.Workbook()  # 打开一个将写的文件outws = outwb.create_sheet(index=0)  # 在将写的文件创建sheetoutws.cell(row=1, column=1, value="名称")outws.cell(row=1, column=2, value="纳税人识别号")outws.cell(row=1, column=3, value="金额")outws.cell(row=1, column=4, value="开票人")count = 2filePath = '发票识别'pic_name = []# for i,j,name in os.walk(filePath):#     pic_name = name# for i in pic_name[0:1]:#     img_url = filePath+"/"+i#     with open(img_url, 'rb') as f:#         a = f.read()#     new_img = PI.open(io.BytesIO(a))#     ## 写入csv#     outws.cell(row=count, column=1, value=text2(new_img))#     outws.cell(row=count, column=2, value=text3(new_img))#     outws.cell(row=count, column=3, value=text1(new_img))#     outws.cell(row=count, column=4, value=text4(new_img))#     count = count + 1# outwb.save("发票汇总-坤哥.xls")  # 保存结果with open("发票识别/pic1.png", 'rb') as f:a = f.read()new_img = PI.open(io.BytesIO(a))## 写入csvoutws.cell(row=count, column=1, value=text2(new_img))outws.cell(row=count, column=2, value=text3(new_img))outws.cell(row=count, column=3, value=text1(new_img))outws.cell(row=count, column=4, value=text4(new_img))outwb.save("发票汇总-坤哥.xls")  # 保存结果

最后保存为:发票汇总-坤哥.xls,其结果如下:

5.发票验证真伪

在坤哥的交流群里,和小伙伴聊到这个内容时,小伙伴建议可以加一个功能:发票验证真伪。

所有在上面的开始识别之前(自己公司的发票可能不需要查验这步),先调用一下第三方的接口,对发票进行识别,识别通过之后再将其提取发票中目标内容。

1.申请百度AI应用


2.获取token

这里的client_id 为官网获取的AK, client_secret 为官网获取的SK,是上面申请好应用即可获取

3.查验

咱以这张图片为例,进行查验

其中的发票类型对应如下:

结果如下:

4.税务局查询发票

同样以这张图片为例,进行查验

填写好信息点击查验,结果如下:

再税务局查验更加清晰。读者可以根据自己的情况去选择自己的方式去查验。

6.小结

本文基本就成功实现目标要求,从效果来看还是非常不错的!完整源码可由文中代码组合而成(已全部分享在文中),感兴趣的读者可以自己尝试!

一定要动手尝试!一定要动手尝试!一定要动手尝试!

坤哥另最后讲一下基于python的发票识别,基于机器学习的发票识别,感兴趣的大家可以尝试一下,画了一个思维导图。

最后说一声:原创不易,求给个赞、收藏!

公众号:yk 坤帝
后台回复 发票识别 获取全部源代码

基于Python的发票识别与机器学习(保姆式教程)相关推荐

  1. 基于Python的人脸识别方法

    摘要:得益于计算机硬件技术的进步以及软件算法的不断改进,近些年来人工智能技术得到了前所未有的发展,基于深.度学习的人脸识别技术也已经得到了广泛的应用,特别是在安保.金融等需要安全系数较高的领域.提出了 ...

  2. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

  3. python学习之基于Python的人脸识别技术学习

    摘要: 面部识别技术的应用越来越广泛,它广泛应用于安全系统.人机交互.社交媒体.医疗保健等领域.本文介绍了基于Python的人脸识别技术,包括人脸检测.人脸特征提取和人脸识别三个部分.我们使用Open ...

  4. 基于Python的验证码识别技术

    基于Python的验证码识别技术 作者:强哥 概述 前言 准备工作 识别原理 图像处理 切割图像 人工标注 训练数据 检测结果 搞笑一刻 福利一刻 推荐阅读 前言 很多网站登录都需要输入验证码,如果要 ...

  5. python人脸识别训练模型_开源 | 基于Python的人脸识别:识别准确率高达99.38%!

    原标题:开源 | 基于Python的人脸识别:识别准确率高达99.38%! 该库使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wi ...

  6. python名片识别_基于Python的名片识别接口调用代码实例

    基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...

  7. 【摸鱼神器】基于python的BOSS识别系统

    [摸鱼神器]基于python的BOSS识别系统 前言 一.整体设计 二.调用摄像头 三.人脸识别 1. 构建白名单库 2. 人脸匹配 四.切换屏幕 五.完整代码 写在最后 前言 Tip:本文仅供技术学 ...

  8. 基于Python的人脸识别课堂考勤系统(毕设)

    一个菜鸟搞毕业设计的过程分享,可能对迷茫的你起到一点点作用! 序言 在着手开发项目之前我们一定要对系统进行一个初步的规划,比如系统可以实现什么功能,是否需要开发GUI页面(大部分导师都会让你搞一个,仅 ...

  9. 基于Python的人脸识别考勤系统

    基于Python的人脸识别考勤系统 Python源文件: 基于Python3.7编程环境开发 需要安装 tkinter pil face_recognition OpenCV2 库来实现人脸识别 需要 ...

  10. 名片识别信息分类python_基于Python的名片识别接口调用代码实例.doc

    基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...

最新文章

  1. Mac 10.12安装粘贴板增加工具ClipMenu
  2. Idea terminal:不是内部或外部命令,也不是可行的程序或批处理文件
  3. Spring(2)——Spring IoC 详解
  4. 【Linux网络编程】TCP编程
  5. NOIP2012模拟试题【奶牛晒衣服】
  6. JAVA 2048源码_java实现2048游戏源代码
  7. 华为手机usb调试已打开,adb devices不显示设备
  8. 计算机英语总结800,高三英语教师工作总结800字(通用5篇)
  9. 射线与圆、球相交检测
  10. 织梦html伪静态页面,dedecms织梦全站伪静态设置+全套伪静态规则
  11. Android权限 权限等级 普通权限 敏感权限 申请权限
  12. js代码 实现购物车功能
  13. 视 频 传 输 技 术
  14. 字符串处理:输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入BEIJING, 123, 3,则输出:BEI123JING。
  15. 原始的ajaxtookit的使用
  16. pygame 大球吃小球
  17. 什么是工厂模式、代理模式?
  18. Unity3d 技巧(5) 了解VR 游戏开发 美术和资源规范
  19. 更好的表现,NTP8835替代AD83586B方案(一)
  20. 狗屁不通文章生成器Java版

热门文章

  1. B5服务器内昵称注册,CSGO-B5开放注册
  2. 2022-2027年中国OLED行业市场调研及未来发展趋势预测报告
  3. 企业网络安全最常遇到的安全问题是什么,主要面临哪些威胁?
  4. 信息传输技术主要是指计算机技术和网络技术,信息传输技术主要是指什么
  5. mysql导入的数据放在那个文件夹下_mysql数据库文件导入
  6. 如何在Word中快速制作组织结构图?没想到可以如此简单
  7. T检验、卡方检验、F检验
  8. 程序员转行做运营,曾被逼得每天想离职,最后...
  9. Oracle 10g 的后台进程
  10. 无线连接网络找不到计算机组,Win10电脑找不到自家Wifi无线网络解决方法 可能是无线信道问题...