通用文字识别(高性能版)(算法编码8000400023)
API Path
/aipaas/ocr/v1/highPerformanceOcr/ocr
请求协议
HTTPS
请求方法
POST
请求头部 :
| 头部标签 | 必填 | 说明 | 类型 | 数据字典 | 限制 | 头部内容 | 示例 |
|---|---|---|---|---|---|---|---|
| Content-Type | 是 | 内容类型 | application/json | application/json | |||
| X-APP-ID | 是 | 控制台--应用管理--AppID | |||||
| Device-Uuid | 是 | 设备管理-设备uuid | |||||
| Authorization | 是 | 鉴权信息 |
请求参数 Json
Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| seqid | 接口跟踪ID,每次调用需不同,可使用UUID, 用于日志排除、链路跟踪 | 是 | [string] | 0 | b8fbd1e7-1fa2-46c7-a6ec-7e82db5885dd | |
| image | 支持图片base64和url | 是 | [string] | 0 | /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKB/4Q+z+COm+LLTxnZzXIvRqEutX9lLa | |
| html_escape | 是否html转义,用于解决xss漏洞【默认true】 | 否 | [boolean] | 0 | true | |
| image_type | 图片类型:0-image必须为url【默认】,1-image必须为base64。本能力自动识输入的图片是url还是base64,非必填。 | 否 | [int] | 0 | 1 |
响应内容 :
返回结果
成功 (200)
Json
Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| seqid | 接口跟踪ID,调用时候传入的跟踪ID | 是 | [string] | 0 | b8fbd1e7-1fa2-46c7-a6ec-7e82db5885dd | |
| code | 状态响应码【10000为成功,其他为失败】。参考错误编码规范 | 是 | [string] | 0 | 10000 | |
| message | 调用结果描述。参考错误编码规范 | 是 | [string] | 0 | 请求成功 | |
| flag | 业务上成功或失败:1成功,0失败 | 是 | [int] | 0 | 1 | |
| data | 识别结果 | 是 | [object] | 0 | ||
| data>>timeSecond | 识别耗时(秒) | 是 | [double] | 0 | 1.25 | |
| data>>whole_text | 全图识别内容 | 是 | [string] | 0 | ["在某一村委会干部挪用公款案件中,公诉机关指控村民张某运,作为村委会会计(没有正式任命,\n实为村委报账员),私下填写了转账支票,将360万元村民拆迁补偿款转至某私营企业,因而认定张某\n运构成挪用公款罪。"] | |
| data>>width | 输入图像宽度 | 是 | [int] | 0 | 1920 | |
| data>>height | 输入图像高度 | 是 | [int] | 0 | 1080 | |
| data>>words_result | 以文本行为单位的识别结果 | 是 | [array] | 0 | ["在某一村委会干部挪用公款案件中"] | |
| data>>words_result>>text | 文本行的识别内容字符串 | 是 | [string] | 0 | ||
| data>>words_result>>score | 文本行的识别置信度 | 是 | [double] | 0 | 0.955 | |
| data>>words_result>>position | 文本行的坐标区域,以长度为8的整形数组表示四边形,语义左上角为起始点顺时针构成闭合区域 | 是 | [string] | 0 | [100, 120, 600, 120, 600, 160, 100, 160] |
成功示例
{
"seqid": "req-20260310-7b8c9d2e",
"code": "10000",
"message": "成功",
"flag": 1,
"data": {
"time_second": 0.452,
"whole_text": "通用文字识别示例\n这是一款自研的OCR产品测试。",
"width": 1080,
"height": 720,
"words_result": [{
"text": "通用文字识别示例",
"score": 0.998,
"position": [100, 50, 450, 50, 450, 90, 100, 90]
},
{
"text": "这是一款自研的OCR产品测试。",
"score": 0.985,
"position": [100, 120, 600, 120, 600, 160, 100, 160]
}
]
}
}
普遍场景下(文档、单据、自然场景等)的通用文字识别。
| 修订日期 | 算法版本号 | 修订内容 |
|---|---|---|
| 2026-03-27 | V1.0.0 | 首版本发布 |
服务接口调用时需要严格遵循服务鉴权规则,服务调用鉴权规则请参见:开发指南 - 接口签名认证。
html_escape)值为true时对识别出的文本做html转义,上层调用不用担心xss漏洞问题,值为False时识别出的文本原样输出,上层调用方如果需要把识别结果展示在web页面上需要自己修复xss漏洞问题响应示例(html_escape==False):
{
"seqid": "req-20260310-7b8c9d2e",
"code": "10000",
"message": "成功",
"flag": 1,
"data": {
"time_second": 0.452,
"whole_text": "通用文字识别示例这是一款自研的OCR产品测试。",
"width": 1080,
"height": 720,
"lines": [{
"text": "通用文字识别示例",
"score": 0.998,
"position": [100, 50, 450, 50, 450, 90, 100, 90]
}, {
"text": "这是一款自研的OCR产品测试。",
"score": 0.985,
"position": [100, 120, 600, 120, 600, 160, 100, 160]
}]
}
}
{
"seqid": "test_seq0",
"image": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgK===",
"html_escape": true,
}
| 状态码 | 状态描述 | 状态说明 |
|---|---|---|
| 10000 | 请求成功 | |
| 10301 | 服务必填参数缺失 | 服务必填参数缺失或未填写 |
| 10304 | 服务参数错误 | 服务参数数据类型或取值错误 |
| 10305 | 图片相关错误 | 图片大小错误,格式错误或获取失败 |
| 10903 | 服务执行失败 | 模型推理结果异常,或服务执行失败 |
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* 为保证示例可以正常运行,请确认maven中是否存在以下依赖:
* <dependency>
* <groupId>cn.hutool</groupId>
* <artifactId>hutool-all</artifactId>
* <version>5.8.29</version>
* </dependency>
* <dependency>
* <groupId>com.alibaba</groupId>
* <artifactId>fastjson</artifactId>
* <version>1.2.83</version>
* </dependency>
*/
public class Example {
public static void example() {
try {
// 算法调用地址,请根据实际情况修改
String url = "算法调用地址";
// 设置请求头
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
headers.put("Device-Uuid", "2018619061498245122");
headers.put("X-APP-ID", "你实际的AppId");
headers.put("Authorization", "你实际的Authorization");
// 设置请求参数,请根据实际情况修改
String requestString = "{\n" +
" \"image\":\"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKB/4Q+z+COm+LLTxnZzXIvRqEutX9lLa\",\n" +
" \"html_escape\":true,\n" +
" \"seqid\":\"b8fbd1e7-1fa2-46c7-a6ec-7e82db5885dd\",\n" +
" \"image_type\":1\n" +
"}";
// 发起HTTP请求
HttpResponse response = HttpRequest.post(url)
.headerMap(headers, true)
.body(requestString)
.execute();
// 输出响应结果
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
example();
}
}
import json
import hashlib
import hmac
import time
import re
import urllib.parse
import requests
import warnings
from datetime import datetime
import logging
# 配置日志,设置日志级别为INFO,并指定日志格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 配置环境变量
X_APP_ID = "yourAppId"
AUTHORIZATION = "yourAuthorization"
# 请求的URL
url = "算法调用地址"
# 请求数据
request_data = {
"image":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKB/4Q+z+COm+LLTxnZzXIvRqEutX9lLa",
"html_escape":True,
"seqid":"b8fbd1e7-1fa2-46c7-a6ec-7e82db5885dd",
"image_type":1
}
# 构建请求头
headers = {
"Content-Type": "application/json",
"Device-Uuid": "2018619061498245122",
"X-APP-ID": X_APP_ID,
"Authorization": AUTHORIZATION
}
def timeSimple(timestamp):
# 将时间戳转换为HH:MM:SS格式的时间字符串
dt_object = datetime.fromtimestamp(timestamp)
formatted_time = dt_object.strftime("%H:%M:%S")
return formatted_time
def send_request(url):
try:
start_time = time.time()
logging.info(f"请求路径: {url}")
logging.info(f"开始发送: {timeSimple(start_time)}")
with requests.post(
url, json=request_data, headers=headers, stream=True, verify=False
) as response:
first_packet_time = None
if response.status_code == 200:
logging.info(f"接受到返回: {timeSimple(time.time())}")
for chunk in response.iter_content(chunk_size=1024):
if chunk:
if first_packet_time is None:
first_packet_time = time.time()
logging.info(
f"Received chunk: {timeSimple(time.time())} {chunk.decode('utf-8')}"
)
end_time = time.time()
logging.info(f"Time to first byte (TTFB): {first_packet_time - start_time:.3f} seconds")
logging.info(f"Request completed in {end_time - start_time:.3f} seconds")
else:
logging.error(f"Request failed with status code {response.status_code}")
except Exception as e:
logging.error(f"An error occurred: {e}")
# 发送请求
send_request(url)
logging.info(f"headers = {headers}")