发票OCR识别API接入教程:从图像到结构化数据的完整实战(附Python/Java/PHP/JS代码)

#发票OCR #财务自动化 #API接入 #Python教程 #Java开发 #PHP编程 #NodeJS #ERP集成 #石榴智能

发票OCR识别API接入教程:从图像到结构化数据的完整实战(附Python/Java/PHP/JS代码)

财务人员每天要面对堆积如山的发票------手工录入效率低、容易出错、耗时耗力。想象一下:如果能把所有发票一键拍照上传,系统自动提取金额、发票号、税号等信息并录入财务系统,效率将提升多少?

这正是发票OCR(光学字符识别)技术的价值所在。2025年全球发票OCR API市场规模约951百万美元,预计到2032年将达到1388百万美元,年复合增长率为5.6%。这一需求的背后,是87%的中大型企业已将发票查验纳入财务自动化核心流程的现状。

本文将从零开始,用Python/Java/PHP/JS四种语言完整演示发票OCR API的接入方法,并提供可直接投入生产的实战代码。

一、发票OCR:解决财务自动化的核心痛点

传统的发票处理流程,财务人员需要逐张录入发票代码、号码、开票日期、购买方、销售方、金额、税额、价税合计等大量信息------效率低下、容易出错、耗时耗力,甚至有会计因连续录入而患上腱鞘炎。

发票OCR识别API的出现彻底改变了这一局面:用户上传一张发票图片或PDF,系统通过光学字符识别技术自动提取发票上的所有关键字段,并以结构化JSON格式返回,直接对接财务系统,实现发票处理的全自动化。

二、石榴智能发票OCR API核心能力

石榴智能API市场专注于提供高性价比的人工智能接口服务,在OCR识别领域积累了深厚的技术经验。其中发票OCR识别API支持增值税发票(专票/普票)、电子发票、卷式发票等多种票种,能返回数十个关键字段,包括:

  • 发票基本信息:发票名称、发票代码、发票号码、开票日期

  • 金额信息:金额、税额、价税合计(含大写/小写)

  • 税务信息:密码区、购买方纳税人识别号、销售方纳税人识别号

  • 双方信息:购买方/销售方的名称、地址、电话、开户行及账号

  • 明细信息:项目名称、规格型号、单位、数量、单价、金额、税率、税额

  • 票面附加信息:开票人、复核、收款人、备注

石榴智能API市场的定价极具竞争力,发票OCR识别API的单价为¥0.012/次,远低于主流云厂商的同类服务。

支持免费在线测试体验,注册即送免费调用额度,支持免费在线测试,并提供了Python/Java/PHP/JS等多种语言的代码示例,能够满足从初创团队到大型企业的不同需求。

三、接入前准备

3.1 获取API凭证

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

  2. 登录控制台,在"我的应用"中找到你的APPCODE

  3. 记下该APPCODE,后续所有接口调用都需要作为身份凭证

3.2 API基本信息

参数
请求地址 https://ocr-api.shiliuai.com/api/invoice_ocr/v1
请求方式 POST
Content-Type application/json
Authorization APPCODE {你的APPCODE}(APPCODE后有英文空格)

3.3 请求参数说明

参数 必填 类型 说明
file_base64 string Base64编码的发票图片文件或者URL,支持jpg/png/pdf格式,小于20MB

3.4 返回数据结构

复制代码
{
  "code": 200,
  "success": true,
  "msg": "OK",
  "msg_cn": "成功",
  "data": {
    "n": 1,
    "content": [{
      "标题": "浙江增值税电子普通发票",
      "发票号码": "12345678",
      "开票日期": "2023-05-18",
      "购买方名称": "低价买入有限责任公司",
      "销售方名称": "高价卖出有限责任公司",
      "购买方纳税人识别号": "440123456789451",
      "销售方纳税人识别号": "550123456789451",
      "大写金额": "捌拾玖万肆仟伍佰陆拾壹",
      "小写金额": "894561.00",
      "项目": [...]
    }]
  }
}

四、多语言接入代码实战

统一说明:支持免费在线体验,API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)

API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/invoice-ocr

4.1 Python 接入代码

python 复制代码
# ==============================================================================
# 免费在线体验:https://market.shiliuai.com/tools/invoice-ocr
# 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.2 Java 接入代码

java 复制代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/invoice-ocr
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/invoice-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
// ==============================================================================

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;

