这里是关于AI视觉平台API接口说明。
| 日期 | 更新内容 | 版本 | 修订人 |
|---|---|---|---|
| 20250828 | 创建 | 1.0 | 杨帆 |
| 20250828 | 去鸟类识别入参lang | 1.0.1 | 杨帆 |
| 20250904 | 鸟类识别接口增加反参 detScore检测置信度;入参增加detConf | 1.0.2 | 杨帆 |
| 20250916 | /api/rec-everything 增加familyId入参;增加人脸库相关接口 | 1.0.3 | 杨帆 |
| 20250923 | 新增宠物识别接口POST | 1.1.0 | 杨帆 |
| 20250929 | 新增 视频描述接口 | 1.2.0 | 杨帆 |
| 20251030 | 修改鸟类和野生动物的接口 | 1.2.1 | 杨再旺 |
https://api.example.comhttps://api.example-test.com所有请求都需要在HTTP头部包含以下信息:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| Content-Type | 是 | string | 应设置为application/json |
| token | 是 | string | 用户认证令牌 |
| 错误码 | 说明 |
|---|---|
| 200 | 请求成功 |
| 400 | 请求参数错误 |
| 401 | 未授权,请传递正确的身份验证信息 |
| 500 | 服务器内部错误 |
/api/rec-everything
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sn | string | 是 | 请求序列号,最长 50 字符,格式 :${uuid}_yyyyMMddHHmmss,例如6615572811fc410c9c68170386961fcd_20260310060250 |
| images.url | string | 否 | 图片网络地址(jpeg/jpg,≤2M) |
| images.bytes | string | 否 | 图片 Base64 编码(URL 安全),与 url 二选一 |
| images.id | string | 是 | 图片唯一标识,最长 32 字符 |
| images.originId | string | 是 | 设备原始 ID |
| images.fino | boolean | 否 | 是否为四张图拼接图像 |
| images.type | array | 是 | 返回类型:["tags"]、["describe"] 或两者 |
| images.familyId | string | 否 | 传入此字段开启人脸库比对(字段为通过人脸库API录入人脸的familyId),比中人脸,则将人脸库中人脸对应信息传入理解引擎中 |
| images.lang | string | 是 | 返回结果语言(如 zh, en) |
| minObjectConfidence | number | 否 | 最小识别置信度(0-100),默认 50 |
⚠️ url 和 bytes 必须有一个非空。
请求示例
{
"sn": "6615572811fc410c9c68170386961fcd_20260310060250",
"images": [
{
"url": "https://example.com/image.jpg",
"bytes": "base64_encoded_string",
"id": "10000",
"originId": "",
"fino": false,
"type": ["tags", "describe"],
"lang": "zh",
"familyId":"10001"
}
],
"minObjectConfidence": 50
}
| 字段 | 类型 | 说明 |
|---|---|---|
| sn | string | 客户端传入的请求序列号 |
| results | array | 识别结果数组,每项对应一张图片 |
| results.imageId | string | 对应请求中的图片 id |
| results.error | string | 错误信息(如下载失败、解析失败),无错为空 |
| results.tags | array | 识别出的物体标签列表 |
| results.tags.name | string | 物体名称(如 "person"、"car") |
| results.tags.confidence | number | 识别置信度(0-100) |
| results.describe | string | 图像内容描述文本 |
| results.downloadCostMs | number | 图片下载耗时(毫秒) |
| results.engineCostMs | number | 算法处理耗时(毫秒) |
| costMs | number | 服务器总耗时(毫秒) |
| serverSn | string | 服务端生成的流水号,用于日志追踪 |
// 成功
{
"sn": "123456",
"results": [
{
"imageId": "10000",
"error": "",
"tags": [
{
"name": "person",
"confidence": 85
},
{
"name": "tree",
"confidence": 76
}
],
"describe": "一个人站在公园里,周围有树木和草地。",
"downloadCostMs": 120,
"engineCostMs": 180
}
],
"costMs": 300,
"serverSn": "srv_12345"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
/api/rec-everything-video
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sn | string | 是 | 请求序列号,最长 50 字符,格式 :${uuid}_yyyyMMddHHmmss,例如6615572811fc410c9c68170386961fcd_20260310060250 |
| videos.url | string | 否 | 视频网络地址(≤10M) |
| videos.bytes | string | 否 | 图片 Base64 编码(URL 安全),与 url 二选一 |
| videos.id | string | 是 | 图片唯一标识,最长 32 字符 |
| videos.originId | string | 是 | 设备原始 ID |
| videos.type | array | 是 | 返回类型:["tags"]、["describe"] 或两者 |
| videos.lang | string | 是 | 返回结果语言(如 zh, en) |
| minObjectConfidence | number | 否 | 最小识别置信度(0-100),默认 50 |
| combine | number | 否 | 默认0,0:不合并 1:合并 |
⚠️ url 和 bytes 必须有一个非空。
请求示例
{
"sn": "123456",
"videos": [
{
"url": "https://example.com/video.mp4",
"bytes": "base64_encoded_string",
"id": "10000",
"originId": "",
"type": ["tags", "describe"],
"lang": "zh"
}
],
"minObjectConfidence": 50,
"combine": 1
}
| 字段 | 类型 | 说明 |
|---|---|---|
| sn | string | 客户端传入的请求序列号 |
| results | array | 识别结果数组,每项对应一份视频 |
| results.id | string | 对应请求中的视频 id |
| results.error | string | 错误信息(如下载失败、解析失败),无错为空 |
| results.tags | array | 识别出的物体标签列表 |
| results.tags.name | string | 物体名称(如 "person"、"car") |
| results.tags.confidence | number | 识别置信度(0-100) |
| results.describe | string | 图像内容描述文本 |
| results.downloadCostMs | number | 图片下载耗时(毫秒) |
| results.engineCostMs | number | 算法处理耗时(毫秒) |
| costMs | number | 服务器总耗时(毫秒) |
| serverSn | string | 服务端生成的流水号,用于日志追踪 |
// 成功
{
"sn": "123456",
"results": [
{
"id": "10000",
"error": "",
"tags": [
{
"name": "person",
"confidence": 85
},
{
"name": "tree",
"confidence": 76
}
],
"describe": "一个人站在公园里,周围有树木和草地。",
"downloadCostMs": 120,
"engineCostMs": 180
}
],
"costMs": 300,
"serverSn": "srv_12345"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
/api/bird_rec
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
sn |
string | 是 | 请求序列号,最长 50 字符,格式 :${uuid}_yyyyMMddHHmmss,例如6615572811fc410c9c68170386961fcd_20260310060250 |
images.id |
string | 是 | 图片 ID,用于匹配结果 |
images.bytes |
string | 是 | 图⽚的base64url字符串,⽂件⼤⼩不超过2M |
images.url |
string | 是 | 图⽚⽂件地址,⽂件格式⽀持jpeg,jpg,⽂件⼤⼩不超过2M |
images.originId |
string | 是 | 设备原始 ID |
birdDetConf |
float | 否 | 鸟类置信度阈值,低于传入值的结果抛弃,默认值25 |
squDetConf |
float | 否 | 松鼠置信度阈值,低于传入值的结果抛弃,默认值25 |
| lang | string | 否 | 中⽂:zh, 英⽂: en, 默认en |
⚠️ url 和 bytes 必须有一个非空。
请求示例
{
"sn": "12345",
"lang": "en",
"images": [
{
"id": "10000",
"bytes": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJ...",
"originId": "",
"url": ""
}
],
"birdDetConf": 25,
"squDetConf": 25
}
| 字段 | 类型 | 说明 |
|---|---|---|
sn |
string | 客户端传入的请求序列号 |
results |
array | 识别结果数组 |
results.imageId |
string | 对应请求中的图片 id |
results.error |
string | 错误信息,无错为空 |
results.category |
- 具体鸟类名称(如 "Magpie") - NoBirds:未检测到鸟- UnknownBirds:检测到鸟但无法识别 |
|
results.category |
object | 根据请求参数 lang 返回对应的释义 |
results.detScore |
float | 检测置信度(0-100) |
results.downloadCostMs |
number | 图片处理下载耗时(毫秒) |
results.engineCostMs |
number | 算法引擎处理耗时(毫秒) |
costMs |
number | 服务器总耗时(毫秒) |
serverSn |
string | 服务端流水号 |
响应示例
// 成功
{
"sn": "123456",
"results": [
{
"imageId": "10000",
"error": "",
"category": {
"en": "bird",
"zh": "鸟"
},
"detScore": 97.62,
"downloadCostMs": 90,
"engineCostMs": 150
}
],
"costMs": 240,
"serverSn": "srv_0001"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
/api/wild_animals_rec
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
sn |
string | 是 | 请求序列号,最长 50 字符,格式 :${uuid}_yyyyMMddHHmmss,例如6615572811fc410c9c68170386961fcd_20260310060250 |
lang |
string | 否 | 输出语言(zh, en) |
images.id |
string | 是 | 图片 ID,用于匹配结果 |
images.bytes |
string | 是 | 图⽚的base64url字符串,⽂件⼤⼩不超过2M |
images.url |
string | 是 | 图⽚⽂件地址,⽂件格式⽀持jpeg,jpg,⽂件⼤⼩不超过2M |
animalDetConf |
float | 否 | 动物置信度阈值,低于传入值的结果抛弃,默认值20 |
personDetConf |
float | 否 | 人置信度阈值,低于传入值的结果抛弃,默认值50 |
⚠️ url 和 bytes 必须有一个非空。
请求示例
{
"sn": "wild_req_001",
"lang": "zh",
"animalDetConf": 20,
"personDetConf": 50,
"images": [
{
"url": "https://example.com/wildlife.jpg",
"bytes": "base64_encoded_string",
"id": "img_wild_001"
}
]
}
| 字段 | 类型 | 说明 |
|---|---|---|
sn |
string | 客户端传入的请求序列号 |
results |
array | 识别结果数组 |
results.imageId |
string | 对应请求中的图片 id |
results.error |
string | 错误信息,无错为空 |
results.category |
- 具体动物名称(如 "Deer"、"Bear") - NoWildAnimals:未检测到野生动物- UnknownWildAnimals:检测到动物但无法识别 |
|
results.category |
dict | 类别信息,例如: - {"la": "NoWildAnimals","zh": "未检测到野生动物"} - {"la": "NoWildAnimals","en": "NoWildAnimals"} - {"la": "UnknownWildAnimals","zh": "未知品种野生动物"} - {"la": "UnknownWildAnimals","en": "UnknownWildAnimals"} - {"la": "Person","zh": "人"} - {"la": "Person","en": "Person"} - {"la": "Antilocapra americana","zh": "叉角羚"} |
results.detScore |
float | 检测置信度(0-100) |
results.categoryScore |
float | 类别置信度(0-100) |
results.downloadCostMs |
number | 图片处理下载耗时(毫秒) |
results.engineCostMs |
number | 算法引擎处理耗时(毫秒) |
costMs |
number | 服务器总耗时(毫秒) |
serverSn |
string | 服务端流水号 |
响应示例
// 成功
{
"sn": "wild_req_001",
"results":[
{
"imageId": "test2",
"error": "",
"category": {
"la": "Antilocapra americana",
"zh": "叉角羚"
},
"detScore": 95.9,
"categoryScore": 93.83,
"downloadCostMs": 2,
"engineCostMs": 29
}
],
"costMs": 270,
"serverSn": "srv_wild_901"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
/api/detect-pet-action
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
sn |
string | 是 | 请求序列号,最长 50 字符,格式 :${uuid}_yyyyMMddHHmmss,例如6615572811fc410c9c68170386961fcd_20260310060250 |
originId |
string | 否 | 摄像头id |
lang |
string | 否 | 输出语言(zh, en),默认en |
videos.id |
string | 是 | 视频ID,响应时以此为对应依据,最长32个字符 |
videos.url |
string | 是 | 视频文件地址,文件格式支持MPEG2-TS,文件大小不超过20M |
notifyUrl |
string | 否 | 通知URL, 若存在则异步任务,否则同步 |
请求示例
{
"sn": "123456",
"originId": "abc123",
"lang": "en",
"videos": [
{
"url": "http://xxxx",
"id": "123456"
}
],
"notifyUrl": "http://xx"
}
| 字段 | 类型 | 说明 |
|---|---|---|
sn |
string | 应用传入的服务序列号,如果是异步模式下,响应只包含此字段 |
results |
array | 识别结果数组 |
results.videoId |
string | 应用传入的视频ID |
results.error |
string | 出错信息,例如视频解码失败,视频文件下载失败等等 |
results.objects |
array | 在视频中出现的宠物数组 |
results.objects.name |
string | 宠物的分类名称,目前支持cat、dog、animal(针对无法判断是猫是狗的情况) |
results.actions |
array | 在视频中出现的宠物数组 |
results.actions.name |
array | 动作分类名称,目前支持 lie、eat、jump、sniff、sleep、urinate、defecate |
results.description |
number | 使用lang字段指定的语言进行动作描述 |
results.downloadCostMs |
number | 视频处理下载耗时(毫秒) |
results.engineCostMs |
number | 算法引擎处理耗时(毫秒) |
costMs |
number | 服务器总耗时(毫秒) |
serverSn |
string | 服务端流水号 |
响应示例
// 成功
{
"sn": "xxx",
"results": [
{
"videoId": "",
"error": "",
"objects": [
{
"name": "cat"
}
],
"actions": [
{
"name": "lie"
}
],
"description": "a cat is lying in a cat bed.",
"downloadCostMs": 100,
"engineCostMs": 100
}
],
"costMs": 300,
"serverSn": "xxx"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
应用端在接收到此响应后,服务端会在未来一段时间内以sn为关联键将结果(与同步模式响应相同)推送(POST)到notifyUrl指定的地址,
该地址应响应200代码,服务端将最多尝试3次推送,间隔10秒,如果失败则将结果丢弃
/api/video_describe
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
sn |
string | 是 | 请求序列号,最长 50 字符,格式 :${uuid}_yyyyMMddHHmmss,例如6615572811fc410c9c68170386961fcd_20260310060250 |
lang |
string | 否 | 输出语言(zh, en),默认en |
video.id |
string | 是 | 视频ID,响应时以此为对应依据,最长32个字符 |
video.url |
string | 否 | 视频文件地址,文件格式支持MPEG2-TS,文件大小不超过10M |
video.bytes |
string | 否 | 视频文件base64url字符串,文件大小不超过10M |
请求示例
{
"sn": "12345",
"lang": "en",
"video": {
"id": "1234567",
"url": "https://example.com/wildlife.jpg",
"bytes": "base64_encoded_string"
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
sn |
string | 应用传入的服务序列号,如果是异步模式下,响应只包含此字段 |
id |
string | 应用传入的视频ID |
error |
string | 出错信息,例如视频解码失败,视频文件下载失败等等 |
results |
number | 描述内容 |
downloadCostMs |
number | 视频处理下载耗时(毫秒) |
engineCostMs |
number | 算法引擎处理耗时(毫秒) |
costMs |
number | 服务器总耗时(毫秒) |
serverSn |
string | 服务端流水号 |
响应示例
// 成功
{
"id" : "123456",
"results" : "画面中未出现人物,因此无法提供关于人物穿着、动作、意图及互动情况的描述。 \n**场景描述**:画面呈现的是一个室内空间(可能为等候区、休息区或会议室),背景为大面积玻璃窗,窗外可见高楼建筑和少量绿植。室内靠窗位置摆放有黑色座椅,座椅旁似乎有垂挂的装饰物(如珠链),前景中隐约可见深色的桌面边缘。整体画面呈现重复排列的视觉效果,可能是监控画面的多帧连续截图拼接。",
"inputToken" : 1682,
"outputToken" : 111,
"error" : " ",
"sn" : "12345678",
"serverSn" : "beijing-volcengine",
"costMs" : 1002
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
/api/chat_completion
所有请求都需要在HTTP头部包含以下信息:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| Content-Type | 是 | string | 应设置为application/json |
| Authorization | 是 | string | 用户认证令牌当前固定传 Bearer 49e5rdc8-8ws8-4rbf-agt3-88077x7s6232 |
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
| model | string | 是 | 要调用的模型名称(例如 "ivsign-l") |
| messages | array of objects | 是交互消息列表, 支持 “user/system” 角色发起 | |
| messages[].role | string | 是 | 消息角色,支持 "user/system" |
| messages[].content | array | 是 | 内容数组,可混合文本、图片、视频 |
| content[].type | string | 是 | 内容类型,支持 "text"、"image_url"、"video_url" |
| content[].text | string | 当 type==“text” 时 必填 | 文本输入内容 |
| content[].image_url.url | string | 当 type==“image_url” 时 必填 | 图片资源链接或 base64 data URL 最小1kb,最大2M |
| content[].video_url.url | string | 当 type==“video_url” 时 必填 | 视频资源链接或 base64 data URL 最小1kb,最大5M |
| max_tokens | integer | 否 | 模型生成的最大 token 数 |
| temperature | float | 否 | 生成随机性控制 |
| top_p | float | 否 | nucleus sampling 的累积分布阈值 |
| stop | string 或 array | 否 | 停止生成的令牌或令牌组 |
| top_k | integer | 否 | top-k 采样限制 |
| min_p | float | 否 | 最低概率采样限制 |
注意
文本内容必须上传,图片和视频不能同时上传,并且一次只能传一份图片或者视频。model当前使用ivsign-l
请求示例
{
"model": "ivsign-l",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "<用户文本输入>"
},
{
"type": "image_url",
"image_url": {
"url": "<图片1的 URL 或 base64 data URL>"
}
},
{
"type": "video_url",
"video_url": {
"url": "<视频的 URL 或 base64 data URL>"
}
}
]
}
],
"max_tokens": 512,
"temperature": 0.3,
"top_p": 0.9,
"stop": null,
"top_k": 0,
"min_p": 0
}
| 字段 | 类型 | 描述 |
|---|---|---|
| id | string | 本次生成的唯一标识 |
| object | string | 固定值 "chat.completion" |
| created | integer | Unix 时间戳,表示生成完成的时间 |
| model | string | 被调用的模型名称(例如 "ivsign-l") |
| error | string | 异常信息 |
| choices | array | 返回的生成选项列表,通常包含一个元素 |
| choices[].index | integer | 该选项的索引(0 表示第一个) |
| choices[].message.role | string | 消息角色,此处为 "assistant" |
| choices[].message.content | string | 模型的回复文本 |
| choices[].finish_reason | string | 生成结束原因,如 "stop"、"len" 等 |
响应示例
// 成功
{
"status": "200",
"message": "SUCCESSFUL",
"data": {
"id": "chatcmpl_2225d86c",
"object": "chat.completion",
"created": 1762584866,
"dateTime": "2025-11-08 14:54:26",
"model": "ivsign-l",
"error": null,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "This is an image of a Blue Jay, a bird known for its vibrant blue and white plumage"
},
"finish_reason": "stop"
}
]
}
}
// 失败
{
"status": "400",
"message": "XXX"
}
api/face/save
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| memberId | 是 | string | 家庭成员ID(更新时用于确认成员信息,家庭内唯一) |
| memberName | 是 | string | 家庭成员名称 |
| familyId | 是 | string | 所属家庭ID,用于限制人脸识别比对范围(更新时用于确认成员信息) |
| faceImage | 是 | String | 人脸图像Base64 |
{
"memberId":"10001",
"memberName":"男主人",
"familyId":"100001",
"faceImage":"/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAA...."
}
// 成功
{
"status": 200,
"message": "success"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
{
"status": 402,
"message": "未检测到人脸"
}
api/face/query
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| familyId | 是 | string | 所属家庭ID,用于限制人脸识别比对范围(更新时用于确认成员信息) |
{
"familyId":"100001"
}
// 成功
{
"status": 200,
"message": "success",
"members": [
{
"memberId": "10001",
"memberName": "男主人",
"familyId": "100001",
"faceImage": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAA...."
},
{
"memberId": "10002",
"memberName": "女主人",
"familyId": "100001",
"faceImage": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAA...."
}
]
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}
api/face/delete
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| memberId | 是 | string | 用户ID |
| familyId | 是 | string | 所属家庭ID |
{
"memberId":"10001",
"familyId":"100001"
}
// 成功
{
"status": 200,
"message": "success"
}
// 失败
{
"status": 400,
"message": "请求参数错误"
}