图片同步识别接口
1. 接口介绍
该接口对图片内容进行检测识别,并同步返回识别结果,适用于静态图片及动态图片。动态图片支持 gif
及 webp
格式,
满足下述条件时,转换为默认最多 10 张静态图片进行识别:
- 请求中的图片数量为 1,并且是
gif
或webp
动态图片
动态图片转换、计费和结果响应规则:
- 当动图帧数 <= 10 时,取全部帧;按照实际帧数计费;按照实际帧数返回每张图片的结果;
- 当动图帧数 >= 10 时,间隔取 10 帧;按照 10 帧计费;按照 10 帧返回每张图片的结果。
业务流程如下:
提示
- 接口并发限制:默认每秒请求数不超过 50 次;
- 图片文件大小限制:base64 编码后默认不超过 1M,请联系我们调整并发及文件限制;
- 请求大小限制:每次请求中最多包含 10 张图片,单次请求体不超过 30M;
- 支持的图片格式:
png
、jpg
、jpeg
、tif
、webp
、bmp
、gif
、heic
1.1 接入指南
- 联系客户经理开通账号
- 同客户经理沟通详细需求与审核标准。根据您的需求,客户经理将为您开通对应的应用(SID)
- 访问控制台 - 数字证书 获取 API 鉴权所需的密钥
- 点击 签名及验证示例 查看签名示例,了解如何生成鉴权所需的签名
- 查阅下方的接口参数文档,了解如何构建请求以及如何解析响应数据
- 使用 示例资源 调用接口,进行调试和测试
- 查阅 审核场景汇总结果说明,了解如何通过汇总结果判断内容是否违规,以及如何解析汇总结果
- 添加异常处理逻辑,以处理可能出现的错误和异常情况,增强代码的健壮性和稳定性
如果在接入过程中遇到任何技术问题,请联系客户经理以获取帮助。
2. 请求
2.1 请求地址
- 图片链接
- 图片 base64
- 图片 form-data(待废弃)
区域 | 请求地址 |
---|---|
国内 | https://api.open.tuputech.com/v3/recognition/<secretId> |
国外 | https://api-oversea.open.tuputech.com/v3/recognition/<secretId> |
区域 | 请求地址 |
---|---|
国内 | https://api.open.tuputech.com/v3/recognition/image/sync/base64/<secretId> |
国外 | https://api-oversea.open.tuputech.com/v3/recognition/image/sync/base64/<secretId> |
区域 | 请求地址 |
---|---|
国内 | https://api.open.tuputech.com/v3/recognition/<secretId> |
国外 | https://api-oversea.open.tuputech.com/v3/recognition/<secretId> |
提示
<secretId>
需替换为您的应用 SID
,请联系客户经理为您开通及配置。关于 SID
详见 常见问题(FAQ)。
2.2 请求方法
POST
2.3 请求头
- 图片链接
- 图片 base64
- 图片 form-data(待废弃)
Content-Type: application/json
Content-Type: application/json
Content-Type: multipart/form-data
2.4 超时时间及异常处理
- 通过图片链接接入审核时,建议配置超时时间
10
秒(下载图片超时时间为3
秒,最多重试一次); - 通过图片 base64 接入审核时,建议配置超时时间
5
秒; - 在 HTTP 响应状态码非
200
或业务状态码不为0
时进行重试。
危险
由于模型基于请求流量动态伸缩,在空闲一定时间后会关闭(部分专用模型空闲一定时间后会关闭全部实例)。
由于模型冷启动耗时较长,部分请求可能无法处理,最终返回非 200
HTTP 状态码或业务状态码 101
。该现象可能在以下情况下出现:
- 初次请求
- 长时间未调用后再次请求
- 请求流量突增
- 请求存在规律性的流量波动(例如每隔超过 5 分钟请求一批数据,或仅在工作日期间有大量请求)
针对以上情况,我们分别建议您:
- 间隔 2~3 分钟后重试
- 间隔 2~3 分钟后重试,并且后续保持至少每分钟 1 次调用
- 提前进行预热,或及时联系我们扩容
- 调整业务请求时间间隔到 5 分钟内,或联系我们调整实例保持策略。若您的业务仅在工作日期间有大量请求,节假日期间较少,请务必联系我们
2.5 请求参数说明 🔥
- 图片链接
- 图片 base64
- 图片 form-data(待废弃)
参数名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
image | String/Array<String> | 是 | 图片链接。 1. 优先使用字符串数组指定图片链接,字符串传参即将废弃; 2. 支持的图片格式: png 、jpg 、jpeg 、tif 、webp 、bmp 、gif 、heic ;3. 图片 base64 编码后默认限制在 1M 以内; 4. 出于安全考虑,图片链接端口除 80 , 443 端口外,应在 1025-65535 范围内 |
timestamp | Int | 是 | 当前服务器的 Unix 时间戳 |
nonce | Float | 是 | 随机数(建议使用 Unix 时间戳或若干位随机整数) |
signature | String | 是 |
|
tag | String/Array<String> | 否 | 图片业务信息,后续可根据 tag 搜索对应调用记录。例如:直播场景可传房间号或主播 ID 信息。1. 优先使用字符串数组指定 tag 参数,和 image 参数一一对应;2. 如果 tag 只有一个,或者 tag 数量少于 image ,默认使用最后一个 tag 补全(尾补全) |
task | String/Array<String> | 否 | 识别任务 ID,如:54bcfc6c329af61034f7c2fc 。如果需要只执行接口下的某些审核的任务,可通过此参数指定,默认执行该接口下的全部审核任务。1. 优先使用字符串数组传参 |
sequenceId | String/Array<String> | 否 | 连续帧图的组别 ID,例如直播间 ID 等,基于此 ID 进行该 ID 组别下的连续帧相似度识别(启用连续帧相似度识别服务必传)。 1. 优先使用字符串数组指定 sequenceId 参数,和 image 参数按照顺序一一对应;2. 需要保证同一 sequenceId 下的图片帧,在同一请求中唯一,并且在不同请求间按照时间顺序有一定的间隔(防止乱序);3. 建议按照图片帧的出现顺序依次调用接口,而非在一次请求中传入多张图片帧 |
referer | String | 否 | 下载图片时,请求在 HTTP Header 中携带的 Referer,用于图片防盗链 |
language | String | 否 | 语言种类代码(预览),在进行多语种 OCR 文本审核时填写。支持的语言种类及代码列表详见:语言代码列表 |
参数名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
images | Array<String> | 是 | 图片 base64 字符串数组。 1. 支持的图片格式: png 、jpg 、jpeg 、tif 、webp 、bmp 、gif 、heic ;2. 图片 base64 编码后默认限制在 1M 以内(一般经过 base64 编码后的字符串比原始数据大 33%); 3. 请注意区分 Data URL 及 base64 字符串,base64 字符串不包含 data:image/xxx;base64, 前缀 |
timestamp | Int | 是 | 当前服务器的 Unix 时间戳 |
nonce | Float | 是 | 随机数(建议使用 Unix 时间戳或若干位随机整数) |
signature | String | 是 |
|
tags | Array<String> | 否 | 图片业务信息,后续可根据 tag 搜索对应调用记录。例如:直播场景可传房间号或主播 ID 信息。1. tag 参数和 image 参数一一对应;2. 如果 tag 只有一个,或者 tag 数量少于 image ,默认使用最后一个 tag 补全(尾补全)3. 建议按照图片帧的出现顺序依次调用接口,而非在一次请求中传入多张图片帧 |
tasks | Array<String> | 否 | 识别任务 ID,如:54bcfc6c329af61034f7c2fc 。如果需要只执行接口下的某些审核的任务,可通过此参数指定,默认执行该接口下的全部审核任务 |
language | String | 否 | 语言种类代码(预览),在进行多语种 OCR 文本审核时填写。支持的语言种类及代码列表详见:语言代码列表 |
参数名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
image | File/String | 是 | 图片 form data。 1. 支持指定多个 image 参数上传多个图片文件;2. 支持的图片格式: png 、jpg 、jpeg 、tif 、webp 、bmp 、gif 、heic ;3. 图片 base64 编码后默认限制在 1M 以内; 4. 即将废弃,优先使用图片链接或 base64 接口调用 |
timestamp | Int | 是 | 当前服务器的 Unix 时间戳 |
nonce | Float | 是 | 随机数(建议使用 Unix 时间戳或若干位随机整数) |
signature | String | 是 |
|
tag | String | 否 | 图片业务信息,后续可根据 tag 搜索对应调用记录。例如:直播场景可传房间号或主播 ID 信息。1. tag 参数和 image 参数一一对应;2. 如果 tag 只有一个,或者 tag 数量少于 image ,默认使用最后一个 tag 补全(尾补全) |
task | String | 否 | 识别任务 ID,如:54bcfc6c329af61034f7c2fc 。如果需要只执行接口下的某些审核的任务,可通过此参数指定,默认执行该接口下的全部审核任务 |
sequenceId | String | 否 | 连续帧图的组别 ID,例如直播间 ID 等,基于此 ID 进行该 ID 组别下的连续帧相似度识别(启用连续帧相似度识别服务必传)。 1. sequenceId 参数和 image 参数按照顺序一一对应;2. 需要保证同一 sequenceId 下的图片帧,在同一请求中唯一,并且在不同请求间按照时间顺序有一定的间隔(防止乱序);3. 建议按照图片帧的出现顺序依次调用接口,而非在一次请求中传入多张图片帧 |
referer | String | 否 | 下载图片时,请求在 HTTP Header 中携带的 Referer,用于图片防盗链 |
language | String | 否 | 语言种类代码(预览),在进行多语种 OCR 文本审核时填写。支持的语言种类及代码列表详见:语言代码列表 |
2.6 请求示例
- 图片链接
- 图片 base64
- 图片 form-data(待废弃)
{
"image": [
"<url>"
],
"tag": [
"<tag>"
],
"nonce": 1685000000,
"timestamp": 1685000000,
"signature": "<signature>"
}
{
"images": [
"<base64>"
],
"tags": [
"<tag>"
],
"nonce": 1685000000,
"timestamp": 1685000000,
"signature": "<signature>"
}
image: <form-data>
tag: <tag>
nonce: 1685000000
timestamp: 1685000000
signature: <signature>
3. 同步响应
3.1 响应参数说明 🔥🔥
参数名称 | 类型 | 说明 |
---|---|---|
signature | String | 同步响应或回调请求签名,由图普使用私钥签名,在需要时,您可以通过 图普公钥
进行验签以确保此响应内容来自图普(与您调用接口时使用的公私钥不同)。验签步骤:
|
json | String | 同步响应或回调请求经过 JSON 转义后的字符串,需进一步解析得到业务数据。
|
JSON 参数说明
参数名称 | 类型 | 是否必有 | 说明 |
---|---|---|---|
code | Int | 是 | 请求状态码,详见 业务状态码 |
message | String | 是 | 状态信息 |
summary | Array<Summary> | 是 | 应用下所有任务的汇总结果,数组长度与入参图片数量对应,汇总结果详见 汇总结果解析。summary 参数详见 Summary 参数说明 |
imageInfo | ImageInfo | 否 | 图片进行了预处理时(动态图片拆分静态图片、长图切分),解析到的图片信息。详见 ImageInfo 参数说明 |
<任务 ID> | Object | 是 | 识别任务的结果,每个识别任务会有 全局固定不变 的 taskId 和对应数据结构,详见下述链接:1. 图片类任务结果 2. 文本类任务结果 3. 语音类任务结果 |
timestamp | Int | 是 | 当前服务器的 Unix 时间戳 |
nonce | Float | 是 | 随机数(建议使用 Unix 时间戳或若干位随机整数) |
Summary 参数说明
参数名称 | 类型 | 是否必有 | 说明 |
---|---|---|---|
code | Int | 是 | 图片识别状态码,详见 业务状态码 |
name | String | 是 | 图片 url 或文件名 |
suggestion | Int | 否 | 汇总结果,图片整体的通过/拒绝情况,详见 审核场景汇总结果说明 |
riskType | Int | 否 | 汇总结果,图片整体的风险类型,详见 审核场景汇总结果说明 |
riskTask | String | 否 | 风险任务 ID |
tag | String | 否 | 图片业务信息 |
ImageInfo 参数说明
参数名称 | 类型 | 是否必有 | 说明 |
---|---|---|---|
type | String | 是 | 图片类型,取值如:gif 、webp 、jpg |
extracted | Boolean | 否 | 预处理时,动态图片是否拆分静态图片 |
cropped | Boolean | 否 | 预处理时,长图是否切分 |
resolution | String | 否 | 预处理长图切分时,图片切分前的分辨率,格式为 <height>x<width> |
count | Int | 否 | 预处理动态图片拆分静态图片时,拆分的静态图片数量;或预处理长图切分时,图片切分的数量 |
originalName | String | 否 | 预处理动态图片拆分静态图片或长图切分时,图片原始名称 |
3.2 审核结果解析伪代码
下述给出不同使用场景下,解析审核结果的伪代码示例供参考。
3.2.1 仅关注图片是否违规,以及是否需要复审
// 1. 解析审核结果的 json 字段
result = JSON.parse(Response.json)
// 2. 校验请求整体是否处理成功,否的话进入整体错误处理流程
if (result.code != 0) {
handleError(result)
return
}
// 3. 遍历汇总结果,检查每张图片的汇总结果
for (const summary of result.summary) {
// 3.1 校验该图片是否处理成功,否的话进入单条数据错误处理流程
if (summary.code != 0) {
handleError(summary)
continue
}
switch (summary.suggestion) {
// 3.2 汇总通过,进入正常数据处理流程
case 0:
handlePass(result)
continue
// 3.3 汇总拒绝,疑似违规,进入违规数据处理流程
case 1:
handleReject(result)
continue
// 3.4 汇总复审,可能违规,进入数据人工复审处理流程
case 2:
handleReview(result)
continue
}
}
3.2.2 当图片疑似违规时,解析风险类型
// 1. 解析审核结果的 json 字段
result = JSON.parse(Response.json)
// 2. 校验请求整体是否处理成功,否的话进入整体错误处理流程
if (result.code != 0) {
handleError(result)
return
}
// 3. 遍历汇总结果,检查每张图片的汇总结果,解析风险类型
for (const summary of result.summary) {
if (summary.code == 0 && summary.suggestion == 1) {
handleRiskType(summary.riskType)
}
}
3.3 响应示例
{
"code": 0,
"message": "success",
"summary": [
{
"code": 0,
"message": "success",
"name": "<name>",
"suggestion": 0,
"riskType": 1,
"riskTask": "<风险任务 id>",
"tag": "<tag>"
},
{
"code": 14,
"message": "download failed",
"name": "<name>",
"tag": "<tag>"
}
],
"54bcfc6c329af61034f7c2fc": {
"fileList": [
{
"name": "<name>",
"tag": "<tag>",
"label": 2,
"review": false,
"rate": 0.9927366971969604,
"subLabels": [
{
"label": "隐晦性行为",
"rate": 0.989293
},
{
"label": "女性只露肩膀",
"rate": 0.774093
}
]
}
]
},
"nonce": 1685000000,
"timestamp": 1685000000
}
4. 更新日志
日期 | 说明 |
---|---|
2025-01-03 | 新增接入指南 |
2024-12-20 | 新增 language 参数(预览),用于在进行多语种识别时,指定语言种类 |
2024-12-18 | 新增《审核结果解析伪代码》章节,为如何解析审核结果提供参考 |