在做发票识别、合同录入、RPA 自动化、图片转文字系统时,OCR 是绕不开的一环。
但很多人一开始就选错了工具:
-
要么只用了在线 OCR 网站,后期没法系统对接
-
要么一上来就接 API,却连识别效果都没验证
这篇文章我从【普通用户】和【开发者 / 系统集成】两个视角,结合项目经验,说清楚:
👉 在线 OCR 识别 vs OCR API 接口平台,到底怎么选?
1. 在线 OCR 识别平台适用场景(轻量级使用)
如果你:
-
不会写代码
-
只是偶尔把图片转成文字
-
想要「上传 → 复制 → 完事」
那在线 OCR 网站就够用了。
典型能力:
-
上传图片 / PDF → 自动识别文字
-
支持扫描件、截图、手机拍照
-
导出 TXT / Word
👉 特点是:零代码、低成本、人工触发
像我平时验证识别效果时,就会先用一个支持网页直接识别的平台测试,比如:石榴智能文字识别在线工具

这种方式特别适合:
-
文档整理
-
扫描件转文字
-
拍照资料录入
2. OCR API 接口平台适用场景(系统集成 / 自动化)
如果你是:
-
开发者 / 技术团队
-
要把 OCR 集成进业务系统
-
要做批量处理 / RPA 自动化
那就必须选 OCR API 接口平台。
技术特征:
-
RESTful API
-
返回 JSON 结构化数据
-
支持高并发调用
示例请求:
java
//API文档:https://market.shiliuai.com/doc/advanced-general-ocr
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/advanced_general_ocr/v1";// 请求接口
String appcode = "你的APPCODE";
String imgFile = "本地文件路径";
Map headers = new HashMap<>();
headers.put("Authorization", "APPCODE " + appcode);
headers.put("Content-Type", "application/json");
// 请求体
JSONObject requestObj = new JSONObject();
requestObj.put("file_base64", get_base64(imgFile));
String bodys = requestObj.toString();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 创建POST请求
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();
}
}
}
返回示例:
python
成功示例:
{
'code': 200,
'msg': 'OK',
'msg_cn': '成功',
'success': True,
'file_id': file id,
'request_id': request id,
'data': data, 具体看下面
}
data = {
"page_count": 5, // int, 文件页面总数
"process_pages": 3, // int, 处理页面数
"status": 2, // int, 处理状态,0: 已加入队列, 1: 正在处理中, 2: 已完成,同步时此值为2
"wait_time": 0.0 // float, 大概还需等待时间,同步时此值为0
// 如果status==2:
"pages": [
{
"width": 2000, // int, 页面宽度
"height": 2500, // int, 页面高度
"prob_mean": 0.98, // float, [0, 1], 页面文字置信度平均值,若is_line,则不返回该项
"prob_std": 0.11, // float, 页面文字置信度标准差,若is_line,则不返回该项
"lines": [
{
"text": "你好", // string, 文字内容
"prob": 0.995, // float, [0, 1], 文字内容置信度
"keypoints": [[50, 20], [150, 20], [150, 60], [50, 60]] // list, [[xi, yi]], 文字区域角点位置,以左上角为起点,按顺时针排列;若is_line,则不返回该项
},
......
]
},
......,
]
}
👉 在真实项目中,我更关注 4 点:
-
识别准确率(拍照歪斜、低清图是否稳定)
-
接口稳定性(QPS、限流是否合理)
-
返回结构是否方便入库
-
文档 & 示例代码是否清晰
-
价格在同品质下是否更有竞争力
像我测试 API 时,通常会先用网页验证效果,再接入 API

3. 在线 + API 一体化平台的工程价值
| 使用角色 | 传统 OCR 工具 | 在线 + API 平台 |
|---|---|---|
| 普通用户 | 只能网页用 | 网页直接识别 |
| 开发者 | 无接口 | 提供 REST API |
| 企业 | 难集成 | 快速系统对接 |
优势很明显:
✔ 普通人可直接验证效果
✔ 开发者可马上系统接入
✔ 企业落地成本低
4. 技术选型时我优先看的指标
-
OCR 准确率(复杂背景 / 手写 / 拍照)
-
API 稳定性 & 并发能力
-
JSON 返回结构是否适合数据库设计
-
文档、SDK、Demo 是否齐全(Java / Python / Node)
总结
-
个人办公 / 学习 👉 在线 OCR 就够
-
系统开发 / 自动化 👉 必须 OCR API
-
想少踩坑 👉 选"在线 + API 一体"的平台
如果你正在做 OCR / 图片转文字 / RPA 项目,可以关注我,后面会持续分享 OCR API 实战接入经验。