辰哥今天来分享一篇办公干货文章:用Python批量识别发票并录入到Excel表格。对于财务专业等学生或者公司财务人员来说,将报账发票等汇总到excel简直就是一个折磨

尤其是到年底的时候,公司的财务人员面对一大堆的发票简直就是苦不堪言。正好我们学会了Python,我们应该将Python的优势发挥起来。$#

01.场景描述

这里有以四张发票为例(辰哥网上搜的),将发票图片放到pic文件夹下。

随便打开一张发票

提取目标:金额名称纳税人识别号开票人

最后将每一张发票的这四个内容保存到excel中:

02.准备环境

需要用到的库如下:

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

安装的命令如下:

pip install pyocr
pip install cnocr

发票中含有中文内容,我们需要对图片中的中文进行识别,那么 cnocr 是一个不错的选择。

提示:安装好上面的库之外,还需要安装额外的exe文件,不然会出现下面这种错误

需要安装的exe文件:

1. ImageMagick

2. tesseract-OCR

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

03.提取内容

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

读取图片:pic/pic1.jpg

tool = pyocr.get_available_tools()[0]
img_url = "pic/pic1.jpg"
with open(img_url, 'rb') as f:a = f.read()
new_img = PI.open(io.BytesIO(a))

1.提取金额

需要截取到发票中金额的位置

## 金额
left = 741
top = 420
right = 850
bottom = 445
image_text1 = new_img.crop((left, top, right, bottom))
#展示图片
image_text1.show()

这里的left、top、right、bottom的数值是通过多次修改定位而来。大家根据自己的发票内容去定位即可。

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

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

2.提取名称

left = 155
top = 450
right = 450
bottom = 470
image_obj2 = new_img.crop((left, top, right, bottom))
image_obj2.show()

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

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

3.提取纳税人识别号

#纳税人识别号
left = 155
top = 470
right = 450
bottom = 490
image_text3 = new_img.crop((left, top, right, bottom))
#展示图片
image_text3.show()

txt3 = tool.image_to_string(image_text3)
print(txt3)

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

4.提取开票人

left = 528
top = 550
right = 670
bottom = 600
image_obj4 = new_img.crop((left, top, right, bottom))
image_obj4.show()

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

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

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

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

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

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

filePath = 'pic'
pic_name = []
for i,j,name in os.walk(filePath):pic_name = name
for i in pic_name:print(i)

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

