news 2026/5/8 21:50:36

发票识别OCR API接入详解:自动提取发票全字段并接入财务系统(附Python/JS/PHP示例)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
发票识别OCR API接入详解:自动提取发票全字段并接入财务系统(附Python/JS/PHP示例)

发票识别OCR API接入详解:自动提取发票全字段并接入财务系统(附Python/JS/PHP示例)

企业财务场景中有一个长期存在的低效问题:发票信息录入全靠人工——每天处理几十到上百张发票,逐张录入金额、日期、税号等信息,费时费力还容易出错。发票OCR识别API的出现,将这一手工工作在3秒内自动化完成。

本文将以石榴智能发票识别OCR API为例,带你在几分钟内实现发票全字段自动提取,并演示如何将识别结果直接接入财务系统。


一、企业发票处理的痛点与OCR解决方案

1.1 当前企业发票处理的常见困境

  • 人工录入效率低:财务人员每天需要处理大量纸质发票和电子发票,逐张录入信息耗时耗力

  • 错误率高:手工抄写容易出现数字错位、填写遗漏等错误,后续纠错成本高昂

  • 版式多样适应困难:增值税专用发票、普通发票、电子发票等不同版式,字段位置差异大

  • 票据归档不便:纸质发票难以检索,电子发票格式不统一

1.2 发票OCR识别的完整处理流程

一张发票从图片到结构化数据,经过以下技术流程:首先进行图像预处理(去噪、纠偏、增强亮度),然后通过深度学习模型定位发票关键字段区域,接着进行字符识别与语义校验,最后以JSON格式输出识别结果。

主流发票OCR API通常能识别以下核心字段:发票代码、发票号码、开票日期、购买方名称、销售方名称、纳税人识别号(双方)、金额(含税/不含税)、税额、价税合计、开户行及账号、开票人、复核人、收款人以及商品明细清单等数十个字段。


二、主流发票识别OCR API横评

2026年3月,有开发者对国内主流OCR服务商进行了独立测评,以下是核心数据:

对比维度石榴智能腾讯云百度OCR阿里云
电子发票PDF准确率≥99%99.5%98.8%98.9%
清晰拍照票准确率≥98%98.3%97.5%97.8%
模糊拍照票准确率≥98%95.2%93.8%94.5%
免费额度注册即送免费测试,支持在线免费测试1000次/月500次/天200次/月
单价(万元次内)¥0.015/次¥0.035/次¥0.04/次¥0.0825/次
批量并发支持✅ 5 QPS基础需额外配置按天购买QPS需选购资源包
发票版式覆盖率专票/普票/电子票/卷票/铁路,航空运输行程单/机打发票/定额发票等专票/普票/电子票专票/普票/电子票专票/普票/电子票

上表中腾讯云、百度、阿里云的准确率数据来自独立第三方测评。

关键解读

  • 价格维度:石榴智能定价为¥0.015/次,仅为百度的30%、阿里云的14.5%,中高用量场景下一年可节省数千至数万元成本。

  • 准确率维度:石榴智能在模糊照片等偏低质量场景下准确率较高,核心得益于内置的图像预处理能力。

  • 免费额度:石榴智能新注册用户赠送免费额度,可直接用于测试接入和效果验证;并且支持免费在线测试。

三、石榴智能发票识别OCR核心能力

石榴智能发票识别OCR基于深度学习算法,针对增值税发票的复杂版式进行了专项训练,主要特点如下:

  • 识别字段齐全:支持数十个字段的结构化输出,包括发票名称、金额、税额、价税合计、发票代码、发票号码、开票日期、密码区、纳税人识别号、地址电话、开户行及账号、开票人、复核人、收款人、备注等

  • 支持多种发票类型:增值税专用发票、普通发票、电子发票、卷式发票等全覆盖

  • 高准确率:基于海量真实发票样本训练,复杂条件下表现稳定

  • 内置图像预处理:自动校正倾斜、去模糊、归一化亮度,无需额外预处理

  • 简单接入:提供Python、Java、Go、PHP、JS等多语言接入示例,3行代码即可完成调用

返回数据示例

json

{ "success": true, "data": { "发票类型": "浙江增值税电子普通发票", "发票号码": "12345678", "发票代码": "032001900111", "开票日期": "2025-03-15", "购买方名称": "某某科技有限公司", "购买方纳税人识别号": "91110108MA00XXXXX", "销售方名称": "某某商贸有限公司", "销售方纳税人识别号": "91110105MA01YYYYY", "价税合计": "894561.00", "合计金额": "792000.00", "合计税额": "102561.00", "开票人": "张三", "商品明细": [ {"名称": "办公设备", "规格型号": "XX-1000", "单位": "台", "数量": 10, "单价": "5000.00", "金额": "50000.00", "税率": "13%", "税额": "6500.00"} ] } }

