前言
在人像业务开发中,经常需要识别图像内是否存在人脸,并获取人脸所在区域信息,用于人像裁剪、人脸预处理、内容筛查等环节。自研人脸检测模型开发门槛高,调优成本大。通过人脸检测接口,能够识别图片当中的人脸,输出人脸对应的位置信息,为人像类业务提供基础图像分析能力。
核心能力
- 可精准检测图像内出现的人脸区域,定位人脸坐标位置信息,支持多张人脸同时检测;
- 能够适配实拍照片、证件照片、环境抓拍等多种人像画面;
- 支持PNG、JPG、JPEG、BMP等格式;
- 对不同光照、角度下的人脸具备良好识别效果。


API介绍
请求说明
| 名称 | 类型 | 必须 | 说明 |
|---|---|---|---|
| file | String | 否 | 人脸照片文件,文件类型 |
| base64 | String | 否 | 人脸照片Base64 |
| url | String | 否 | 人脸照片url |
| faceField | String | 否 | 包括age,expression,face_shape,gender,glasses,landmark,landmark150,quality,eye_status,emotion,face_type,mask,spoofing信息,逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 |
| maxFaceNum | Integer | 否 | 最多处理人脸的数目,默认值为1,根据人脸检测排序类型检测图片中排序第一的人脸(默认为人脸面积最大的人脸),最大值120 |
| faceType | String | 否 | 人脸的类型,默认LIVE。 LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片 WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 |
| livenessControl | String | 否 | 活体控制,默认NONE, 检测结果中不符合要求的人脸会被过滤 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) |
| faceSortType | String | 否 | 人脸检测排序类型,默认为0。 0:代表检测出的人脸按照人脸面积从大到小排列 1:代表检测出的人脸按照距离图片中心从近到远排列 |
| displayCorpImage | String | 否 | 是否显示检测人脸的裁剪图base64值,默认为0 0:不显示(默认) 1:显示 当取值为1时,max_face_num字段的取值上限按5计算,即最多可返回5张人脸的裁剪图 |
关于合成图检测spoofing的判断阈值选择,可参考以下数值信息
| 阈值 | 误拒率(FRR) | 通过率(TAR) | 攻击拒绝率(TRR) |
|---|---|---|---|
| 0.00023 | 5% | 95% | 94.93% |
| 0.00048(推荐) | 1% | 99% | 89.71% |
| 0.00066 | 0.5% | 99.5% | 88.02% |
| 0.00109 | 0.1% | 99.9% | 84.57% |
| 0.00171 | 0.05% | 99.95% | 81.52% |
| 0.00547 | 0.01% | 99.99% | 65.52% |
关于以上数值的概念介绍:
拒绝率(TRR):如99%,代表100次作弊假体攻击,会有99次被拒绝。
误拒率(FRR):如0.5%,指1000次真人请求,会有5次因为活体分数低于阈值被错误拒绝。
通过率(TAR):如99%,指100次真人请求,会有99次因为活体分数高于阈值而通过。
阈值(Threshold):高于此数值,则可判断为是合成图攻击。
返回样例
{
"code": 200,
"msg": "成功",
"taskNo": "788988200161527391185660",
"data": {
"faceNum": 1,//检测到的图片中的人脸数量
"faceList": [//人脸信息列表,具体包含的参数参考下面的列表。
{
"face_token": "35235asfas21421fakghktyfdgh68bio",//人脸图片的唯一标识 (人脸检测face_token有效期为60min)
"location": {
//人脸在图片中的位置
"left": 117,//人脸区域离左边界的距离
"top": 131,//人脸区域离上边界的距离
"width": 172,//人脸区域的宽度
"height": 170,//人脸区域的高度
"rotation": 4 //人脸框相对于竖直方向的顺时针旋转角,[-180,180]
},
"spoofing":"",//判断图片是合成图的概率
"face_probability": 1,//人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。其中返回0或1时,数据类型为Integer
"angle" :{
//人脸旋转角度参数
"yaw" : -0.34859421849251,//三维旋转之左右旋转角[-90(左), 90(右)]
"pitch": 1.9135693311691,//三维旋转之俯仰角度[-90(上), 90(下)]
"roll" :2.3033397197723 //平面内旋转角[-180(逆时针), 180(顺时针)]
},
"landmark": [ //4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_field包含landmark时返回
{
"x": 161.74819946289,
"y": 163.30244445801
}
],
"landmark72": [ // 72个特征点位置 face_field包含landmark时返回
{
"x": 115.86531066895,
"y": 170.0546875
}
],
"age": 29.298097610474,//年龄 ,当face_field包含age时返回
"expression": {
//表情,当 face_field包含expression时返回
"type": "smile", //none:不笑;smile:微笑;laugh:大笑
"probability" : 0.5543018579483 //表情置信度,范围【0~1】,0最小、1最大
},
"gender": {
//性别,face_field包含gender时返回
"type": "male", //male:男性 female:女性
"probability": 0.99979132413864 //性别置信度,范围【0~1】,0代表概率最小、1代表最大
},
"glasses": {
//是否带眼镜,face_field包含glasses时返回
"type": "sun", //none:无眼镜,common:普通眼镜,sun:墨镜
"probability": 0.99999964237213 //眼镜置信度,范围【0~1】,0代表概率最小、1代表最大。
},
"face_shape": {
//脸型,当face_field包含face_shape时返回
"type": "triangle", //square: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形
"probability": 0.5543018579483 //置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大。
},
"quality": {
//人脸质量信息。face_field包含quality时返回
"occlusion": {
//人脸各部分遮挡的概率,范围[0~1],0表示完整,1表示不完整
"left_eye": 0,//左眼遮挡比例,[0-1] ,1表示完全遮挡
"right_eye": 0,//右眼遮挡比例,[0-1] , 1表示完全遮挡
"nose": 0,//鼻子遮挡比例,[0-1] , 1表示完全遮挡
"mouth": 0,//嘴巴遮挡比例,[0-1] , 1表示完全遮挡
"left_cheek": 0.0064102564938366,//左脸颊遮挡比例,[0-1] , 1表示完全遮挡
"right_cheek": 0.0057411273010075,//右脸颊遮挡比例,[0-1] , 1表示完全遮挡
"chin_contour": 0 //下巴遮挡比例,,[0-1] , 1表示完全遮挡
},
"blur": 1.1886881756684e-10,// 人脸模糊程度,范围[0~1],0表示清晰,1表示模糊
"illumination": 141,//取值范围在[0~255], 表示脸部区域的光照程度 越大表示光照越好
"completeness": 1, //人脸完整度,0或1, 0为人脸溢出图像边界,1为人脸都在图像边界内
"livemapscore": 1 //单张图片的活体得分范围[0~1], liveness_control包含NORMAL时返回
}
}
]
}
}