python: 用百度API读取增值税发票信息

# encoding: utf-8
# 版权所有 2023 涂聚文有限公司
# 许可信息查看:
# 描述:
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 311
# Datetime  : 2023/9/30 6:56
# User      : geovindu
# Product   : PyCharm
# Project   : pythonTkinterDemo
# File      : BaiduOCRAPI.py
# explain   : 学习import os
import base64
import requests
import pandas as pd
import jsonclass BaiduOCR(object):"""利用百度API读取发票信息(pdf,image文件)"""AppID="40226401"APIKey="geovindu"SecretKey="geovindu"def __init__(self):""""""self.AppID="40226401"self.APIKey="geovindu"  #self.SecretKey="geovindu"  #def getAccessToken(self):""":param APIKey::param SecretKey::return:"""'''host = f"https://aip.baidubce.com/oauth/2.0/token?client_secret={self.SecretKey}&grant_type=client_credentials&client_id={self.APIKey}"response = requests.get(host)return response.json()['access_token']'''url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials", "client_id": self.APIKey, "client_secret": self.SecretKey}return str(requests.post(url, params=params).json().get("access_token"))def getContent(self,accessToken, pdfFile):""":param accessToken:param pdfFile::return:"""#headers = {'content-type': 'application/x-www-form-urlencoded'}#request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={accessToken}"f = open(pdfFile, 'rb')pdf = base64.b64encode(f.read())print(pdf)print(accessToken)request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice"params = {"pdf_file": pdf}access_token =accessToken # '[调用鉴权接口获取的token]'request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:print(response.json())#print(pdf)#params = {"pdf_file": pdf}#response = requests.post(request_url, data=params, headers=headers)#print(response.json())return response.json()def getContentPng(self,accessToken, pngFile):""":param accessToken:param pngFile::return:"""#headers = {'content-type': 'application/x-www-form-urlencoded'}#request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={accessToken}"f = open(pngFile, 'rb')pdf = base64.b64encode(f.read())print(pdf)print(accessToken)request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice"params = {"image": pdf}access_token =accessToken # '[调用鉴权接口获取的token]'request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:print(response.json())#print(pdf)#params = {"pdf_file": pdf}#response = requests.post(request_url, data=params, headers=headers)#print(response.json())return response.json()def getUsefulInfo(self,content, pdf_name):""":param content:param pdf_name::return:"""jsonstr = contentprint("Json",jsonstr)words_result = jsonstr['words_result']info = {'发票文件名': pdf_name,'发票号码': str(words_result['InvoiceNum']),'开票日期': words_result['InvoiceDate'],'货物名称': words_result['CommodityName'][0]['word'],'未税金额': words_result['CommodityAmount'][0]['word'],'货物税率': words_result['CommodityTaxRate'][0]['word'],'货物税额': words_result['CommodityTax'][0]['word'],'合计金额': words_result['TotalAmount'],'合计税额': words_result['TotalTax'],'价税合计(小写)': words_result['AmountInFiguers'],'价税合计(大写)': words_result['AmountInWords'],'销售方名称': words_result['SellerName'],'销售方纳税人识别号': words_result['SellerRegisterNum'],'销售方银行及账户': words_result['SellerBank'],'销售方地址及电话': words_result['SellerAddress']}return info

调用:用京东多张发票测试成功

    ocr=Common.BaiduOCRAPI.BaiduOCR()pdfFilelist = os.listdir("invoice/")infolist = []for pdfFile in pdfFilelist:if pdfFile.split(".")[-1] == 'pdf':pdfName = pdfFile.split(".")[:-1]print(pdfFile)access_token =ocr.getAccessToken()content = ocr.getContent(access_token, "invoice/" + pdfFile)info = ocr.getUsefulInfo(content, pdfName)infolist.append(info)df = pd.DataFrame(infolist)print(df)#df.to_excel('增值税发票信息统计.xlsx', sheet_name="geovindu",index=False)with pd.ExcelWriter('geovindu.xlsx') as writer:  #, mode='a' 附加df.to_excel(writer, sheet_name='geovindu', index=False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记 - 基于强化学习的贪吃蛇玩游戏

一、关于深度强化学习 如果不了解深度强化学习的一般流程的可以考虑看一下下面的链接。因为这里的示例因为在PyTorch 之上实现深度强化学习算法。 机器学习笔记 - Deep Q-Learning算法概览深度Q学习是一种强化学习算法,它使用深度神经网络来逼近Q函数,用于确定在给定状态下采…

架构设计第七讲:数据巡检系统之daily线上表结构自动化比对

架构设计第七讲:数据巡检系统之daily&线上表结构自动化比对 本文是架构设计第七讲,数据巡检系统之daily&线上表结构自动化比对,避免正式环境与测试环境数据库/表、列结构不一致带来问题。 文章目录 架构设计第七讲:数据巡…

193419-86-2,用于蛋白电泳检测的Fluorescein o-acrylate

