python实现批量增值税发票文字识别(ocr),并写入excel表格

您所在的位置:网站首页 ocr文字识别转excel python实现批量增值税发票文字识别(ocr),并写入excel表格

python实现批量增值税发票文字识别(ocr),并写入excel表格

2024-01-20 16:55| 来源: 网络整理| 查看: 265

背景:

今天刷文章,发现有人自己做了个发票ocr,来实现发票文字识别,以解决低效繁琐的手工录入问题,大大的提高了工作效率,但他的ocr似乎还不是很成熟,我就想调用百度api来实现发票文字识别部分,挑选自己想要的东西写入excel表格,花了点时间,但是实现了,分享出来,希望能够帮到有需要的人

先上效果图,设计隐私,已马赛克 在这里插入图片描述写入表格

在这里插入图片描述

准备工作 1.环境配置,你需要有以下四个库 import requests import base64 import os import xlwt

2.你需要在百度智能云注册一个账号,然后在管理控制台新建一个文字识别的应用,这样网站会给到你一个API key和一个Secret Key,有了这俩串字符,我们才能进行下一步操作,获取身份令牌access_token 这是 这是百度智能云的管理控制台

在这里插入图片描述 然后在这里创建应用

在这里插入图片描述 选择文字识别方向,记得勾选增值税发票这一项,默认应该是选上的

在这里插入图片描述 这里就是api key和Secret Key,到时候代码里的这个也要求替换成自己的,获取access_token也需要

然后打开技术文档,里面有一个api文档,教你怎样获取access_token

在这里插入图片描述 获取access_token的代码如下,请把api key 和Secret Key替换成自己的就行

# encoding:utf-8 import requests # 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了,接下来就要把他复制粘贴到代码里,我们的准备工作就完成了

代码里修改一下发票存放地址path、access_token就能用了 代码里面有注释 上代码

# encoding:utf-8 import requests import base64 import os import xlwt ''' 增值税发票识别 ''' # 获取发票正文内容 def get_context(pic): # print('正在获取图片正文内容!') data = {} try: request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice" # 二进制方式打开图片文件 f = open(pic, 'rb') img = base64.b64encode(f.read()) params = {"image":img} # 这里需要替换成自己的access_token access_token = '你的access_token' request_url = request_url + "?access_token=" + access_token headers = {'content-type': 'application/x-www-form-urlencoded'} response = requests.post(request_url, data=params, headers=headers) if response: # print (response.json()) json1 = response.json() data['SellerRegisterNum'] = json1['words_result']['SellerRegisterNum'] data['InvoiceDate'] = json1['words_result']['InvoiceDate'] data['PurchasserName'] = json1['words_result']['PurchaserName'] data['SellerName'] = json1['words_result']['SellerName'] data['AmountInFiguers'] = json1['words_result']['AmountInFiguers'] # print(data['AmountInFiguers']) # print('正文内容获取成功!') return data except Exception as e: print(e) return data # 定义生成图片路径的函数 def pics(path): print('正在生成图片路径') #生成一个空列表用于存放图片路径 pics = [] # 遍历文件夹,找到后缀为jpg和png的文件,整理之后加入列表 for filename in os.listdir(path): if filename.endswith('jpg') or filename.endswith('png'): pic = path + '/' + filename pics.append(pic) print('图片路径生成成功!') return pics # 定义一个获取文件夹内所有文件正文内容的函数,每次返回一个字典,把返回的所有字典存放在一个列表里 def datas(pics): datas = [] for p in pics: data = get_context(p) datas.append(data) return datas # 定义一个写入将数据excel表格的函数 def save(datas): print('正在写入数据!') book = xlwt.Workbook(encoding='utf-8', style_compression=0) sheet = book.add_sheet('增值税发票内容登记', cell_overwrite_ok=True) # 设置表头,这里可以根据自己的需求设置,我这里设置了5个 title = ['开票日期', '纳税人识别号', '购买方名称', '卖方名称', '购买金额'] for i in range(len(title)): sheet.write(0, i, title[i]) for d in range(len(datas)): for j in range(len(title)): sheet.write(d + 1, 0, datas[d]['InvoiceDate']) sheet.write(d + 1, 1, datas[d]['SellerRegisterNum']) sheet.write(d + 1, 2, datas[d]['PurchasserName']) sheet.write(d + 1, 3, datas[d]['SellerName']) sheet.write(d + 1, 4, datas[d]['AmountInFiguers']) print('数据写入成功!') book.save('增值税发票.xls') def main(): print('开始执行!!!') # 这是你发票的存放地址,自行更改 path = 'D:/fapiao' Pics = pics(path) Datas = datas(Pics) save(Datas) print('执行结束!') if __name__ == '__main__': main() 注意:

本项目可以实现后缀名为.jpg和.png的增值税发票的文字识别,并写入excel表格里,如需其他格式,稍作修改也能行

百度智能云返回的字段很丰富,按需取用,这次实战我选用的是五个字段,请大家自行修改使用,都包含在返回的json文件里面

总结一下,修改了path和access_token,就能使用,是不是很方便呢

感谢大家的阅读,我们下次见!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3