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命令,查看…

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进行检测(一些资…

【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…

python time和datetime的常用转换处理

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

第一部分:HTML5

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

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

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

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

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

C#解析JSON详解

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

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码,短视频seo矩阵系统底层框架上支持了从ai视频混剪,视频批量原创产出,云存储批量视频制作,账号矩阵,视频一键分发,站内实现关键词、短视频批量搜索排名,数据统计分类多功能细节深度…

spark Structured报错解决

报错,不想看原因的直接去解决方案试试 Exception in thread "main" java.lang.IllegalArgumentException: Pathname /C:/Users/Administrator/AppData/Local/Temp/1/temporary-611514af-8dc5-4b20-9237-e5f2d21fdf88/metadata from hdfs://master:8020/C…

我的国庆回家之路

文章目录 回家的计划假期的礼物学习新技术与家人团聚遇到的趣事总结 🎉欢迎来到IT陈寒的博客空间~我的国庆回家之路 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:Java学习路线&#x1…

作用域 CSS 回来了

几年前,消失的作用域 CSS,如今它回来了,而且比以前的版本要好得多。 更好的是,W3C规范基本稳定,现在Chrome中已经有一个工作原型。我们只需要社区稍微关注一下,引诱其他浏览器构建它们的实现,并…

【教学类-35-03】学号+姓名+班级(小3班)学号字帖(A4竖版2份)

图片展示: 背景需求: 本周排到小3班,还没有来得及设计小班主题活动书的内容,于是就把小2班的学号字帖微调一下,做一份竖版2份的学号字帖。 让幼儿熟悉自己的学号,让我也熟悉幼儿的名字和学号 材料准备: 描字写&#…