💡 针对不同格式的发票类型,石榴智能均返回一致的字段键名(如“发票号码”“价税合计”等),无论用户上传的是专票还是普票,后端系统都能用同一套代码直接入库——这一点对于财务系统的对接非常重要。


四、发票识别API接入实战(Python / JS / PHP)

4.1 准备工作

  1. 访问石榴智能API市场注册账号

  2. 登录后在控制台找到APPCODE(API调用凭证)

  3. 准备一张待识别的发票图片(支持任何图片格式以及PDF格式,尺寸不超过20MB)

提示:支持免费在线测试;注册后自动获赠免费调用额度,可直接用于测试,零成本评估识别效果。

4.2 Python 接入代码

# ============================================================================== # API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/invoice-ocr # 支持免费在线体验 # API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等) # ============================================================================== # -*- coding: utf-8 -*- import requests import base64 import json # 请求接口 URL = "https://ocr-api.shiliuai.com/api/invoice_ocr/v1" # 图片转base64 def get_base64(file_path): with open(file_path, 'rb') as f: data = f.read() b64 = base64.b64encode(data).decode('utf8') return b64 def demo(appcode, file_path): # 请求头 headers = { 'Authorization': 'APPCODE %s' % appcode, 'Content-Type': 'application/json' } # 请求体 b64 = get_base64(file_path) data = {"file_base64": b64} # 请求 response = requests.post(url=URL, headers=headers, json=data) content = json.loads(response.content) print(content) if __name__=="__main__": appcode = "你的APPCODE" file_path = "本地文件路径" demo(appcode, file_path)

4.3 JavaScript 接入代码(Node.js)

// ============================================================================== // API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/invoice-ocr // 支持免费在线体验 // API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等) // ============================================================================== // 需 Node.js 18+(内置 fetch) const fs = require('fs'); const apiUrl = 'https://ocr-api.shiliuai.com/api/invoice_ocr/v1'; const appcode = '你的APPCODE'; const filePath = '本地文件路径'; async function main() { const fileBase64 = fs.readFileSync(filePath).toString('base64'); const res = await fetch(apiUrl, { method: 'POST', headers: { Authorization: 'APPCODE ' + appcode, 'Content-Type': 'application/json' }, body: JSON.stringify({ file_base64: fileBase64 }) }); const text = await res.text(); if (!res.ok) { console.error('Http code:', res.status, text); return; } console.log(JSON.stringify(JSON.parse(text), null, 2)); } main().catch(console.error);

4.4 PHP 接入代码

// ============================================================================== // API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/invoice-ocr // 支持免费在线体验 // API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等) // ============================================================================== //图片转base64 function get_base64($path){ if($fp = fopen($path, "rb", 0)) { $binary = fread($fp, filesize($path));// 文件读取 fclose($fp); $b64 = base64_encode($binary);// 转base64 }else{ $b64=""; printf("%s 文件不存在", $path); } return $b64; } $url = "https://ocr-api.shiliuai.com/api/invoice_ocr/v1"; $appcode = "你的appcode"; $file_path = "文件路径"; $method = "POST"; // 请求头 $headers = array(); array_push($headers, "Authorization:APPCODE " . $appcode); array_push($headers, "Content-Type:application/json"); // 请求体 $b64 = get_base64($file_path); $data = array( "file_base64" => $b64 ); $post_data = json_encode($data); // 请求 $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); $result = curl_exec($curl); var_dump($result);

五、发票识别 + 财务系统录入完整实现

5.1 整体系统架构

员工上传发票图片 (手机拍照/扫描件/电子PDF) ↓ 石榴智能发票OCR API (自动提取全字段结构化数据) ↓ 数据清洗与校验模块 (金额合理性校验/税号格式校验) ↓ 财务/ERP系统入库 (自动写入报销单/生成凭证) ↓ 数据库存储 + 报销流程触发

5.2 完整落地代码示例

