Python办公自动化之教你用Python批量识别发票并录入到Excel表格中


Posted in Python onJune 26, 2021

一、场景描述

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

随便打开一张发票

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

二、准备环境

需要用到的库如下:

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

安装的命令如下:

pip install pyocr
pip install cnocr

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

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

需要安装的exe文件:

1. ImageMagick

2. tesseract-OCR

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

三、提取内容

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

读取图片: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的数值是通过多次修改定位而来。大家根据自己的发票内容去定位即可。

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

2.提取名称

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

3.提取纳税人识别号

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

4.提取开票人

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

四、批量识别发票并保存到excel

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

for i in pic_name:
    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")  # 保存结果

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

五、发票验证真伪

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

1.申请百度AI应用

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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.查验

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

结果如下:

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

4.税务局查询发票

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

Python办公自动化之教你用Python批量识别发票并录入到Excel表格中

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

六、小结

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

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

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

批量计算发票金额汇总

根据发票类型批量分类

........

到此这篇关于Python办公自动化之教你用Python批量识别发票并录入到Excel表格中的文章就介绍到这了,更多相关Python识别发票并录入到Excel表格内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的多维空数组赋值方法
Apr 13 Python
python 实现在Excel末尾增加新行
May 02 Python
解决python3 Pycharm上连接数据库时报错的问题
Dec 03 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
python3实现的zip格式压缩文件夹操作示例
Aug 17 Python
pandas数据处理进阶详解
Oct 11 Python
浅谈Python中的字符串
Jun 10 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
Python之字符串的遍历的4种方式
Dec 08 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 #Python
FP-growth算法发现频繁项集——发现频繁项集
能让Python提速超40倍的神器Cython详解
Jun 24 #Python
FP-growth算法发现频繁项集——构建FP树
python ansible自动化运维工具执行流程
关于python中readlines函数的参数hint的相关知识总结
详解Python为什么不用设计模式
You might like
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
使用Apache的rewrite
2021/03/09 Servers
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
两款JS脚本判断手机浏览器类型跳转WAP手机网站
2015/10/16 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
p5.js绘制创意自画像
2019/11/04 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
用实例说明python的*args和**kwargs用法
2013/11/01 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
详解python中的文件与目录操作
2017/07/11 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Django 使用logging打印日志的实例
2018/04/28 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
性能服装:HYLETE
2018/08/14 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
银行求职推荐信范文
2013/11/30 职场文书
经典英文广告词
2014/03/18 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
公司车辆管理制度
2015/08/04 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Mysql 一主多从的部署
2022/05/20 MySQL