基于Python的发票识别与机器学习(保姆式教程)
公众号: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的发票识别与机器学习(保姆式教程)相关推荐
- 基于Python的人脸识别方法
摘要:得益于计算机硬件技术的进步以及软件算法的不断改进,近些年来人工智能技术得到了前所未有的发展,基于深.度学习的人脸识别技术也已经得到了广泛的应用,特别是在安保.金融等需要安全系数较高的领域.提出了 ...
- 基于python opencv人脸识别的签到系统
基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...
- python学习之基于Python的人脸识别技术学习
摘要: 面部识别技术的应用越来越广泛,它广泛应用于安全系统.人机交互.社交媒体.医疗保健等领域.本文介绍了基于Python的人脸识别技术,包括人脸检测.人脸特征提取和人脸识别三个部分.我们使用Open ...
- 基于Python的验证码识别技术
基于Python的验证码识别技术 作者:强哥 概述 前言 准备工作 识别原理 图像处理 切割图像 人工标注 训练数据 检测结果 搞笑一刻 福利一刻 推荐阅读 前言 很多网站登录都需要输入验证码,如果要 ...
- python人脸识别训练模型_开源 | 基于Python的人脸识别:识别准确率高达99.38%!
原标题:开源 | 基于Python的人脸识别:识别准确率高达99.38%! 该库使用 dlib 顶尖的深度学习人脸识别技术构建,在户外脸部检测数据库基准(Labeled Faces in the Wi ...
- python名片识别_基于Python的名片识别接口调用代码实例
基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...
- 【摸鱼神器】基于python的BOSS识别系统
[摸鱼神器]基于python的BOSS识别系统 前言 一.整体设计 二.调用摄像头 三.人脸识别 1. 构建白名单库 2. 人脸匹配 四.切换屏幕 五.完整代码 写在最后 前言 Tip:本文仅供技术学 ...
- 基于Python的人脸识别课堂考勤系统(毕设)
一个菜鸟搞毕业设计的过程分享,可能对迷茫的你起到一点点作用! 序言 在着手开发项目之前我们一定要对系统进行一个初步的规划,比如系统可以实现什么功能,是否需要开发GUI页面(大部分导师都会让你搞一个,仅 ...
- 基于Python的人脸识别考勤系统
基于Python的人脸识别考勤系统 Python源文件: 基于Python3.7编程环境开发 需要安装 tkinter pil face_recognition OpenCV2 库来实现人脸识别 需要 ...
- 名片识别信息分类python_基于Python的名片识别接口调用代码实例.doc
基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...
最新文章
- Mac 10.12安装粘贴板增加工具ClipMenu
- Idea terminal:不是内部或外部命令,也不是可行的程序或批处理文件
- Spring(2)——Spring IoC 详解
- 【Linux网络编程】TCP编程
- NOIP2012模拟试题【奶牛晒衣服】
- JAVA 2048源码_java实现2048游戏源代码
- 华为手机usb调试已打开,adb devices不显示设备
- 计算机英语总结800,高三英语教师工作总结800字(通用5篇)
- 射线与圆、球相交检测
- 织梦html伪静态页面,dedecms织梦全站伪静态设置+全套伪静态规则
- Android权限 权限等级 普通权限 敏感权限 申请权限
- js代码 实现购物车功能
- 视 频 传 输 技 术
- 字符串处理:输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入BEIJING, 123, 3,则输出:BEI123JING。
- 原始的ajaxtookit的使用
- pygame 大球吃小球
- 什么是工厂模式、代理模式?
- Unity3d 技巧(5) 了解VR 游戏开发 美术和资源规范
- 更好的表现,NTP8835替代AD83586B方案(一)
- 狗屁不通文章生成器Java版
热门文章
- B5服务器内昵称注册,CSGO-B5开放注册
- 2022-2027年中国OLED行业市场调研及未来发展趋势预测报告
- 企业网络安全最常遇到的安全问题是什么,主要面临哪些威胁?
- 信息传输技术主要是指计算机技术和网络技术,信息传输技术主要是指什么
- mysql导入的数据放在那个文件夹下_mysql数据库文件导入
- 如何在Word中快速制作组织结构图?没想到可以如此简单
- T检验、卡方检验、F检验
- 程序员转行做运营,曾被逼得每天想离职,最后...
- Oracle 10g 的后台进程
- 无线连接网络找不到计算机组,Win10电脑找不到自家Wifi无线网络解决方法 可能是无线信道问题...