IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 成长了,记录一下,增值税发票识别写入excel文件里 -> 正文阅读

[Python知识库]成长了,记录一下,增值税发票识别写入excel文件里

在写博客方面,我有一点点成长了,现在能够把话讲得更简洁了,而且能够让别人复用我代码的难度降低了,这得记录一下,哈哈哈哈

之前写过一篇增值税发票ocr的博客,是我写的这些文章里获赞最多的,哈哈哈,虽然也只有几个赞了,近期有读者问到一些问题,比如access_token怎么获取,我就回过头来看了一下,当初写的确实太糙了,对新手玩家不是太友好,今天把代码封装成类,做成傻瓜版的了,整体逻辑是没有什么变动的,做了一些用户体验的优化,比如说原来需要读者去找三个参数,有的参数还比较难找,现在只要两个参数了,对输出文件也做了优化,做了一下居中对齐,字体设置之类的,总的上手难度降到了较低的水平,也希望能够帮到有需要的伙伴,提升效率是我们共同的追求,加油!!!

我直接上代码了,如果有想看逻辑以及参数获取的小伙伴还是得去看那篇文章:《python实现批量增值税发票文字识别(ocr)

你的代码文件下还需要有个fapiao文件夹,用于存放需要识别的发票

在这里插入图片描述

# encoding:utf-8
import requests
import base64
import os
import xlwt
import datetime

class fapiao_OCR:
    '''
    这是一个增值税发票识别的类,
    在代码同一文件夹下新建一个文件夹fapiao,把需要识别的发票放在这个文件夹下,
    用户只需提供AK和SK就能调用了,
    '''

    def __init__(self,AK,SK):
        self.AK = AK
        self.SK = SK

    # 获取访问令牌
    def get_access_token(self):
        try:
            # client_id 为官网获取的AK, client_secret 为官网获取的SK
            host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + self.AK + '&client_secret=' + self.SK
            response = requests.get(host)
            if response:
                return response.json()['access_token']
        except Exception as e:
            print(e)

    # 获取发票正文内容
    def get_context(self,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 = self.get_access_token()
            # access_token = '24.18919bfddfe2e9eaafa5adafbc009fdd.2592000.1652961349.282335-24520345'
            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(self,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(self,pics):
        datas = []
        for p in pics:
            data = self.get_context(p)
            datas.append(data)
        return datas

    # 定义一个写入将数据excel表格的函数
    def save(self,datas):
        print('正在写入数据!')
        book = xlwt.Workbook(encoding='utf-8', style_compression=0)
        sheet = book.add_sheet('增值税发票内容登记', cell_overwrite_ok=True)
        # 创建样式对象,初始化样式
        style = xlwt.XFStyle()
        alignment = xlwt.Alignment()
        # 设置水平居中对齐
        alignment.horz = 2
        # 为样式创建字体
        font = xlwt.Font()
        # 设置字体
        font.name = 'Calibri'
        # 字体大小
        font.height = 200
        style.font = font
        style.alignment = alignment
        title = ['开票日期', '纳税人识别号', '购买方名称', '卖方名称', '购买金额']
        for i in range(len(title)):
            sheet.col(i).width = 7777
            sheet.write(0, i, title[i],style)
        for d in range(len(datas)):
            for j in range(5):
                sheet.write(d + 1, 0, datas[d]['InvoiceDate'],style)
                sheet.write(d + 1, 1, datas[d]['SellerRegisterNum'],style)
                sheet.write(d + 1, 2, datas[d]['PurchasserName'],style)
                sheet.write(d + 1, 3, datas[d]['SellerName'],style)
                sheet.write(d + 1, 4, datas[d]['AmountInFiguers'],style)
        print('数据写入成功!')
        now = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
        book.save(now+'增值税发票.xls')

    def main(self):
        print('开始执行!!!')
        # 这是你发票的存放地址,自行更改
        path = './fapiao'
        Pics = self.pics(path)
        Datas = self.datas(Pics)
        self.save(Datas)
        print('执行结束!')

if __name__ == '__main__':
    # 请输入你的API Key
    AK = ''
    # 请输入你的Secret Key
    SK = ''
    fapiao = fapiao_OCR(AK,SK)
    fapiao.main()

使用这段代码的门槛已经降低到只需要你会安装第三方库和会打开网页注册账号就行了,当然你还得会运行python代码哦!!!

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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:32:27  更:2022-04-22 18:36:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:45:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码