news 2026/7/13 2:44:06

影刀RPA 发票自动识别与信息提取:OCR解放财务双手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA 发票自动识别与信息提取:OCR解放财务双手

影刀RPA 发票自动识别与信息提取:OCR解放财务双手

作者:林焱

财务和行政经常需要从发票图片里提取:发票号码、金额、日期、开票方等信息。手动录入费时费力还容易出错。这篇讲用影刀+OCR自动识别发票信息。

方案对比

方案准确率速度费用
百度OCR API高(专门优化发票)每天500次免费
腾讯OCR API每月1000次免费
paddleocr(离线)较慢免费
pytesseract免费

推荐百度OCR:专门有增值税发票识别接口,字段结构清晰,准确率高。

百度OCR发票识别

importrequestsimportbase64defrecognize_invoice(image_path):"""识别增值税发票"""# 1. 先获取access_tokenapi_key="你的API Key"secret_key="你的Secret Key"token_url=f"https://aip.baidubce.com/oauth/2.0/token"token_params={"grant_type":"client_credentials","client_id":api_key,"client_secret":secret_key}token_resp=requests.post(token_url,data=token_params)access_token=token_resp.json()["access_token"]# 2. 读取图片并Base64编码withopen(image_path,"rb")asf:image_base64=base64.b64encode(f.read()).decode()# 3. 调用发票识别接口ocr_url=f"https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice"ocr_params={"access_token":access_token}ocr_data={"image":image_base64}resp=requests.post(ocr_url,params=ocr_params,data=ocr_data)result=resp.json()words=result.get("words_result",{})return{"发票号码":words.get("InvoiceNum",""),"发票代码":words.get("InvoiceCode",""),"开票日期":words.get("InvoiceDate",""),"金额":words.get("AmountInFiguers",""),"税额":words.get("TaxAmount",""),"价税合计":words.get("TotalAmount",""),"销售方名称":words.get("SellerName",""),"购买方名称":words.get("PurchaserName",""),}

批量处理发票文件夹

importglobimportos invoice_dir="D:/发票/"results=[]forimg_fileinglob.glob(os.path.join(invoice_dir,"*.jpg"))+\ glob.glob(os.path.join(invoice_dir,"*.png"))+\ glob.glob(os.path.join(invoice_dir,"*.pdf")):try:info=recognize_invoice(img_file)info["文件名"]=os.path.basename(img_file)results.append(info)print(f"✓{img_file}:{info['发票号码']}¥{info['价税合计']}")exceptExceptionase:print(f"✗{img_file}:{e}")importtime time.sleep(0.5)# API频率限制# 写入Excelimportopenpyxl wb=openpyxl.Workbook()ws=wb.active headers=["文件名","发票号码","发票代码","开票日期","金额","税额","价税合计","销售方名称","购买方名称"]ws.append(headers)forrinresults:ws.append([r.get(h,"")forhinheaders])wb.save("发票识别结果.xlsx")

踩坑实录

坑1:图片质量影响识别率

手机拍的发票照片如果有反光、模糊、倾斜,识别率会大幅下降。建议:

  • 用扫描仪或高拍仪拍摄
  • 图片分辨率不小于1024×768
  • 尽量拍正,不要歪斜

坑2:Token过期

百度的access_token有效期30天。影刀长期运行时,token会过期。需要每次调用前检查或自动刷新:

importtime token_cache={"token":None,"expires_at":0}defget_token():iftime.time()<token_cache["expires_at"]:returntoken_cache["token"]# 重新获取resp=requests.post(token_url,data=token_params)data=resp.json()token_cache["token"]=data["access_token"]token_cache["expires_at"]=time.time()+data["expires_in"]-300returntoken_cache["token"]

坑3:发票类型多样

百度OCR支持增值税专用发票、普通发票、电子发票等多种类型。但卷式发票、定额发票、出租车票等不支持。这些需要用通用OCR接口 + 自定义解析。

坑4:PDF发票要先转图片

