当前位置: 首页 > news >正文

Python实现发票信息识别

一、安装所需要的python库

pip3 install fitz -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install paddlepaddle -i https://mirror.baidu.com/pypi/simple

二、所需提取的内容

发票号码
开票日期
销售方名称
销售方纳税人识别号
金额

import fitz
from paddleocr import PaddleOCR
from openpyxl import load_workbookpdf = fitz.open('test.pdf')
page = pdf.load_page(0)  # 获取第0页
# 提高分辨率
pix = page.get_pixmap()
zoom_x = 8
zoom_y = 8
mat = fitz.Matrix(zoom_x, zoom_y)
pix = page.get_pixmap(matrix=mat, alpha=False)
pix.save('temp.png')# for i in range(pdf.page_count):
#     page = pdf.load_page(i)  # 获取第i页
#     pix = page.get_pixmap()
#     zoom_x = 8
#     zoom_y = 8
#     mat = fitz.Matrix(zoom_x, zoom_y)
#     pix = page.get_pixmap(matrix=mat, alpha=False)
#     pix.save('temp.png')ocr = PaddleOCR(use_angle_cls = True, use_gpu = False, lang='ch')
res = ocr.ocr('temp.png', cls=True)
invoice_dic = {}
for r in res[0]:text = r[1][0]if text.startswith('发票号码:'):invoice_dic.update({'number': text[5:]})print(f"number:{text[5:]}")if text.startswith('开票日期:'):invoice_dic.update({'date': text[5:]})print(f"date:{text[5:]}")if text.startswith('名称:'):if text.endswith('购买方名称'):continueinvoice_dic.update({'name': text[3:]})print(f"name:{text[3:]}")if text.startswith('统一社会信用代码/纳税人识别号:'):if text.endswith('购买方统一社会信用代码/纳税人识别号'):continueinvoice_dic.update({'id': text[16:]})print(f"id:{text[16:]}")if text.startswith('(小写)¥'):invoice_dic.update({'price': text[6:]})print(f"price:{text[6:]}")

三、写入excel表格

wb = load_workbook('test.xlsx') # 打开一个文件
ws = wb.active
nrow = ws.max_row # 取得行数
append_row = nrow + 1ws.cell(append_row, 1).value = invoice_dic['number']
ws.cell(append_row, 2).value = invoice_dic['date']
ws.cell(append_row, 3).value = invoice_dic['name']
ws.cell(append_row, 4).value = invoice_dic['id']
ws.cell(append_row, 5).value = invoice_dic['price']wb.save('test.xlsx')

欢迎一键三连

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 编译打包自己的云手机(redroid)镜像
  • Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南
  • 掌握Laravel的策略与授权门面:构建安全的Web应用
  • React Native: 构建原生级移动应用的跨平台框架
  • matine组件库踩坑日记 --- react
  • Django ORM中的Q对象
  • 1.3Zygote
  • 【Redis】哨兵(sentinel)
  • 利用AI辅助制作ppt封面
  • 访问 Postman OAuth 2.0 授权的最佳实践
  • git常用命令及git分支
  • 服务器操作集合
  • 【postgresql】锁
  • 【权威发布】2024年互联网技术与信息工程国际会议(ITIEIC 2024)
  • 流媒体服务器(21)—— mediasoup 之媒体流score评分计算(二)
  • cookie和session
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git 使用集
  • IOS评论框不贴底(ios12新bug)
  • Java方法详解
  • js
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • React组件设计模式(一)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 强力优化Rancher k8s中国区的使用体验
  • 深入浅出webpack学习(1)--核心概念
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我的zsh配置, 2019最新方案
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 容器镜像
  • #window11设置系统变量#
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (13):Silverlight 2 数据与通信之WebRequest
  • (ZT)薛涌:谈贫说富
  • (二)测试工具
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (算法)区间调度问题
  • (译) 函数式 JS #1:简介
  • (转)使用VMware vSphere标准交换机设置网络连接
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • . NET自动找可写目录
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .NET中分布式服务
  • @antv/g6 业务场景:流程图
  • @font-face 用字体画图标
  • [ Socket学习 ] 第一章:网络基础知识
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)