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

📅 2026/7/13 2:44:10
影刀RPA 发票自动识别与信息提取:OCR解放财务双手
影刀RPA 发票自动识别与信息提取OCR解放财务双手作者林焱财务和行政经常需要从发票图片里提取发票号码、金额、日期、开票方等信息。手动录入费时费力还容易出错。这篇讲用影刀OCR自动识别发票信息。方案对比方案准确率速度费用百度OCR API高专门优化发票快每天500次免费腾讯OCR API高快每月1000次免费paddleocr离线中较慢免费pytesseract低慢免费推荐百度OCR专门有增值税发票识别接口字段结构清晰准确率高。百度OCR发票识别importrequestsimportbase64defrecognize_invoice(image_path):识别增值税发票# 1. 先获取access_tokenapi_key你的API Keysecret_key你的Secret Keytoken_urlfhttps://aip.baidubce.com/oauth/2.0/tokentoken_params{grant_type:client_credentials,client_id:api_key,client_secret:secret_key}token_resprequests.post(token_url,datatoken_params)access_tokentoken_resp.json()[access_token]# 2. 读取图片并Base64编码withopen(image_path,rb)asf:image_base64base64.b64encode(f.read()).decode()# 3. 调用发票识别接口ocr_urlfhttps://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoiceocr_params{access_token:access_token}ocr_data{image:image_base64}resprequests.post(ocr_url,paramsocr_params,dataocr_data)resultresp.json()wordsresult.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_dirD:/发票/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:inforecognize_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 wbopenpyxl.Workbook()wswb.active headers[文件名,发票号码,发票代码,开票日期,金额,税额,价税合计,销售方名称,购买方名称]ws.append(headers)forrinresults:ws.append([r.get(h,)forhinheaders])wb.save(发票识别结果.xlsx)踩坑实录坑1图片质量影响识别率手机拍的发票照片如果有反光、模糊、倾斜识别率会大幅下降。建议用扫描仪或高拍仪拍摄图片分辨率不小于1024×768尽量拍正不要歪斜坑2Token过期百度的access_token有效期30天。影刀长期运行时token会过期。需要每次调用前检查或自动刷新importtime token_cache{token:None,expires_at:0}defget_token():iftime.time()token_cache[expires_at]:returntoken_cache[token]# 重新获取resprequests.post(token_url,datatoken_params)dataresp.json()token_cache[token]data[access_token]token_cache[expires_at]time.time()data[expires_in]-300returntoken_cache[token]坑3发票类型多样百度OCR支持增值税专用发票、普通发票、电子发票等多种类型。但卷式发票、定额发票、出租车票等不支持。这些需要用通用OCR接口 自定义解析。坑4PDF发票要先转图片百度OCR接口支持直接传PDF但有大小限制10MB。超过大小的PDF需要先用Python的pdf2image库转为图片再识别。离线索尼方案paddleocr如果数据敏感不想上传到百度合规考虑可以用paddleocr离线识别# pip install paddleocrfrompaddleocrimportPaddleOCR ocrPaddleOCR(use_angle_clsTrue,langch)resultocr.ocr(image_path,clsTrue)# 提取所有文字texts[]forlineinresult[0]:texts.append(line[1][0])# line[1][0]是识别出的文字# 手动解析找关键字发票号码、金额等准确率不如百度但完全离线、免费、数据不出本地。写在最后发票识别是每个财务人员的刚需。影刀百度OCR把原来人工几分钟一张的工作压缩到秒级而且永远不会输错发票号码。一次搭好终身受益。