# ============================================================================== # API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/invoice-ocr # 支持免费在线体验 # API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等) # ============================================================================== import requests import base64 import json import mysql.connector from datetime import datetime # 石榴智能发票识别配置 INVOICE_API_URL = "https://ocr-api.shiliuai.com/api/invoice_ocr/v1" APPCODE = "你的APPCODE" def invoice_ocr(image_path): """调用发票OCR识别API""" with open(image_path, 'rb') as f: image_base64 = base64.b64encode(f.read()).decode('utf-8') headers = { 'Authorization': f'APPCODE {APPCODE}', 'Content-Type': 'application/json' } response = requests.post(INVOICE_API_URL, headers=headers, json={"file_base64": image_base64}) return response.json() def validate_invoice_data(data): """数据校验:确保金额>0、税号格式正确、开票日期有效""" errors = [] try: amount = float(data.get('价税合计', '0').replace(',', '')) if amount <= 0: errors.append("价税合计金额无效") except ValueError: errors.append("价税合计格式错误") tax_no = data.get('购买方纳税人识别号', '') if tax_no and len(tax_no) not in [15, 18, 20]: errors.append("纳税人识别号长度异常") # 开票日期校验 invoice_date = data.get('开票日期', '') if invoice_date: try: datetime.strptime(invoice_date, '%Y-%m-%d') except ValueError: errors.append("开票日期格式异常") return errors def save_to_database(data, db_config, table_name="invoices"): """将发票数据写入MySQL数据库""" conn = mysql.connector.connect(**db_config) cursor = conn.cursor() sql = f""" INSERT INTO {table_name} (invoice_number, invoice_code, invoice_date, buyer_name, buyer_tax_no, seller_name, seller_tax_no, total_amount, tax_amount, drawer, status, created_at) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """ values = ( data.get('发票号码', ''), data.get('发票代码', ''), data.get('开票日期', ''), data.get('购买方名称', ''), data.get('购买方纳税人识别号', ''), data.get('销售方名称', ''), data.get('销售方纳税人识别号', ''), data.get('价税合计', '0'), data.get('合计税额', '0'), data.get('开票人', ''), 'pending', # 状态:待审核 datetime.now() ) cursor.execute(sql, values) conn.commit() cursor.close() conn.close() def process_invoice(image_path, db_config): """完整处理流程:识别 → 校验 → 入库""" # 1. OCR识别 result = invoice_ocr(image_path) if not result.get('success'): return {"success": False, "error": "OCR识别失败", "detail": result} # 2. 数据校验 invoice_data = result.get('data', {}) errors = validate_invoice_data(invoice_data) if errors: return {"success": False, "error": "数据校验失败", "errors": errors} # 3. 入库 try: save_to_database(invoice_data, db_config) return {"success": True, "invoice_number": invoice_data.get('发票号码')} except Exception as e: return {"success": False, "error": f"数据库写入失败: {str(e)}"} # 使用示例 if __name__ == "__main__": db_config = { 'host': 'localhost', 'user': 'your_user', 'password': 'your_password', 'database': 'finance_db' } result = process_invoice("invoice.jpg", db_config) print(json.dumps(result, indent=2, ensure_ascii=False))

六、发票OCR入账自动化流程参考

发票OCR的核心价值在于实现“识别即入账”,标准的自动化流程如下:

Step 1:用户上传发票图片或PDF

  • 员工在报销系统中上传发票文件

  • 系统支持JPEG、PNG、PDF等多种格式

Step 2:调用OCR发票识别API

  • 系统将图片转换为Base64编码

  • 调用石榴智能发票识别API获取结构化数据

Step 3:数据解析与字段提取

  • 自动提取金额、日期、发票号、税号等关键信息

  • 进行数据合理性校验(金额>0、税号格式等)

Step 4:业务系统数据处理

  • 将识别数据自动填入报销单

  • 或直接生成财务凭证记录

  • 触发自动审批流程(小额免审)

Step 5:数据库存储与归档

  • 识别结果存入数据库

  • 原始发票图片归档到OSS

  • 建立发票检索索引

七、发票OCR应用场景与价值

  • 报销单自动处理:员工提交发票图片/PDF,系统自动提取发票信息填入报销系统,员工无需手动填写任何表单。

  • 财务入账自动化:发票识别后自动完成数据入库、生成财务记录,财务人员仅需核对异常数据即可。

  • 票据归档与检索:自动生成发票数据库,支持按金额、日期、税号等多维度检索。

  • ERP系统对接:识别结果直接写入企业ERP或财务系统中,形成企业级发票自动化处理闭环。

八、常见问题与解决方案

Q1:发票照片模糊/倾斜怎么办?
石榴智能API内置了图像预处理功能,在识别前会自动校正倾斜、去模糊、优化亮度对比度,无需再单独调用图片修复类API,一步到位。

Q2:支持哪些发票类型?
支持增值税专用发票、增值税普通发票、增值税电子普通发票、卷式发票等多种类型。

