API Path
/aipaas/live/v1/image/liveDetection
请求协议
HTTPS
请求方法
POST
请求头部 :
| 头部标签 | 必填 | 说明 | 类型 | 数据字典 | 限制 | 头部内容 | 示例 |
|---|---|---|---|---|---|---|---|
| Content-Type | 是 | application/json | [string] | application/json | application/json | ||
| X-APP-ID | 是 | 控制台-应用管理-创建应用-AppID | [string] | ||||
| Device-Uuid | 否 | 设备管理-设备uuid | [string] | ||||
| Authorization | 是 | 鉴权信息 | [string] |
请求参数 Json:
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| code | 必须为1019,图片流创建任务 | 是 | [int] | |||
| data | 请求数据 | 是 | [object] | |||
| data>>cameraId | 设备ID | 是 | [string] | |||
| data>>taskId | 任务ID | 是 | [string] | |||
| data>>algoTasks | 任务列表,目前仅单任务 | 是 | [array] | |||
| data>>algoTasks>>algoTask | 必须为1034,任务类型 | 是 | [int] | |||
| data>>algoTasks>>algoConfig | 任务请求配置信息 | 是 | [object] | |||
| data>>algoTasks>>algoConfig>>algo_type | 任务类型(自定义,无影响) | 否 | [string] | |||
| data>>algoTasks>>algoConfig>>version | 版本信息(自定义,无影响) | 否 | [string] | |||
| data>>algoTasks>>algoConfig>>algo_desc | 描述信息(自定义,无影响) | 否 | [string] | |||
| data>>algoTasks>>algoConfig>>auoraliving | 任务参数 | 是 | [object] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>service_type | 服务模式选择 (0:炫彩活体;1:静默活体;2:单炫彩; 无字段为炫彩活体;输入其它数字为静默活体) | 是 | [int] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>thr_input | 活体阈值,默认为normal (取值simple/normal/hard分别对应0.4/0.6/0.8) | 是 | [string] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>image_attr_list | 图片参数列表 (需要与图片base64顺序对应, 第一个object就是第一张图的参数, 第二个object就是第一张图的参数 最大支持20组) | 是 | [array] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>image_attr_list>>frame_index | 图片ID | 是 | [int] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>image_attr_list>>frame_type | 图片类型标签 (0:动作帧;1:炫彩帧;2:最优帧;无字段为动作帧;输入其他数字无效) | 是 | [int] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>image_attr_list>>frame_color | 请填1,炫彩帧颜色标识预留接口,暂时未使用 | 是 | [int] | |||
| data>>algoTasks>>algoConfig>>auoraliving>>image_attr_list>>points | 人脸关键点(106个点,每个点为两个浮点数表示),当有任意一张图的数组为空时([])自动使用人脸检测能力对全部样本进行检测 | 是 | [array] | |||
| data>>imageList | 图片base64列表, (需要与图片参数顺序对应, 第一个object就是第一张图的base64, 第二个object就是第一张图的base64, 最大支持20张,一组图片分辨率要相同) | 是 | [array] | |||
| data>>imageList>>image | 图片的base64编码 | 是 | [string] |
响应内容 :
| 参数名 | 说明 | 必填 | 类型 | 数据字典 | 限制 | 示例 |
|---|---|---|---|---|---|---|
| error_code | 错误码 | 是 | [string] | APP_ERR_OK | ||
| error_message | 错误消息 | 是 | [string] | |||
| camera_id | 摄像头ID | 是 | [string] | 1 | ||
| task_id | 任务id | 是 | [string] | task_1 | ||
| algo_type | 任务类型 | 是 | [string] | 7010 | ||
| frame_id | 帧号,输出-1 | 是 | [string] | -1 | ||
| frame_width | 图宽 | 是 | [string] | 1920 | ||
| frame_height | 图高 | 是 | [string] | 1080 | ||
| display_image | 空 | 是 | [string] | |||
| timestamp | 告警推送时的时间戳 | 是 | [string] | 19999999 | ||
| pts_ms | 拉流的时间戳,图片流为0 | 是 | [string] | -1 | ||
| auoraliving | 炫彩活体信息 | 是 | [object] | |||
| auoraliving>>living_result | 活体检测返回码 0:通过, 1:炫彩不通过 2:静默不通过 3:炫彩和静默均不通过 4:人脸检测不合格 | 是 | [number] | 0 | ||
| auoraliving>>results | 图片结果(最优帧,只走静默) | 是 | [array] | [{"frame_index":1,"silent_score":0.89423425425}] | ||
| auoraliving>>results>>frame_index | 图片ID | 是 | [number] | 1 | ||
| auoraliving>>results>>frame_type | 图片处理类型 auora:炫彩 silent:静默 | 是 | [string] | |||
| auoraliving>>results>>score | 静默分数 | 是 | [number] | 0.89423425425 | ||
| auoraliving>>results>>is_big | 0:经过大模型 1:未经过大模型 | 是 | [int] | |||
| auoraliving>>passed_flags | 人脸通过状态 -2:多人脸 -1:无人脸 0:正常 1:角度过大 2:光线过曝或过暗 3:遮挡 4:模糊 | 是 | [array] |
成功示例 :
{
"error_code": "APP_ERR_OK",
"error_message": "",
"camera_id": "1",
"task_id": "task_1",
"algo_type": "1034",
"frame_id": "-1",
"frame_width": "480",
"frame_height": "640",
"timestamp": "1732240894155",
"display_image": "",
"pts_ms": "0",
"auoraliving": {
"living_result": 0,
"results": [{
"frame_index": 1,
"frame_type": "silent",
"score": 1.8362249e-07,
"is_big": 0
},
{
"frame_index": 2,
"frame_type": "silent",
"score": 0.990840435,
"is_big": 0
},
{
"frame_index": 3,
"frame_type": "silent",
"score": 0.992191553,
"is_big": 0
},
{
"frame_index": 4,
"frame_type": "silent",
"score": 0.992191553,
"is_big": 0
},
{
"frame_index": 5,
"frame_type": "silent",
"score": 0.990840435,
"is_big": 0
},
{
"frame_index": 6,
"frame_type": "silent",
"score": 0.990840435,
"is_big": 0
},
{
"frame_index": 7,
"frame_type": "silent",
"score": 0.992191553,
"is_big": 0
},
{
"frame_index": 8,
"frame_type": "silent",
"score": 0.992191553,
"is_big": 0
},
{
"frame_index": 9,
"frame_type": "auora",
"score": 0.996233165,
"is_big": 0
},
{
"frame_index": 10,
"frame_type": "auora",
"score": 0.996233165,
"is_big": 0
},
{
"frame_index": 11,
"frame_type": "auora",
"score": 0.996233165,
"is_big": 0
}
],
"passed_flags": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
]
}
}
对多张输入的人像图像(炫彩帧或静默帧)返回识别是否通过,并输出人脸质量和活体得分等明细信息。
| 日期 | 版本 | 修订内容 |
|---|---|---|
| 2024-10-21 | v1.6.5.6 | 无 |
服务接口调用时需要严格遵循服务鉴权规则,服务调用鉴权规则请参见:开发指南 - 签名认证方式。
| 返回编码 | 返回信息 | 说明 |
|---|---|---|
| 10000 | 成功 | 服务执行成功 |
| 10100 | 算法模型异常 | 算法模型调用失败 |
| 10200 | 图片下载异常 | 图片下载失败 |
| 10201 | 图片格式错误 | 下载后的图片校验失败,非图片 |
| 10202 | 图片格式不支持 | 算法不支持此格式图片推理 |
| 10301 | 服务必填参数缺失 | 服务必填参数缺失或未填写 |
| 10304 | 服务入参错误 | 部分参数存在限制说明,会针对某个参数做校验返回 |
| 10601 | 检测到多个人脸 | 检测到多个人脸(请上传单人脸图片) |
| 10604 | 未检测到人脸 | 未检测到人脸 |
| 10800 | 上传异常 | 结果图片上传ceph失败 |
| 10903 | 服务执行失败 | 服务执行失败 |
通用状态码请参考【状态码】中的【网关认证】
| 包类型值 | 包类型说明 |
|---|---|
| 1001 | 创建任务请求包 |
| 1002 | 创建任务响应包 |
| 1003 | 删除任务请求包 |
| 1004 | 删除任务响应包 |
| 1005 | 获取任务状态请求包 |
| 1006 | 获取任务状态响应包 |
| 1007 | 算法结构化信息上报 |
| 1008 | 算法结构化信息上报响应包 |
| 1015 | 获取全部任务状态请求包 |
| 1016 | 获取全部任务状态响应包 |
| 1019 | 创建图片推理同步任务 |
| 1020 | 创建图片推理同步任务相应包 |
| 1021 | 创建路由模式图片推理同步任务 |
| 1022 | 创建路由模式图片推理同步任务相应包 |
{
"code": 1019,
"data": {
"cameraId": "1",
"taskId": "task_1",
"algoTasks": [
{
"algoTask": 1034,
"algoConfig": {
"algo_type": "1034",
"version": "algo_version",
"algo_desc": "",
"auoraliving":{
"service_type": 0,
"thr_input": "normal",
"image_attr_list":[
{
"frame_index": 1,
"frame_type": 2,
"frame_color": 1,
"points": []
}
]
}
}
}
],
"imageList": [
{
"image": "图片base64"
}
]
}
}
/**
* 炫彩活体
*/
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/** 主类,用于发起HTTP请求并处理响应 */
public class Example {
public static void main(String[] args) {
example();
}
/**
* 方法中使用到的 JSONUtil、HttpRequest、HttpResponse均来自Hutool工具类。
* 具体maven依赖为:
*
* cn.hutool
* hutool-all
* 5.8.29
*
*/
public static void example() {
try {
String url = "https://xxx/aipaas/live/v1/image/liveDetection";
// 设置请求头
Map headers = new HashMap();
//调用鉴权
headers.put("Content-Type", "application/json");
headers.put("X-APP-ID", "xxx");
headers.put("Authorization", "xxx");
// 创建请求对象
Map request = new HashMap();
request.put("code", 1019);
Map data = new HashMap();
data.put("cameraId", "1");
data.put("taskId", "task_1");
Map algoTask1 = new HashMap();
algoTask1.put("algoTask", 1034);
Map algoConfig = new HashMap();
algoConfig.put("algo_type", "1034");
algoConfig.put("version", "algo_version");
algoConfig.put("algo_desc", "");
Map auoraliving = new HashMap();
auoraliving.put("service_type", 0);
auoraliving.put("thr_input", "normal");
Map attr1= new HashMap();
attr1.put("frame_index", 1);
attr1.put("frame_type", 2);
attr1.put("frame_color", 1);
attr1.put("points", Arrays.asList());
auoraliving.put("image_attr_list", Arrays.asList(attr1));
algoConfig.put("auoraliving", auoraliving);
algoTask1.put("algoConfig", algoConfig);
data.put("algoTasks", Arrays.asList(algoTask1));
Map image1 = new HashMap();
image1.put("image", "xxx");
data.put("imageList", Arrays.asList(image1));
request.put("data", data);
// 将请求对象转换为JsonNode
String requestString = JSONUtil.toJsonStr(request);
// 发起HTTP请求
HttpResponse response =
HttpRequest.post(url)
.headerMap(headers, true)
.body(requestString)
.execute();
// 输出响应结果
System.out.println(response.body());
} catch (Exception e) {
e.printStackTrace();
}
}
}
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 = "xxx"
AUTHORIZATION = "xxx"
# URL 和请求数据
url = "https://xxx/aipaas/live/v1/image/liveDetection" # 请求的URL
request_data = {
"code": 1019,
"data": {
"cameraId": "1",
"taskId": "task_1",
"algoTasks": [
{
"algoTask": 1034,
"algoConfig": {
"algo_type": "1034",
"version": "algo_version",
"algo_desc": "",
"auoraliving":{
"service_type": 0,
"thr_input": "normal",
"image_attr_list":[
{
"frame_index": 1,
"frame_type": 1,
"frame_color": 1,
"points": []
}
]
}
}
}
],
"imageList": [
{
"image": "xxx"
}
]
}
}
# 构建请求头
headers = {
"Content-Type": "application/json",
"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}")