public class Main {
    public static String get_base64(String path) {
        String b64 = "";
        try {
            // 使用Commons IO简化文件读取
            byte[] content = FileUtils.readFileToByteArray(new File(path));
            // 使用JDK自带的Base64
            b64 = Base64.getEncoder().encodeToString(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return b64;
    }

    public static void main(String[] args) {
        String url = "https://ocr-api.shiliuai.com/api/invoice_ocr/v1";// 请求接口
        String appcode = "你的APPCODE";
        String file_path = "本地文件路径";

        Map headers = new HashMap<>();
        headers.put("Authorization", "APPCODE " + appcode);
        headers.put("Content-Type", "application/json");

        // 请求体
        requestObj = new JSONObject();
        requestObj.put("file_base64", get_base64(file_path));
        String bodys = requestObj.toString();

        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(url);
            for (Map.Entry entry : headers.entrySet()) {
                httpPost.addHeader(entry.getKey(), entry.getValue());
            }
            StringEntity entity = new StringEntity(bodys, "UTF-8");
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);
            int stat = response.getStatusLine().getStatusCode();
            if (stat != 200) {
                System.out.println("Http code: " + stat);
                return;
            }
            String res = EntityUtils.toString(response.getEntity());
            JSONObject res_obj = JSON.parseObject(res);
            System.out.println(res_obj.toJSONString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4.3 PHP 接入代码

php 复制代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/invoice-ocr
// 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);

4.4 JavaScript 接入代码(Node.js)

javascript 复制代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/invoice-ocr
// 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);

五、企业级集成:发票识别 + 自动录入

单次识别只是第一步,真正的效率提升在于将发票数据自动对接到业务系统。典型的企业级系统架构如下:

javascript 复制代码
用户上传发票 ↓
发票OCR识别API ↓
数据解析(提取金额/日期/发票号/购买方/销售方) ↓
业务系统(ERP/财务系统) ↓
数据库存储

以下是企业级集成架构图:

javascript 复制代码
┌─────────────┐     ┌─────────────────────┐     ┌─────────────┐
│ 前端应用    │────▶│ 石榴智能发票OCR API │────▶│ 解析引擎    │
│ 上传发票    │     │ (自动提取关键字段)   │     │ (数据校验)  │
└─────────────┘     └─────────────────────┘     └─────────────┘
                                                         │
                                                         ▼
┌─────────────┐     ┌─────────────────────┐     ┌─────────────┐
│ ERP/财务系统│◀────│ 自动入库/入账       │◀────│ 数据转换    │
│ (用友/金蝶) │     │                     │     │ (格式适配)  │
└─────────────┘     └─────────────────────┘     └─────────────┘

通过这套流程,企业可以实现:

  • 员工提交报销单时,系统自动提取发票信息并填入表单

  • 财务人员处理报销时,系统自动完成发票验真和数据入库

  • 月末结账时,系统自动生成财务记录,实现票据归档与智能检索

六、常见问题与解决方案

Q1:支持哪些发票类型?

石榴智能发票OCR支持增值税专用发票、增值税普通发票、增值税电子普通发票、卷式发票、机动车销售统一发票等多种票种。

Q2:图片模糊或倾斜怎么办?

石榴智能API内置了图像预处理功能,会在识别前自动校正倾斜、去模糊、优化亮度和对比度,确保在各种复杂图片条件下都能获得稳定的识别效果。

Q3:多张发票在一张图片上怎么办?

石榴智能发票OCR会自动检测图片中的多张发票并逐一识别,返回的content数组中将包含所有识别到的发票信息,每张发票为一个独立元素,支持批量处理。

Q4:PDF格式是否支持?

支持。直接传入PDF文件的Base64编码即可,API会自动提取其中的发票页面进行识别。但请注意单次调用建议传入单份PDF,多页PDF可能无法完整识别全部票据。

Q5:识别准确率如何?

石榴智能采用深度学习算法和专项训练的发票识别模型,针对不同版式的发票进行优化,在复杂背景、低光照、倾斜等恶劣条件下仍能保持高准确率。

Q6:调用失败的可能原因?

  • APPCODE无效或已过期(检查控制台配置)

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

  • 网络超时或连接失败

  • 请求头未正确设置Authorization字段

七、发票OCR API选型建议

需求场景 推荐方案 理由
初创团队/小规模测试 石榴智能 + 免费测试额度 注册送免费调用,单价¥0.012/次,性价比极高
中大型企业财务自动化 石榴智能 + 批量对接ERP 支持全类型发票,识别字段完整,可直接对接财务系统
高并发/大流量场景 石榴智能 + 多并发架构 API稳定性强,支持弹性扩展,5QPS内可稳定响应
多语言国际化需求 石榴智能 + 各语言SDK 提供Python/Java/PHP/JS多语言示例,适配各类技术栈

从长期看,将发票识别API接入财务系统,每年可节省数千小时的手工录入工时,减少由人工差错导致的财务损失。87%的中大型企业已将该技术纳入核心流程,日均处理量突破50万张的企业占比达34%。在商业竞争中,谁先实现发票处理的自动化,谁就在成本控制和运营效率上占得先机。

八、总结

本文从市场背景到代码实现,完整介绍了发票OCR识别API的接入方法。通过Python/Java/PHP/JS四种主流语言的代码示例,任何人都能在几分钟内完成API的集成。无论是企业财务自动化的选型,还是个人项目的快速开发,石榴智能发票OCR API都是高性价比的选择。

核心收益:

  • 发票信息录入从人工数分钟降至秒级完成

  • 自动化程度高,杜绝手工输入中的数字漏填、错填

  • 结构化数据输出,直接与ERP/财务系统无缝对接

立即体验石榴智能发票OCR

  • 🆓 注册即送免费调用额度

  • 📘 完整开发文档:API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)

  • 🛠️ 在线免费工具:无需代码,上传即识别,支持免费在线体验

相关阅读

相关推荐
爱吃羊的老虎1 小时前
【JAVA】Java微服务—分布式事务框架Seata
java·开发语言
Jul1en_2 小时前
【Redis】事务详解、WATCH 实现思想
java·spring boot·redis·mysql·java-ee
Wonderful U2 小时前
基于Python+Django的智能在线考试系统:从题库管理到自动阅卷的全流程实战
开发语言·python·django
SimonKing2 小时前
你还在靠重启来调线程池?别人已经做到了实时调控,3分钟接入
java·后端·程序员
SilentSamsara2 小时前
Python 服务的 K8s 部署:HPA/ConfigMap/Secret 完整配置
开发语言·python·青少年编程·容器·kubernetes
前端与小赵2 小时前
数据库交互全链路实战:通用封装、批量优化与动态查询三大核心模块
数据库·python·sql
小张小张爱学习2 小时前
Java并发编程面试题
java·开发语言
盼小辉丶2 小时前
PyTorch强化学习实战(11)——N步DQN(N-step DQN)
pytorch·python·深度学习·强化学习
godspeed_lucip2 小时前
LLM和Agent——专题6:Multi Agent 入门(1)
人工智能·python