Q3:商品明细表格(货物清单)能识别吗?
能。识别结果中包含商品明细列表,包括商品名称、规格型号、数量、单价、金额、税率、税额等字段,可直接用于进项税抵扣核算和库存管理系统对接。

Q4:API调用失败的可能原因?

  • APPCODE无效(检查控制台配置是否正确)

  • 上传图片过大(建议不超过8MB)

  • 图片格式不支持(支持PNG/JPEG/BMP/PDF)

  • 请求超时(正常QPS限流为5,批量调用建议异步处理)

九、总结

发票OCR识别的核心价值在于:从“人工逐张录入”的繁琐模式,升级为“上传即识别、识别即入账”的自动化流程。石榴智能发票识别OCR API支持数十个字段的全结构化输出,覆盖专票、普票、电子票等多种发票类型,同时提供Python、JS、PHP等多语言接入方案,便于快速集成到现有财务系统。从上传图片到数据入库全程耗时仅3秒左右。新用户注册即送500次免费调用,可直接用于测试验证。详细开发文档和在线体验入口:https://market.shiliuai.com/doc/invoice-ocr

相关阅读推荐

  • 《OCR识别接口哪个好?2026主流OCR API对比评测(附免费在线工具)》

  • 《电商订单OCR识别实战:如何自动提取订单信息并实现发货自动化》

  • 《医疗票据OCR识别API实战:从医保结算单到结构化数据提取》

  • 《订单OCR + 自动发货系统完整实现(含架构 + 数据流 + 代码)》

如果这篇文章对你有帮助,欢迎点赞、收藏、评论支持~

#发票OCR #API接入 #Python教程 #PHP开发 #财务自动化 #发票识别 #增值税发票 #石榴智能

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

CodeAlive MCP:基于GraphRAG的AI编码助手深度上下文引擎实战

1. 项目概述&#xff1a;为AI编码助手注入“深度上下文”的引擎 如果你和我一样&#xff0c;每天都要面对动辄几十万行、结构复杂的大型代码库&#xff0c;那你肯定理解那种“大海捞针”的痛苦。想在庞大的项目中快速定位一段特定的业务逻辑&#xff0c;或者让AI助手真正理解某…

作者头像 李华
网站建设 2026/5/8 21:46:34

chrome-devtools mcp使用问题记录

问题描述&#xff1a; 简述&#xff1a;使用chrome-devtools mcp连接已有chrome实例打开网页时&#xff0c;点击允许后&#xff0c;一直卡着 背景&#xff1a; 在cursor中通过 "chrome-devtools": {"command": "npx","args": [&quo…

作者头像 李华
网站建设 2026/5/8 21:27:29

本地部署 AI 大模型保姆级教程:Ollama 安装、模型下载与终端实战全流程

前言 最近我在本地部署大模型时选择了 Ollama。Ollama 的优点是安装简单、命令清晰、模型管理方便&#xff0c;非常适合新手快速体验本地大语言模型。 但是我在安装过程中踩了一个很典型的坑&#xff1a; 我明明把 Ollama 安装到了 E 盘&#xff0c;结果模型还是下载到了 C 盘…

作者头像 李华
网站建设 2026/5/8 21:27:28

气凝胶+玄武岩复合毡 | 石化管道场景的经济账:投资回收期2-5年,减碳数百吨/年

三组核心数据&#xff1a;投资回收期2-5年、年碳减排数百吨、使用寿命15-20年。这是宝业绿色建筑与双碳团队在走访会员企业后&#xff0c;对“气凝胶玄武岩纤维复合毡”在工业保温防腐场景中给出的经济账结论。以下为该团队2026年5月调研报告的核心内容整理。一、这个材料组合是…

作者头像 李华
网站建设 2026/5/8 21:26:38

wkhtmltopdf对page=break-after:always属性支持的支持

wkhtmltopdf分页问题深度解析&#xff1a;page-break-after失效原因及解决方案问题背景在使用wkhtmltopdf生成PDF文档时&#xff0c;许多开发者都会遇到一个令人困惑的问题&#xff1a;CSS的page-break-after: always属性为什么不生效&#xff1f; 这个问题在需要精确控制分页位…

作者头像 李华
网站建设 2026/5/8 21:26:38

基于Mistral 7B与Ollama的本地知识图谱构建全流程解析

1. 项目概述&#xff1a;从文本到知识图谱的本地化构建最近在折腾一个挺有意思的项目&#xff0c;核心目标是把一堆零散的文本&#xff0c;比如一本书、一份报告或者一堆研究论文&#xff0c;转化成一个结构化的、可视化的知识图谱。这玩意儿本质上是一个语义网络&#xff0c;能…

作者头像 李华