发票 OCR 识别 API 实战:自动识别增值税发票信息(含完整接入流程)

0 阅读4分钟

发票 OCR 识别 API 实战:自动识别增值税发票信息(完整接入指南)

本文从真实业务场景出发,讲清发票 OCR 的实现方式,并给出可直接落地的 API 接入方案。

在企业系统中,有一个非常高频但低效的场景:

👉 发票信息录入

常见问题:

  • 人工录入慢(1张发票 30s+)
  • 容易出错(金额 / 税号 / 日期)
  • 批量处理困难

因此,越来越多系统开始引入:

👉 发票 OCR 自动识别


一、发票 OCR 能识别哪些内容?

以增值税发票为例,通常可以自动提取:

  • 发票代码
  • 发票号码
  • 开票日期
  • 金额 / 税额
  • 购买方信息
  • 销售方信息

👉 这些字段可以直接用于:

  • 财务系统
  • 报销系统
  • ERP 系统

二、技术实现流程(工程视角)

完整流程如下:

上传发票图片
   ↓
图像预处理(去噪 / 矫正)
   ↓
OCR 文本检测 + 识别
   ↓
字段结构化解析
   ↓
返回 JSON 数据

⭐ 核心难点

发票 OCR 比普通 OCR 更难:

  • 表格结构复杂
  • 字段位置不固定
  • 发票种类多
  • 易受光照 / 折痕影响

👉 这也是为什么不建议自己从 0 做。


三、发票 OCR API 接入实战


Step 1:准备图片

支持:

  • 手机拍照
  • 扫描件
  • PDF 转图片

Step 2:调用发票 OCR API

如果你正在做系统集成,建议直接参考接口文档(包含多语言示例),可以快速跑通。

👉 接口文档: market.shiliuai.com/doc/invoice…


示例代码\👇

# Python 示例
# API 文档:https://market.shiliuai.com/doc/invoice-ocr

# -*- 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)
// JS 示例
// API 文档:https://market.shiliuai.com/doc/invoice-ocr

// 需 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);

Step 3:解析返回结果

典型返回:

{
    'code': 200,
    'msg': 'OK',
    'msg_cn': '成功',
    'success': True,
    'file_id': file id,
    'request_id': request id,
    'data': data
}

data = {
    "n": 发票数量,
    "content": [
        {
            "标题": "浙江增值税电子普通发票",// 以下格式均为string
            "发票号码": "12345678",
            "开票日期": "2023-05-18",
            "购买方名称": "低价买入有限责任公司",
            "销售方名称": "高价卖出有限责任公司",
            "购买方纳税人识别号": "440123456789451",
            "销售方纳税人识别号": "550123456789451",
            "购买方地址电话": "翻斗大街翻斗花园2号楼1001室-12345678911",
            "销售方地址电话": "翻斗大街翻斗花园2号楼1101室-98745612326",
            "购买方开户行及账号": "努力存钱A大银行",
            "销售方开户行及账号": "努力存钱B大银行",
            "大写金额": "捌拾玖万肆仟伍佰陆拾壹",
            "小写金额": "894561.00",
            "项目": [
                {
                    "项目名称": "糊涂兔笔记本",
                    "规格型号": "糊涂兔",
                    "单位": "台",
                    "数量": "88",
                    "单价": "3888",
                    "金额": "342144",
                    "税率": "17%",
                    "税额": "58164.48"
                }
            ],
            "开票人": "张三",
            "收款人": "李四",
            "复核人": "王五",
            "page_no": 1 // int, 该内容在文件的第几页(从1开始)
        }
    ]
}

👉 可以直接入库或进入业务流程。


四、真实项目中的坑


❗ 坑 1:发票拍照不规范

问题:

  • 倾斜
  • 反光
  • 遮挡

👉 建议前端增加拍照引导。


❗ 坑 2:不同发票类型混用

例如:

  • 普票
  • 专票
  • 电子发票

👉 建议区分接口或做自动识别。


❗ 坑 3:字段解析不稳定

如果用通用 OCR + 正则:

  • 极易出错
  • 维护成本高

👉 建议直接用结构化 OCR。


五、在线工具 vs API 接入


✅ 在线工具适合

  • 人工使用
  • 少量处理
  • 快速验证

👉 在线体验: market.shiliuai.com/tools/invoi…

image.png


✅ API 更适合

  • 自动报销系统
  • 企业 SaaS
  • 批量处理

六、一个真实落地建议

很多团队的正确路径是:

1️⃣ 先用在线工具验证效果
2️⃣ 再接入 API
3️⃣ 最后做自动化流程

👉 这样风险最低。


七、总结

发票 OCR 的核心价值在于:

  • 提高效率
  • 降低错误率
  • 支持自动化

如果你的系统涉及:

  • 财务
  • 报销
  • 企业管理

👉 强烈建议尽早接入。