产品简介:Fluorescein o-acrylate 中FITC具有荧光素衍生物的普遍特性,FITC也经常被用于蛋白电泳检测和荧光能量激发转移测试。 荧光染料及其荧光标记技术一直是生物领域常用的产品和技术,荧光物质是指具有共轭双键体系化学结构的化合物&…

LabVIEW开发实时自动化多物镜云计算全玻片成像装置

LabVIEW开发实时自动化多物镜云计算全玻片成像装置 数字病理学领域正在迅速发展,这主要是由于计算机处理能力、数据传输速度、软件创新和云存储解决方案方面的技术进步。因此,病理科室不仅将数字成像用于图像存档等简单任务,还用于远程病理学…

monkeyrunner录制脚本和回放

Monkeyrunner关于使用录制、生成脚本、编译脚本及执行脚本。 首先在计算机上下载和安装SDK、python 2.将recorder.py文件放置SDK文件夹里tools文件夹下 3.USB连接手机,手机端,开启USB调试,并在计算机DOS中输入adb devices命令,查看…

K8S-CNI

CNI的设计思想即为:Kubernetes在启动Pod的pause容器之后,直接调用CNI网络插件,从而实现为Pod内部应用容器月在的Network Namespace配置符合预期的网络信息。 这里面需要特别关注两个方面:Container必须有自己的网络命名空间的环境,也就是end…

go mod tidy 报错:x509: certificate signed by unknown authority 最佳实践

最近在docker中运行了一个ubuntu20的系统,在上面运行golang程序,使用go mod tidy后报错: tls: failed to verify certificate: x509: certificate signed by unknown authority 如: go: finding module for package google.gol…

Java:使用 Graphics2D 类来绘制图像

目录 过程介绍创建一个 BufferedImage 对象创建一个 Graphics2D 对象绘制字符和干扰线将生成的图像保存到文件 示例代码 过程介绍 创建一个 BufferedImage 对象 首先创建一个 BufferedImage 对象来表示图像 创建一个 Graphics2D 对象 然后使用 createGraphics() 方法创建一…

XXE 漏洞及案例实战

文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用(触发漏洞地址)2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 dat…

网络爬虫--伪装浏览器

从用户请求的Headers反反爬 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来作为反爬取的一种策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资…

Go语言strings标准库

strings包 参考资料 常用函数 函数功能备注EqualFold(s, t string) bool判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。HasPrefix(s, prefix string) bool判断s是否有前缀字符串prefixHasSuffix(s, suffix strin…

【Leetcode】 501. 二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记:转载…

K8S:pod控制器详解

文章目录 一.pod控制器的基础1.pod概念及分类2.什么是Pod控制器及其功用3.pod控制器有多种类型(1)ReplicaSet(2)Deployment(3)DaemonSet(4)Statef…

css调整字体间距 以及让倾斜字体

调整字体间距 .element {letter-spacing: 2px; /* 调整为适当的值 */ }倾斜字体1 .element {font-style: italic; }请注意&#xff0c;不是所有的字体都有斜体样式可用。如果字体本身没有斜体版本&#xff0c;则可能无法实现完全的斜体效果。 倾斜字体2 <span class"…

python time和datetime的常用转换处理

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&#xff0c;直接在文末名片自取就可 一、time 1、…

第一部分:HTML5

目录 一&#xff1a;网页 1.1&#xff1a;什么是网页&#xff1f; 1.2&#xff1a;什么是HTML&#xff1f; 1.3&#xff1a;网页的形成 二&#xff1a;常用浏览器 三&#xff1a;Web标准 3.1&#xff1a;为什么需要Web标准&#xff1f; 3.2&#xff1a;Web标准的构成 四&a…

自动群发节日祝福,1 行 Python 代码搞定,小白可用

想了解更多精彩内容&#xff0c;快来关注程序员晚枫 大家节日快乐&#xff0c;这里是程序员晚枫&#xff0c;小红薯也叫这个名字。 今天给大家分享一个实用功能&#xff1a;自动群发祝福消息。 我相信社会人都体会过&#xff0c;过年过节给别人群发祝福消息的无奈&#xff0…

Cloudflare进阶技巧:缓存利用最大化

1. 引言 cloudflare我想你应该知道是什么&#xff0c;一家真正意义上免费无限量的CDN&#xff0c;至今未曾有哥们喷它的。当然&#xff0c;在国内的速度确实比较一般&#xff0c;不过这也不能怪它。 CDN最大的特色&#xff0c;我想就是它的缓存功能&#xff0c;达到防攻击&am…

C#解析JSON详解

C#解析Json详解 文章目录 C#解析Json详解什么是Json&#xff1f;Json的特点 常用的Json库Json.NET (Newtonsoft.Json)System.Text.Json 实例序列化反序列化 总结 什么是Json&#xff1f; JSON的全称是JavaScript Object Notation&#xff0c;是一种轻量级的数据交换格式&#…