API Path
/aipaas/cv/v2/image/2102002
请求协议
HTTPS
请求方法
POST
请求头部 :
| 头部标签 | 必填 | 说明 | 类型 | 数据字典 | 限制 | 头部内容 | 示例 |
|---|---|---|---|---|---|---|---|
| Content-Type | 是 | application/json | [string] | application/json | application/json | ||
| X-APP-ID | 是 | 买家中心-已购能力-【X-APP-ID】 | [string] | ||||
| Device-Uuid | 是 | 设备管理-设备uuid | [string] | ||||
| Authorization | 是 | 新鉴权调用时必传 | [string] |
请求参数 Json
Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| code | 请求状态码,固定1019 | 是 | [int] | 1019 | ||
| data | 算法参数 | 是 | [object] | |||
| data>>task_id | 算法任务id | 是 | [string] | 0d04322bee08401a9c15a5ef8643e64f | ||
| data>>camera_id | 设备编码 | 是 | [string] | A15414521025 | ||
| data>>algo_tasks | 算法参数数组 | 是 | [array] | |||
| data>>algo_tasks>>algo_config | 单个参数信息 | 是 | [object] | |||
| data>>algo_tasks>>algo_config>>version | 参数版本号,本业务不使用 | 否 | [string] | 1.0.0 | ||
| data>>algo_tasks>>algo_config>>algo_roi | roi区域配置【如果算法不支持roi,忽略此参数解析】 | 是 | [object] | |||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_type | roi坐标类型,1-绝对坐标,2-相对坐标【is_full_region为true时为非必填】 | 是 | [int] | 1:绝对坐标,2:相对坐标 | 1 | |
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list | 设定区域列表【is_full_region为false时为必填】 | 否 | [array] | |||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>name | 区域id,需全局唯一 | 是 | [string] | 61b3a095eb0bc49 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>point_list | 区域坐标点集【由算法内部判断,画线至少需要2个点,画多边形区域至少需要3个点】 | 是 | [array] | |||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>point_list>>x | X轴坐标 | 是 | [float] | 0.0 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>roi_list>>point_list>>y | Y轴坐标 | 是 | [float] | 1.0 | ||
| data>>algo_tasks>>algo_config>>algo_roi>>is_full_region | 是否全景图,true-是,false-否 | 是 | [boolean] | true:是,false:否 | true | |
| data>>algo_tasks>>algo_config>>algo_roi>>region_mode | 区域模式,1 中心点在区域内 其他报错 | 是 | [int] | 1:检测框中心点在区域内即代表检测目标在区域内,2:检测框脚点在区域内即代表检测目标在区域内,3:检测框中心点与脚点同时在区域内即代表检测目标在区域内,4:检测框中心点或脚点在区域内即代表检测目标在区域内 | 1 | |
| data>>algo_tasks>>algo_config>>extra_params | 额外参数,本业务未使用 | 否 | [array] | |||
| data>>algo_tasks>>algo_config>>extra_params>>key | 参数名 | 是 | [string] | |||
| data>>algo_tasks>>algo_config>>extra_params>>value | 参数值 | 是 | [string] | |||
| data>>image | 图片Base64(jpeg格式base64编码)【和image二选一,优先使用image字段】 | 是 | [string] | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC |
响应内容 :
返回结果
> 成功 (200)
> Json
> Object
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| code | 算法类型,固定1020 | 是 | [int] | 1020 | ||
| data | 算法调用结果 | 是 | [object] | |||
| data>>error_code | 错误码,值为APP_ERR_OK则为成功 | 是 | [string] | APP_ERR_OK | ||
| data>>display_image | 图片jpeg编码,图片流为空 | 是 | [string] | |||
| data>>error_message | 错误描述 | 是 | [string] | 正常状态 | ||
| data>>camera_id | 创建任务时传入的设备编码 | 是 | [string] | A15414521025 | ||
| data>>task_id | 创建任务时传入的算法任务id | 是 | [string] | 0d04322bee08401a9c15a5ef8643e64f | ||
| data>>frame_id | 视频帧id | 是 | [string] | 0d04322bee08401a9c15a5ef8sldufj8 | ||
| data>>frame_width | 图片宽度 | 是 | [string] | 1920 | ||
| data>>frame_height | 图片高度 | 是 | [string] | 1080 | ||
| data>>pull_pts_ms | 拉流的时间戳;图片流为无效值,不用取值 | 是 | [string] | |||
| data>>send_pts_ms | 告警推送时的时间戳;图片流为无效值,不用取值 | 是 | [string] | |||
| data>>algo_outputs | 算法处理结果数组 | 是 | [array] | |||
| data>>algo_outputs>>roi_message | 设定区域信息 | 否 | [object] | |||
| data>>algo_outputs>>roi_message>>name | 创建任务时传入的区域id | 是 | [string] | 61b3a095eb0bc49 | ||
| data>>algo_outputs>>roi_message>>point_list | 创建任务时传入的区域坐标点集 | 是 | [array] | |||
| data>>algo_outputs>>roi_message>>point_list>>x | 创建任务时传入的X轴坐标 | 是 | [float] | 0.0 | ||
| data>>algo_outputs>>roi_message>>point_list>>y | 创建任务时传入的Y轴坐标 | 是 | [float] | 1.0 | ||
| data>>algo_outputs>>roi_message>>extra_params | 创建任务时传入的区域其他参数,此业务未使用 | 否 | [array] | |||
| data>>algo_outputs>>roi_message>>extra_params>>key | 创建任务时传入的参数名 | 是 | [string] | alarm | ||
| data>>algo_outputs>>roi_message>>extra_params>>value | 创建任务时传入的参数值 | 是 | [string] | 1 | ||
| data>>algo_outputs>>objectinfo | 检测到的目标对象数组 | 是 | [array] | |||
| data>>algo_outputs>>objectinfo>>class_name | 目标类别名称;见详细说明 | 是 | [string] | 目标类别名称 | ||
| data>>algo_outputs>>objectinfo>>class_id | 当前目标类别id; 见详细说明 | 是 | [int] | 1 | ||
| data>>algo_outputs>>objectinfo>>rect | 对象位置坐标 | 是 | [object] | |||
| data>>algo_outputs>>objectinfo>>rect>>x0 | 左上X轴坐标 | 是 | [float] | 0.0 | ||
| data>>algo_outputs>>objectinfo>>rect>>y0 | 左上Y轴坐标 | 是 | [float] | 0.0 | ||
| data>>algo_outputs>>objectinfo>>rect>>x1 | 右下X轴坐标 | 是 | [float] | 100.0 | ||
| data>>algo_outputs>>objectinfo>>rect>>y1 | 右下Y轴坐标 | 是 | [float] | 100.0 | ||
| data>>algo_outputs>>objectinfo>>confidence | 目标置信度(0~1),未知为-1 | 是 | [float] | 0.99 | ||
| data>>algo_outputs>>objectinfo>>track_id | 目标追踪ID(图片流任务不存在跟踪) | 否 | [string] | 0d04322bee0 | ||
| data>>algo_outputs>>objectinfo>>score | 目标得分,此业务未使用,值为-1 | 否 | [float] | 0.99 | ||
| data>>algo_outputs>>objectinfo>>feature | 特征值,此业务未使用 | 否 | [array] | [0.0620517209172249, 0.0471773408353329] | ||
| data>>algo_outputs>>objectinfo>>attribute | 属性值,此业务未使用 | 否 | [array] | |||
| data>>algo_outputs>>objectinfo>>attribute>>key | 属性名称 | 是 | [string] | sex | ||
| data>>algo_outputs>>objectinfo>>attribute>>value | 属性值 | 是 | [string] | 1 | ||
| data>>algo_outputs>>objectinfo>>attribute>>score | 属性置信度(0~1),未知为-1 | 是 | [float] | 0.99 | ||
| data>>algo_outputs>>objectinfo>>extra_message | 目标额外信息,见详细说明 | 否 | [array] | |||
| data>>algo_outputs>>objectinfo>>extra_message>>key | 参数名 | 是 | [string] | |||
| data>>algo_outputs>>objectinfo>>extra_message>>value | 参数值 | 是 | [string] | |||
| data>>algo_outputs>>objectinfo>>image_message | 目标图片信息,此业务未使用 | 否 | [array] | |||
| data>>algo_outputs>>objectinfo>>image_message>>key | 图片名称 | 是 | [string] | xxx.jpg | ||
| data>>algo_outputs>>objectinfo>>image_message>>value | 图片Base64【jpeg格式base64编码】 | 是 | [string] | iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC | ||
| data>>extra_message | 额外信息,用于过大模型 | 否 | [array] | |||
| data>>extra_message>>key | 固定值:“algo_type” | 是 | [string] | |||
| data>>extra_message>>value | 固定值:"7008"用于调用大模型 | 是 | [string] | |||
| data>>image_message | 图片流值为空 | 否 | [array] |
成功示例[Mock API] :
{
"code": 1020,
"data": {
"error_code": "APP_ERR_OK",
"error_message": "",
"camera_id": "11111",
"task_id": "22222",
"frame_id": "2",
"frame_width": "1920",
"frame_height": "1080",
"send_pts_ms": "0",
"pull_pts_ms": "0",
"display_image": "",
"algo_outputs": [{
"roi_message": {
"name": "position_0",
"point_list": [{
"x": 0,
"y": 0
}, {
"x": 1920,
"y": 0
}, {
"x": 1920,
"y": 1080
}, {
"x": 0,
"y": 1080
}],
"extra_params": []
},
"objectinfo": [{
"class_name": "10101",
"rect": {
"x0": 840,
"y0": 379,
"x1": 904,
"y1": 458
},
"track_id": "",
"extra_message": [],
"image_message": [],
"feature": [],
"attribute": [],
"class_id": 0,
"confidence": 0.932349622,
"score": -1
}, {
"class_name": "10102",
"rect": {
"x0": 1264,
"y0": 643,
"x1": 1342,
"y1": 729
},
"track_id": "",
"extra_message": [],
"image_message": [],
"feature": [],
"attribute": [],
"class_id": 1,
"confidence": 0.946218848,
"score": -1
}]
}],
"extra_message": [],
"image_message": []
}
}
详细说明 :
| 版本 | 算法总集版本号 | 备注 |
|---|---|---|
| 跌倒检测(2102002)-(v1.0.0.4_v2.2.0_v3.0.0) | 初始版本 |
1.服务接口调用时需要严格遵循服务鉴权规则,新老调用鉴权方式亦存在差异。
新调用鉴权规则请参见:开发指南 - 内网签名认证方式。
2.服务调用头信息
调用时header头信息X-APP-ID,Device-Uuid,Authorization必传
区域条件:
1、 支持绝对坐标区域, roi_type为1。取值范围 x [0, frame_width], y [0, frame_height]
2、 支持归一化后的按比例要求区域,roi_type为2。取值范围 x,y分别为 [0,1]
3、 支持画多个区域(最多5个),区域点数(支持3-11个点)
4、 点的顺序要为逆时针或者顺时针,不能乱序。
5、支持任意边数多边形,不限凹凸,不支持有孔多边形,不支持自相交多边形,一个区域不允许它的点在本区域的其他边上,两个区域的范围不能重叠,区域的点坐标不能超出图片的大小范围,区域个数不能超过设定的最大值(最多5个)
6、 检测目标在区域内的判断逻辑
针对此算法而言,检测框中心点在区域内即检测目标在区域内。
7、 全图检测与区域检测的传参设置
全图检测:is_full_region=true且region_mode=1
区域检测:is_full_region=false且region_mode=1 且roi_type=1或者2 且roi_list传相应坐标值
8、objecinfo中目标检出类别及名称
| class_id | class_name | 说明 |
|---|---|---|
| 0 | fall | 跌倒 |
| 1 | normal | 正常 |
9、出参中extra_message对应key及value表
| extra_message | Array | 备注 | |
|---|---|---|---|
| "key":"alarm“ | string | 该目标是否告警 | |
| value": "1" | string | 1为告警,0为不告警; | |
| "key":"need_lm_check“ | string | 该目标是否告警 | |
| value": "1" | string | 1为需要过大模型,0为不过大模型 |
{
"code":1019,
"data": {
"task_id":file,
"camera_id":file,
"algo_tasks":[
{
"algo_config": {
"version": "",
"algo_roi": {
"is_full_region": true,
"roi_type": 1,
"region_mode": 1,
"roi_list": []
}
}
}
],
"image":load_base64_img(file)
}
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
import java.time.Duration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
public class AIPassClient {
private static final Logger logger = Logger.getLogger(AIPassClient.class.getName());
static {
// 配置日志格式
System.setProperty("java.util.logging.SimpleFormatter.format",
"[%1$tF %1$tT] [%4$-7s] %5$s %n");
}
public static void main(String[] args) {
Map result = sendPostRequest();
if (result != null) {
logger.info("请求成功: " + result);
} else {
logger.warning("请求失败");
}
}
public static Map sendPostRequest() {
try {
// 配置参数
String url = "http://url:端口/aipass/aipassweb-api/openapi/openApi/v2/ai/2102002";
// 构建请求头
Map headers = new HashMap();
headers.put("Content-Type", "application/json");
headers.put("X-APP-ID", "appid");
headers.put("Device-Uuid", "deviceUuid");
headers.put("Authorization", "yourAuthorization");
// 构建请求体
Map requestBody = buildRequestBody();
// 创建HttpClient
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(30))
.build();
// 创建HttpRequest
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.headers(buildHeadersArray(headers))
.POST(BodyPublishers.ofString(new JSONObject(requestBody).toString()))
.timeout(Duration.ofSeconds(30))
.build();
logger.info("发送POST请求到: " + url);
logger.info("请求头: " + headers);
logger.info("请求体: " + requestBody);
// 发送请求并获取响应
HttpResponse response = client.send(request, BodyHandlers.ofString());
// 处理响应
if (response.statusCode() == 200) {
Map result = parseJsonResponse(response.body());
logger.info("POST请求成功");
return result.get("data") != null ?
(Map) result.get("data") :
result;
} else {
logger.warning("POST请求失败,状态码: " + response.statusCode());
logger.warning("响应内容: " + response.body());
return null;
}
} catch (Exception e) {
logger.severe("请求异常: " + e.getMessage());
return null;
}
}
private static Map buildRequestBody() {
Map body = new HashMap();
body.put("code", 0);
body.put("llm_check", 0);
Map data = new HashMap();
data.put("task_id", "0d04322bee08401a9c15a5ef8643e64f");
data.put("camera_id", "A15414521025");
List<Map> algoTasks = new ArrayList();
Map algoTask = new HashMap();
Map algoConfig = new HashMap();
algoConfig.put("version", "1.0.0");
Map algoRoi = new HashMap();
algoRoi.put("roi_type", 1);
List<Map> roiList = new ArrayList();
Map roi = new HashMap();
roi.put("name", "61b3a095eb0bc49");
List<Map> pointList = new ArrayList();
Map point = new HashMap();
point.put("x", 0.0);
point.put("y", 1.0);
pointList.add(point);
roi.put("point_list", pointList);
List<Map> extraParams = new ArrayList();
Map param = new HashMap();
param.put("key", "type");
param.put("value", "1");
extraParams.add(param);
roi.put("extra_params", extraParams);
roiList.add(roi);
algoRoi.put("roi_list", roiList);
algoRoi.put("is_full_region", true);
algoRoi.put("region_mode", 1);
algoConfig.put("algo_roi", algoRoi);
List<Map> configExtraParams = new ArrayList();
Map configParam = new HashMap();
configParam.put("key", "");
configParam.put("value", "");
configExtraParams.add(configParam);
algoConfig.put("extra_params", configExtraParams);
algoTask.put("algo_config", algoConfig);
algoTasks.add(algoTask);
data.put("algo_tasks", algoTasks);
// 图片数据(base64编码)
data.put("image", "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQoAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC");
data.put("image_url", "http://10.127.156.152:8081/bucket/f7884c2f-0efc-42ae-0372-e30eddddc53b.jpg");
body.put("data", data);
return body;
}
private static String[] buildHeadersArray(Map headers) {
List headerList = new ArrayList();
for (Map.Entry entry : headers.entrySet()) {
headerList.add(entry.getKey());
headerList.add(entry.getValue());
}
return headerList.toArray(new String[0]);
}
@SuppressWarnings("unchecked")
private static Map parseJsonResponse(String json) {
try {
return new JSONObject(json).toMap();
} catch (Exception e) {
logger.warning("解析JSON响应失败: " + e.getMessage());
return null;
}
}
// 简单的JSONObject实现(实际项目中建议使用Jackson或Gson)
static class JSONObject {
private final Map map;
public JSONObject(Map map) {
this.map = map;
}
public String toString() {
StringBuilder sb = new StringBuilder("{");
boolean first = true;
for (Map.Entry entry : map.entrySet()) {
if (!first) sb.append(",");
first = false;
sb.append("\"").append(entry.getKey()).append("\":");
Object value = entry.getValue();
if (value instanceof String) {
sb.append("\"").append(value).append("\"");
} else if (value instanceof Map) {
sb.append(new JSONObject((Map) value).toString());
} else if (value instanceof List) {
sb.append(listToString((List) value));
} else {
sb.append(value);
}
}
sb.append("}");
return sb.toString();
}
private String listToString(List list) {
StringBuilder sb = new StringBuilder("[");
boolean first = true;
for (Object item : list) {
if (!first) sb.append(",");
first = false;
if (item instanceof Map) {
sb.append(new JSONObject((Map) item).toString());
} else if (item instanceof String) {
sb.append("\"").append(item).append("\"");
} else {
sb.append(item);
}
}
sb.append("]");
return sb.toString();
}
@SuppressWarnings("unchecked")
public Map toMap() {
return map;
}
}
}
import requests
import json
def send_post_request():
"""
发送POST请求到AI算法接口 (2102002)
"""
try:
# 配置参数
url = "http://url:端口/aipass/aipassweb-api/openapi/openApi/v2/ai/2102002"
headers = {
"Content-Type": "application/json",
"X-APP-ID": "appid",
"Device-Uuid": "deviceUuid",
"Authorization": "yourAuthorization"
}
# 构建请求体 - 与Java代码完全对应
data = {
"code": 0,
"llm_check": 0,
"data": {
"task_id": "0d04322bee08401a9c15a5ef8643e64f",
"camera_id": "A15414521025",
"algo_tasks": [{
"algo_config": {
"version": "1.0.0",
"algo_roi": {
"roi_type": 1,
"roi_list": [{
"name": "61b3a095eb0bc49",
"point_list": [{"x": 0.0, "y": 1.0}],
"extra_params": [{"key": "type", "value": "1"}]
}],
"is_full_region": True,
"region_mode": 1
},
"extra_params": [{"key": "", "value": ""}]
}
}],
"image": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAAAFVBMVEX////7ODj+z8/9eHj9m5v9s7P7TEwZgBMVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAATklEQVQokd2NQQqAQAzEMjNd//9kUXEXFw8eBMEcCiUlha9p8lspC6ukwDZHeBcBNcvUJICkAjwVheV2k4pUkMvzWo5U307kLiSNkz+wAvF5AMTthEMUAAAAAElFTkSuQmCC",
"image_url": "http://10.127.156.152:8081/bucket/f7884c2f-0efc-42ae-0372-e30eddddc53b.jpg"
}
}
# 发送POST请求
response = requests.post(url, headers=headers, json=data, timeout=30)
# 处理响应
if response.status_code == 200:
result = response.json()
data = result.get("data")
print("POST请求成功")
return data
else:
print(f"POST请求失败,状态码: {response.status_code}")
return None
except Exception as e:
print(f"请求异常: {e}")
return None
# 使用示例
if __name__ == "__main__":
result = send_post_request()
if result:
print("请求成功:", result)
else:
print("请求失败")