for i in pic_name:img_url = filePath+"/"+iwith open(img_url, '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))count = count + 1
outwb.save("发票汇总-李运辰.xls")  # 保存结果

最后保存为:发票汇总-李运辰.xls,其结果如下:

05.发票验证真伪

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

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

1.申请百度AI应用

2.获取token

# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:print(response.json()['access_token']

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

3.查验

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

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

结果如下:

感觉这个结果查询不是很好(不详细)。下面还可以去税务局查询

4.税务局查询发票

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

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

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

06.小结

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

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

最后想说的是,其实本文的案例可以应用再其他方面,例如

  • 批量计算发票金额汇总

  • 根据发票类型批量分类

办公利器!用Python批量识别发票并录入到Excel表格相关推荐

  1. 自动化办公神器!用Python批量识别发票并录入到Excel表格!可以讨财务女神开心了!

    故事的开始 今天去财务拿上个月的工资条核对!发现女神一脸闷闷不乐!好像天要塌下来一样!我对完工资就问:女神,你咋不开心,不是马上就要发工资了嘛!女神说:老板刚给我派了个任务,让我把上个月这个月的发票都 ...

  2. Python批量识别发票信息并自动填写到网上

    一.问题缘起 平时工作中会接触到很多发票,报销前需要把发票的各种信息包括:发票号码.发票代码.校验码.金额等信息录入到报账系统中.如果手机一个个复制粘贴,非常麻烦,而且容易出错,如果采用Python的 ...

  3. 利用Python批量识别电子账单数据

    文章目录 一.前言 二.调用Baidu aip识别 三.批量识别电子账单 一.前言 有一定数量类似如下截图所示的账单,利用 Python 批量识别电子账单数据,并将数据保存到Excel. 百度智能云接 ...

  4. python账单查询软件_利用Python批量识别电子账单数据的方法

    这篇文章主要介绍了利用Python批量识别电子账单数据的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一.前言 有一定数量类似如下截图所示的账单,利用 ...

  5. Python批量识别图片中的文字并保存到txt文档中

    Python OCR工具pytesseract,之前是惠普的产品,被Google收了之后就给开源了. 1.需要下载并安装Google Tesseract,下载地址看图片上有,要下载4.0.0版本的 2 ...

  6. python生成excel表格-Python实现将数据库一键导出为Excel表格的实例

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python ...

  7. 产品狗的Python之路(2):excel表格拆分桌面小程序

    产品狗的Python之路(2):excel表格拆分程序 使用tkinter将excel表格拆分脚本制作了GUI,并使用pyinstaller封装成了桌面程序 import tkinter as tk ...

  8. Python批量识别PDF文件格式发票信息并生成Excel表格

    最近有同学提问说,能不能讲一讲识别发票图片并整理数据到Excel里的方法.今天我们就针对这样的实际需求,分享一个基于 PDF 的 Python 办公自动化的解决案例. 先来看看需求. 需求描述 在某个 ...

  9. Python自动化办公:批量识别图片文字并存为Excel

    来源:菜J学Python 一.背景 也许你还记得,前不久复旦大学一博士生写了130行Python代码,批量识别核酸截图内容的故事.当时还被人民日报公众号报道出来,夸赞用所学贡献青春力量! 其实,批量文 ...

最新文章

  1. TensorFlow学习(四):优化器Optimizer
  2. MyBatis 3 自动生成 主键 针对不同的数据库(oracle/sqlserver/mysql)
  3. linux 镜像自动安装,制作能自动安装的CentOS镜像文件
  4. flink sql client讀取kafka數據的timestamp(DDL方式)
  5. 判断是否包含大写字符_Python最常用的数据类型中字符串基础函数使用知识点讲解...
  6. 如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析
  7. Leetcode算法题(C语言)11--有效的数独
  8. 基于json-lib.jar包Json实例程序
  9. html5片转为base64,base64和图片的互转(HTML5的File实现)
  10. 【转】子弹短信内部技术分享:Redis
  11. IOS之UI--自定义按钮实现代理监听点击事件
  12. SiteMesh3使用介绍及配置方法
  13. iOS 颜色渐变圆环
  14. 服务器上怎么强制删除文件夹,Windows10系统强制删除文件的方法
  15. 论文阅读笔记:内卷involution《Involution: Inverting the Inherence of Convolution for Visual Recognition》
  16. Mac使用Excel卡顿的提升办法之一
  17. 【最大公约数】欧几里得算法
  18. 徐荣谦《养好脾和肺 宝宝不积食不咳嗽长大个》【00】 序
  19. AI为什么救不了“想上天”的猪?
  20. 最简单实用的网易云爬虫!cloudmusic库带你起飞,歌曲、用户、评论信手捏来

热门文章

  1. 采购系统是如何管理供应商的?
  2. 电子商务时代的网络营销
  3. 智能手机照片被误删如何恢复
  4. 基于Android的万豪酒店APP设计与实现
  5. Ubuntu 22.04 LTS (Jammy Jellyfish) Daily Build安装镜像PC ARM Raspberry Pi
  6. 他人——2015实习招聘经验
  7. 开除AI伦理学家,谷歌如何从“不作恶”到“不宽容”?
  8. ybt1058 求一元二次方程
  9. revit服务器维护,Revit server是什么?Revit Server 管理有问题,谁来解决、怎么解决?...
  10. 输入神经网络的数据类型要求,神经网络数据格式