4.3 活体检测
4.3.1 动作活体检测
}}
状态码:400 失败响应样例
{ "error_code": "FRS.0501",
"error_msg": "Detect no face, check out your picture."
}
状态码
状态码请参见状态码。
错误码
错误码请参见错误码。
4.3 活体检测
4.3.1 动作活体检测
功能介绍
动作活体检测是通过判断视频中的人物动作与传入动作列表是否一致来识别视频中人 物是否为活体。如果有多张人脸出现,则选取最大的人脸进行判定。新老用户均可用 该接口。
前提条件:
请确保您已开通人脸识别服务,具体操作方法请参见申请服务。
约束限制:
● 目前支持检测视频文件,或视频的Base64编码,不支持直接检测视频流,需要用 户客户端自己获取视频流并保存成文件,然后调用活体检测接口。
● 视频文件大小不超过8MB,建议客户端压缩到200KB~2MB。
● application/json请求的body中,请使用标准Json格式。
● Base64编码中请勿使用回车换行。
● 系统不保存用户视频。
● 具体的约束限制信息请参见约束与限制章节。
建议:
● 建议帧率10fps~30fps。
● 视频文件的大小建议客户端压缩到200KB~2MB。
调试
您可以在API Explorer中调试该接口。
URI
POST /v1/{project_id}/live-detect
表4-19 路径参数
参数 是否必选 参数类型 描述
project_id 是 String 项目ID,获取方法请参见获取项
目ID/账号名/AK/SK。
请求参数
表4-20 请求 Header 参数
参数 是否必选 参数类型 描述
X-Auth-Token 是 String 用户Token。
Token认证就是在调用API的时 候将Token加到请求消息头,从 而通过身份认证,获得操作API 的权限,响应消息头中X-Subject-Token的值即为Token。
表4-21 请求 Body 参数
参数名 是否必选 参数类型 说明
video_url 与video_file、
video_base64三选 一
String 视频的URL路径,目前仅支 持华为云上OBS的URL,使 用时只需保证FRS有权限读 取该OBS桶的数据。开通读 取权限的操作请参见服务授
权。
视频要求:
● 视频Base64编码后大小 不超过8MB。
● 限制视频时长1~15秒。
● 建议帧率10fps~
30fps。
● 封装格式:mp4、avi、
flv、webm、asf、
mov。
● 视频编码格式: h261、
h263、h264、hevc、
vc1、vp8、vp9、
wmv3。
video_file 与video_url、
video_base64三选 一
File 本地视频文件。上传文件 时,请求格式为
multipart。视频要求:
● 视频文件大小不超过 8MB,建议客户端压缩 到200KB~2MB。
● 限制视频时长1~15秒。
● 建议帧率10fps~
30fps。
● 封装格式:mp4、avi、
flv、webm、asf、
mov。
● 视频编码格式: h261、
h263、h264、hevc、
vc1、vp8、vp9、
wmv3。
参数名 是否必选 参数类型 说明 video_base64 与video_file、
video_url三选一 String 视频数据,Base64编码,
要求:
● Base64编码后大小不超 过8MB,建议客户端压 缩到200KB~2MB。
● 限制视频时长1~15秒。
● 建议帧率10fps~
30fps。
● 封装格式:mp4、avi、
flv、webm、asf、
mov。
● 视频编码格式: h261、
h263、h264、hevc、
vc1、vp8、vp9、
wmv3。
actions 是 String 动作代码顺序列表,英文逗
号(,)分隔。建议单动 作,目前支持的动作有:
● 1:左摇头
● 2:右摇头
● 3:点头
● 4:嘴部动作
说明仅当actions的传参顺序和视频 中的动作顺序一致时返回 true。例如,视频中人物动作 顺序为点头、嘴部动作,传参 顺序需为3,4。
action_time 否 String 该参数为动作时间数组拼接 的字符串,数组的长度和 actions的数量一致,每一 项代表了对应次序动作的起 始时间和结束时间,单位为 距视频开始的毫秒数。
响应参数
状态码:200
表4-22 响应 Body 参数
参数 参数类型 描述
video-result
video-result
object 活体检测结果,VideoDetectResult结构见
VideoDetectResult。 调用失败时无此字段。
warning-list Array of
WarningList
objects警告信息列表,WarningList结构见
WarningList。 调用失败时无此字段
表4-23 video-result
参数 参数类型 描述
alive Boolean 是否是活体。
actions Array of
ActionsList
objects动作列表。
picture String 检测出最大人脸的图片base64。
表4-24 ActionsList
参数 参数类型 描述
confidence Double 置信度,取值范围0~1。
action Integer 动作编号,取值范围:[1,2,3,4],其中: 1:左摇 头 2:右摇头 3:点头 4:嘴部动作
表4-25 WarningList
参数 参数类型 描述
warningCode Integer 警告ID。
warningMsg String 告警消息。
状态码: 400
表4-26 响应 Body 参数
参数 参数类型 描述
error_code String 调用失败时的错误码,具体请参考错误码。 调用 成功时无此字段。
参数 参数类型 描述
error_msg String 调用失败时的错误信息。 调用成功时无此字段。
请求示例
X-Auth-Token值获取方法请参见快速入门。
● 请求样例(方式一:使用视频的BASE64编码)
POST https://{endpoint}/v1/{project_id}/live-detect Request Header:
Content-Type: application/json
X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDT...
Request Body:
{ "video_base64":"/9j/4AAQSkZJRgABAgEASABIAAD...", "actions":"1,3,2",
"action_time":"1000-3000,4000-7000,9000-12000"
}
● 请求样例(方式二:使用视频文件)
POST https://{endpoint}/v1/{project_id}/live-detect Request Header:
X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDT...
Request Body:
video_file: File(视频文件) actions: 1,3,2
action_time: 1000-3000,4000-7000,9000-12000
● 请求样例(方式三:使用视频URL)
POST https://{endpoint}/v1/{project_id}/live-detect Request Header:
Content-Type: application/json
X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDT...
Request Body:
{ "video_url":"/BucketName/ObjectName", "actions":"1,3,2",
"action_time":"1000-3000,4000-7000,9000-12000"
}
● Python3语言请求代码示例(其他语言参照下列示例编写或使用FRS SDK)
# coding:utf-8 -*-import requests import base64
endpoint = '开通服务所在region的人脸识别服务域名' project_id = '开通服务所在region的用户项目ID' token = "用户获取得到的实际token值"
headers = {'Content-Type': 'application/json', 'X-Auth-Token': token}
url = "https://{endpoint}/v1/{project_id}/face-compare".format(endpoint=endpoint, project_id=project_id)
video_file_path = r'./data/face-video-demo.mp4' with open(video_file_path, "rb") as bin_data:
video_data = bin_data.read()
video_base64 = base64.b64encode(video_data).("utf-8")
body = {"video_base64": video_base64, "actions": "1,2,3", "action_time":
"1000-3000,4000-7000,9000-12000"}
response = requests.post(url, headers=headers, json=body, verify=False) print(response.text)
● Java语言请求代码示例(其他语言参照下列示例编写或使用FRS SDK)
* 使用前需已配置HttpClient jar包。jar包可通过下载SDK获取 */
public class LiveDetect {
protected static HttpClientBuilder buildClient(HttpClientBuilder httpClientBuilder) { SSLContext sslContext = null;
try {
sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { return true;
httpClientBuilder.setSSLContext(sslContext);
httpClientBuilder.setConnectionTimeToLive(30, TimeUnit.SECONDS);
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
Registry<ConnectionSocketFactory> socketFactoryRegistry
= RegistryBuilder.<ConnectionSocketFactory>create().register("http",
PlainConnectionSocketFactory.getSocketFactory()).register("https", sslSocketFactory).build();
PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
connMgr.setMaxTotal(200);
connMgr.setDefaultMaxPerRoute(100);
httpClientBuilder.setConnectionManager(connMgr);
return httpClientBuilder;
}
public static String doPost(String url, String jsonStr, String token, CloseableHttpClient client) { HttpPost post = new HttpPost(url);
StringEntity entity = new StringEntity(jsonStr, ContentType.APPLICATION_JSON);
post.setEntity(entity);
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
//time unit is milliseconds RequestConfig requestConfig =
RequestConfig.custom().setConnectTimeout(3000).setSocketTimeout(3000).build();
post.setConfig(requestConfig);
post.setHeader("X-Auth-Token", token);
HttpResponse response = null;
System.arraycopy(byteStream, 0, new byte[byteStream.length], 0, byteStream.length);
result = new String(byteStream, StandardCharsets.UTF_8);
public static void main(String[] args) {
CloseableHttpClient client = buildClient(TraceApacheHttpClientBuilder.create()).build();
// endpoint和project_id需要替换成实际信息。
String url = "https://{{endpoint}}/v1/{{project_id}}/live-detect";
String jsonStr = "{ \"video_base64\": \"/9j/4AAQSkZJRgABAgEASABIAAD...\", \"actions\":
\"1,2,3\", \"action_time\": \"1000-3000,4000-7000,9000-12000\"}";
String token = "对应region的token";
{ "video-result": { "alive": true,
"picture": "/9j/4AAQSkZJRgABAQEAYABgAAD/2w..."
}, "warning-list": []
}
状态码:400 失败响应样例
{ "error_code": "FRS.0701",
"error_msg": "Parse video data failed."
}
状态码
状态码请参见状态码。
错误码
错误码请参见错误码。