H5活体检测
如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:
能力介绍
业务能力
H5视频活体检测产品,是由两个接口组合而成,主要用于在H5场景下,通过用户新录制并上传一个视频,来进行活体检测的判断。相对于APP有动作校验+静默图片活体
、静默图片活体
这两种方式,H5视频活体方案比APP方案更加灵活,同时比单张图片活体方式更加安全。其主要功能如下所示:
- 语音校验码:为防止用户提交非当前操作的视频,在录制视频时,随机分配一个数字,用户需要读出这个数字,声音存于视频当中,并在后续识别时校验,以判断是否为此次会话。语音校验码作为辅助性质的验证条件,是一个可选项,如果应用场景比较嘈杂或方言口音比较重,可以不使用语音验证。
- 视频多帧活体检测:录制并上传的视频,会在云端进行随机抽帧分析,并得出最终的活体检测分数。
以上两项能力,分为两个接口,使用顺序为
语音校验码
->视频多帧校验
,具体调用逻辑可以参考我们的。Demo体验地址(电脑端用谷歌、火狐浏览器):
Mobile:https://ai.baidu.com/face-verify/mobile.html
PC:https://ai.baidu.com/face-verify/pc.html
主要适用场景
- 微信服务号:用于对操作用户真实性要求严格的场景,用于依托于微信服务号的金融开户、实名认证、账户信息变更二次验证等服务。
- APP内Webview:对于如Cordova架构开发的APP,或者APP内变更频繁的身份信息页等情况,可以采用此方案完成活体检测。
- 浏览器:如果仅是一个H5宣传页,或者Wap版本网页等,可以通过此方法快速集成更加安全的活体检测功能。
此方案的优劣势
- 优势:相对于APP有动作校验、单张图片静默判断,此方法在没有APP情况下,可以更快速、轻量级地实现活体检测,同时保障一定安全性。
- 劣势:由于视频较大,上传时间可能较长,另由于不同手机的浏览器内核差异较大,容易出现兼容性问题。
调用方式
请求URL数据格式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token
,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。
获取access_token的示例代码
{% AccessToken %}
注意:
access_token
的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token;
例如此接口,使用HTTPS POST发送:
https://aip.baidubce.com/rest/2.0/face/v2/identify?access_token=24.f9ba9c5341b67688ab4added8bc91dec.2592000.1485570332.282335-8574074
POST中Body的参数,按照下方请求参数说明选择即可。
语音校验码接口
接口描述
此接口主要用于生成随机码,用于视频的语音识别校验使用,以判断视频的即时性,而非事先录制的,提升作弊的难度。
请求说明
请求示例
HTTP方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/face/v1/faceliveness/sessioncode
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 否 | string | 百度云创建应用时的唯一标识ID |
返回说明
返回参数
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
session_id | 是 | string | 语音校验码会话id,有效期5分钟,请提示用户在五分钟内完成全部操作 |
code | 是 | string | 语音验证码,数字形式,3~6位数字 |
返回示例
{
"err_no": 0,
"err_msg": "SUCCESS",
"result": {
"session_id": "S59faeeebb9111890355690",
"code": "9940"
},
"timestamp": 1509617387,
"cached": 0,
"serverlogid": "0587756642"
}
视频活体检测接口
接口描述
此接口一方面通过语音识别得到校验码,通过session code来判断视频是否作弊。另一方面进行视频抽帧,判断是否为活体。
请求说明
请求示例
HTTP方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/face/v1/faceliveness/verify
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
session_id | 否 | string | 语音校验码会话id,使用此接口的前提是已经调用了语音校验码接口。 语音校验码作为辅助性质的验证条件,是一个可选项, 如果应用场景比较嘈杂或方言口音比较重,可以不使用语音验证。 |
video_base64 | 是 | string | base64编码后的视频数据(视频限制:最佳为上传5-15s的mp4文件。 视频编码方式:h264编码;音频编码格式:aac,pcm均可。) |
返回说明
返回参数
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
score | 是 | float | 活体检测分数 |
thresholds | 是 | array | 阈值参考,实际业务应用中,请以score>阈值判定通过,可直接选择不同误识别率的阈值,无需对应具体的分值,选择阈值参数即可。 |
code | 是 | array | 语音校验码信息 |
create | 是 | string | 生成的校验码,通过create 和identify 两个字段的对比,可以判断上传的视频是否为目标视频。 |
identify | 是 | string | 语音识别出来的校验码 |
pic_list | 是 | array | 抽取图片信息列表 |
pic_list[i].face_id | 是 | string | face唯一ID |
pic_list[i].pic | 是 | string/encryption | base64编码后的图片信息 |
返回示例
{
err_no:0,
err_msg: 'success',
result: {
score: 0.984654366,
thresholds: {
"frr_1e-4": 0.05, //万分之一误识别率的阈值
"frr_1e-3": 0.3, //千分之一误识别率的阈值
"frr_1e-2": 0.9 //百分之一误识别率的阈值
},
code: {
"create": "5789",
"identify": "5789"
},
pic_list: [
{
"face_id": 5745745747,
"pic": "gsagaheryzxv..."
},
{
"face_id": 5745745747,
"pic": "gsagaheryzxv..."
}
]
},
"timestamp": 1509611848,
"cached": 0,
"serverlogid": "2248375729"
}
错误码列表
错误码 | 错误信息 | 描述 |
---|---|---|
216506 | redis操作失败 | |
216505 | redis连接失败 | |
216430 | rtse/face 服务异常 | |
216502 | 当前会话已失效 | |
216501 | 没有找到人脸 | |
216508 | 没有找到视频信息 | |
216434 | 活体检测失败 | |
216908 | 视频中人脸质量过低(返回的错误信息 会包含具体的错误信息包含 illumiantion(光照不足)angle(角度) blur(人脸模糊) occlusion(遮挡)too large(人脸过大) 等原因 |
|
216507 | 视频中有多张人脸 | |
216433 | 视频解析服务发生错误 | |
216432 | 视频解析服务调用失败 | |
216431 | 语音识别服务异常 | |
216500 | 验证码位数错误 |