百度OCR接口支持直接传PDF,但有大小限制(10MB)。超过大小的PDF需要先用Python的pdf2image库转为图片再识别。

离线索尼方案:paddleocr

如果数据敏感不想上传到百度(合规考虑),可以用paddleocr离线识别:

# pip install paddleocrfrompaddleocrimportPaddleOCR ocr=PaddleOCR(use_angle_cls=True,lang='ch')result=ocr.ocr(image_path,cls=True)# 提取所有文字texts=[]forlineinresult[0]:texts.append(line[1][0])# line[1][0]是识别出的文字# 手动解析:找关键字"发票号码"、"金额"等

准确率不如百度,但完全离线、免费、数据不出本地。

写在最后

发票识别是每个财务人员的刚需。影刀+百度OCR,把原来人工几分钟一张的工作压缩到秒级,而且永远不会输错发票号码。一次搭好,终身受益。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 2:40:50

Java开发者如何转型AI应用开发:从RAG到Agent的实战路径

1. 先搞清楚这个问题到底在问什么很多人看到“Agent比Java更好就业吗”这个标题&#xff0c;第一反应是“我要不要放弃Java去学Agent”。这个理解其实跑偏了。Agent不是要替代Java&#xff0c;而是Java开发者需要掌握的新能力。就像十年前Java开发者需要学会用Redis、消息队列一…

作者头像 李华
网站建设 2026/7/13 2:40:17

极简弹窗封装,基于 @kit.ArkUI 封装通用工具类

在日常鸿蒙开发中&#xff0c;弹窗是最高频的交互组件之一&#xff1a;操作反馈用 Toast、二次确认用对话框、加载状态用等待框、多选操作用底部菜单。原生 kit.ArkUI 虽然提供了完整的弹窗能力&#xff0c;但每次调用都要重复写参数、统一样式麻烦&#xff0c;页面多了之后维护…

作者头像 李华
网站建设 2026/7/13 2:38:33

5G NR 与 LTE 中的 MU-MIMO 演进:从 TM5/TM8 到 Massive MIMO 的 3 大关键技术突破

5G NR与LTE中的MU-MIMO技术演进&#xff1a;从TM5/TM8到Massive MIMO的三大突破当我们在拥挤的体育馆里流畅地观看4K直播&#xff0c;或在高峰时段的地铁上毫无延迟地参加视频会议时&#xff0c;背后是一项被称为MU-MIMO的无线通信技术在默默支撑。这项技术让基站能够像交响乐指…

作者头像 李华
网站建设 2026/7/13 2:37:51

RS485总线故障排查手册:从±200mV阈值到TVS保护的5个关键点实测

RS485总线故障排查实战指南&#xff1a;从电压阈值到保护电路的5大关键点在工业自动化、楼宇控制和远程监测等场景中&#xff0c;RS485总线因其出色的抗干扰能力和长距离传输特性&#xff0c;成为工程师首选的通信解决方案。然而&#xff0c;当通信中断、数据丢包或设备损坏等问…

作者头像 李华
网站建设 2026/7/13 2:36:42

运行时垃圾回收机制、列式拓扑重组与确定性因果断言:基于 Python 内存引用计数、Pandas 块管理器与 Pytest 验证沙箱的全栈数据流转治理

摘要在现代分布式计算与离线特征提纯体系中&#xff0c;单机节点对半结构化文本向高阶同构矩阵的规约效率&#xff0c;直接决定了整个数据中台的吞吐上限。Python 作为动态解释型语言&#xff0c;其原生的引用计数与分代垃圾回收机制&#xff08;Garbage Collection&#xff09…

作者头像 李华
网站建设 2026/7/13 2:36:38

每日一题————2026-7-12 购买奖品

首先呢&#xff0c;先揭秘上一次的思考题答案&#xff1a;2024CSP-J-T2-地图探险&#xff08;explore&#xff09;#include<bits/stdc.h>#include <algorithm>using namespace std;using LL long long; char g[1010][1010]; bool f[1010][1010]; void solve(){LL …

作者头像 李华