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

背景:

今天刷文章,发现有人自己做了个发票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,就能使用,是不是很方便呢

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

实现基于Python发票批量识别并录入到Excel表格,需要以下步骤: 1. 安装OCR库:在Python中,可以使用Tesseract、PyOCROCR库进行文字识别。需要先安装相应的OCR库和语言包。 2. 批量读取发票图片:使用Python中的os库批量读取指定文件夹下的所有发票图片。 3. 图片预处理:对于不同的图片,需要进行不同的预处理,包括二值化、去噪、切割等。 4. 文字识别:使用OCR库对图片进行文字识别,获取发票信息。 5. 将信息写入Excel表格:使用Python中的pandas库将发票信息写入Excel表格。 下面是一个简单的代码示例: ```python import os import pytesseract import cv2 import pandas as pd # 设置OCR库路径 pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe' # 读取发票图片 img_folder = r'C:\invoices' img_files = os.listdir(img_folder) # 定义数据框 data = pd.DataFrame(columns=['Invoice Number', 'Date', 'Amount']) # 循环处理每张图片 for img_file in img_files: # 读取图片 img_path = os.path.join(img_folder, img_file) img = cv2.imread(img_path) # 图片预处理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) opened = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) # 文字识别 text = pytesseract.image_to_string(opened, lang='chi_sim') # 解析发票信息 invoice_number = '' date = '' amount = '' # TODO: 根据实际情况解析发票信息 # 将信息添加到数据框 data = data.append({'Invoice Number': invoice_number, 'Date': date, 'Amount': amount}, ignore_index=True) # 将数据框写入Excel表格 data.to_excel('invoices.xlsx', index=False) ``` 需要注意的是,发票信息的解析需要根据实际情况进行调整,例如需要根据发票的格式进行切割和匹配。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值