接口文档
1.总体说明
私有化部署包部署成功后,即可获得与公有云基本完全相同的接口,人脸识别的相关接口将会启动,即可开始调用。
1.1 接口能力
在私有化部署包中会提供如下5类接口:
- Appid管理
业务能力
创建Appid:用于创建一个Appid
查询Appid:用于查询此业务中已经创建哪个Appid
注:创建方式为:通过调用“创建用户组”接口来创建appid,即:在“创建用户组”接口中可以自定义一个Appid,当组创建成功后,此Appid即可生效。
- 人脸检测与属性分析
接口能力
① 人脸检测:检测图片中的人脸并标记出位置信息;
② 人脸关键点:展示人脸的核心关键点信息,及72个关键点信息;
③ 人脸属性值:展示人脸属性信息,如年龄、性别等;
④ 人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。
典型应用场景:如人脸属性分析,基于人脸关键点的加工分析,人脸营销活动等。
- 人脸比对
接口能力
① 两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值;
② 多种图片类型:支持生活照、证件照、身份证芯片照、带网纹照四种类型的人脸对比;
③ 活体检测控制:基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。);
④ 质量检测控制:分析图片的中人脸的模糊度、角度、光照强度等特征,判断图片质量;
业务应用
用于比对多张图片中的人脸相似度并返回两两比对的得分,可用于判断两张脸是否是同一人的可能性大小。
典型应用场景:如人证合一验证,用户认证等,可与您现有的人脸库进行比对验证。
- 人脸搜索
业务能力
① 1:N人脸搜索:也称为1:N识别,在指定人脸集合中,找到最相似的人脸;
② 1:N人脸认证:基于uid维度的1:N识别,由于uid已经锁定固定数量的人脸,所以检索范围更聚焦;
1:N人脸识别与1:N人脸认证的差别在于:人脸搜索是在指定人脸集合中进行直接地人脸检索操作,而人脸认证是基于uid,先调取这个uid对应的人脸,再在这个uid对应的人脸集合中进行检索(因为每个uid通常对应的只有一张人脸,所以通常也就变为了1:1对比);实际应用中,人脸认证需要用户或系统先输入id,这增加了验证安全度,但也增加了复杂度,具体使用哪个接口需要视您的业务场景判断。
提示:进行人脸查找相关操作前,建议先阅读人脸库管理相关内容。
- 人脸库管理
业务能力
要完成1:N或者M:N识别,首先需要构建一个人脸库,用于存放所有人脸特征,相关接口如下:
人脸注册:向人脸库中添加人脸
① 人脸更新:更新人脸库中指定用户下的人脸信息
② 人脸删除:删除指定用户的某张人脸
③ 用户信息查询:查询人脸库中某个用户的详细信息
④ 获取用户人脸列表:获取某个用户组中的全部人脸列表
⑤ 获取用户列表:查询指定用户组中的用户列表
⑥ 复制用户:将指定用户复制到另外的人脸组
⑦ 创建用户组:创建一个新的用户组
⑧ 删除用户组:删除指定用户组
⑨ 组列表查询:查询人脸库中用户组的列表
人脸库结构
人脸库、用户组、用户、用户下的人脸层级关系如下所示:
1|- 人脸库(appid)
2 |- 用户组一(group_id)
3 |- 用户01(uid)
4 |- 人脸(faceid)
5 |- 用户02(uid)
6 |- 人脸(faceid)
7 |- 人脸(faceid)
8 ....
9 ....
10 |- 用户组二(group_id)
11 |- 用户组三(group_id)
12 ....
关于人脸库的设置限制
① 每个私有化部署包建议对应1个appid,每个appid对应一个人脸库;
② 每个人脸库下,可以创建多个用户组,用户组(group)数量没有限制;
③ 每个用户组(group)下,可添加无限个user_id,无限张人脸(注:为了保证查询速度,单个group中的人脸容量上限建议为80万);
④ 每个用户(user_id)所能注册的最大人脸数量没有限制;
提醒:每个人脸库对应一个appid,一定不要轻易删除appid,删除后则此人脸库将失效,无法进行查找!
1.2 接口格式说明
- 变量类型定义
类型 | 定义 |
---|---|
string | 普通的字符串,可能会有长度要求,具体参见接口说明中的备注 |
uint32 | 整形数字,最大取值为4字节int。自然数 |
int64 | 整形数字,最大取值为8字节int。允许负数 |
json | 无论是request还是response中某个字段定义为json,那么它其实是一个json格式的字符串,需要二次解析 |
array | request的query中表示array请使用key[] 。response的json中的array即为jsonArray |
double | 双精度,小数点后最大8位四舍五入 |
encryption | 加密格式,一般用于人脸服务各模块间交互数据使用。 |
注意事项
① 所有ID定义必须为小于等于32字节的数字字母组合,尽量使用无意义的组合,并且不可以使用系统保留关键字:all、self、me、this、next。
② 所有接口POSTDATA 应当小于等于8M。
③ 单个group中的图片容量上限建议为80万
④ 人脸图片需要人脸像素在100x100以上,否则可能检测不出来人脸
- 请求方式
请求方式统一使用application/json
请求
直接请求
直接请求时需要将appid参数拼接在请求url中,不要放在json body中
注意:如果是直接对线上单台机器发起请求,需要在接口路径前加上/api
的前缀
- 返回格式
① error_code、error_msg即错误码和错误描述,详细含义请参考错误码表, error_code为0代表请求成功
② result是接口返回的详细信息, 格式为数组;
③ log_id是请求的日志id, 13位长(bigint), 用于定位请求。
1{
2 "error_code" : 0, //错误码 0代表成功
3 "error_msg" : "SUCCESS", //错误信息
4 "result" : {...} //返回结果 具体内容详见相关接口
5 "log_id" : 3535325235 //请求的日志id
6 "timestamp" : 1512391548 //请求到达的时间戳 精确到秒级
7 "cached" : 0 //未启用 无需处理
8}
- 阈值说明
遮挡情况的阈值
控制度 | left_eye | right_eye | nose | mouth | left_cheek | right_cheek | chin_contour |
---|---|---|---|---|---|---|---|
LOW | 0.8 | 0.8 | 0.8 | 0.8 | 0.8 | 0.8 | 0.8 |
NORMAL | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 | 0.6 |
HIGH | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 | 0.2 |
模糊度、完整度的阈值
控制度 | illumination | blurdegree | completeness |
---|---|---|---|
LOW | 20 | 0.8 | 0 |
NORMAL | 40 | 0.6 | 0 |
HIGH | 100 | 0.2 | 1 |
- 参数说明
参数 | 说明 |
---|---|
left_eye | 左眼被遮挡的比例 [0-1] 1表示完全遮挡 |
right_eye | 右眼被遮挡的比例 [0-1] 1表示完全遮挡 |
nose | 鼻子被遮挡的比例 [0-1] 1表示完全遮挡 |
mouth | 嘴巴被遮挡的比例 [0-1] 1表示完全遮挡 |
left_cheek | 左脸颊被遮挡的比例 [0-1] 1表示完全遮挡 |
right_cheek | 右脸颊被遮挡的比例 [0-1] 1表示完全遮挡 |
chin_contour | 下巴被遮挡比例 [0-1] 1表示完全遮挡 |
illumination | 光照 [0-255] 0表示光照不好 |
blurdegree | 图片模糊度 [0-1] 1表示完全模糊 |
completeness | 人脸完整度(0或1) 0为人脸溢出图像边界,1为人脸都在图像边界内 |
- 活体控制阈值
不同的控制度下所对应的活体控制阈值 如果检测出来的活体分数小于控制阈值,则会返回错误。
控制度 | 阈值 | 说明 |
---|---|---|
LOW | 0.05 | 0.01%活体误拒率 对应的通过率为99.99% 攻击拒绝率为63.91% |
NORMAL | 0.3 | 0.1%活体误拒率 对应的通过率为99.9% 攻击拒绝率为90.32% |
HIGH | 0.9 | 1%活体误拒率 对应的通过率为99% 攻击拒绝率为97.56% |
误拒率(FRR):如0.5%,指1000次真人请求,会有5次因为活体分数低于阈值被错误拒绝。 通过率(TAR):如99%,指100次真人请求,会有99次因为活体分数高于阈值而通过。 攻击拒绝率(TRR):如99%,代表100次作弊假体攻击,会有99次被拒绝。 误拒率越高, 其对攻击的防范能力也会越高
1.3 调用准备
1、调用接口的地址示例:[192.168.0.1]:8300/face-api/v3/face/detect,其中ip需要替换为用户自己服务器的ip,端口固定为:8300,接口地址需要替换为下述接口的地址。
2、调用接口时需要指定appid,此appid为用户自定的id,目前可以通过调用“创建用户组”接口来创建appid
2. 接口详情
2.1 基础能力接口
2.1.1 人脸检测
检测图片中的人脸并获得位置信息, 属性信息, 质量信息等
- 请求路径
/face-api/v3/face/detect
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(总数据大小应小于10M,分辨率应小于1920*1080),图片上传方式根据image_type来判断 |
image_type | 是 | string | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M; FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |
face_field | 否 | string | 包括age,expression,face_shape,gender,glasses,landmark,quality,face_type,parsing,eye_status,emotion,feature,spoofing信息 逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度 |
get_feature | 否 | string | 是否保存特征值, 只有保存了特征值之后才能使用FACE_TOKEN,默认为NO YES 保存特征值 NO 不保存特征值 2019.12.12以后部署的模型提供此接口请求参数,之前部署的模型若需要保存特征值,请在face_field字段中添加feature字段 或者更新模型,更新方式请参考这里 |
max_face_num | 否 | uint32 | 最多处理人脸的数目,默认值为1,仅检测图片中面积最大的那个人脸;最大值10,检测图片中面积最大的几张人脸。若您想修改最大人脸检测数量数值,请参考接口调用问题文档 |
face_type | 否 | string | 人脸的类型 LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片 WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图 CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认LIVE |
liveness_control | 否 | string | 活体控制 检测结果中不符合要求的人脸会被过滤 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE |
若为视频监控模型,请求参数可以增加下列字段:
若您的前端摄像头是抓拍机抓拍并处理过的单人脸小图模式,推荐您在人脸检测/人脸注册/人脸更新/人脸搜索接口中使用SNAP参数,若为普通摄像头及混合场景模式,使用COMMON参数即可
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image_spec | 否 | string | 图片规格 服务会对不同规格的图片采用不同的图片处理方式 COMMON: 通用图片规格 默认的处理方式(如无适应的图片规格则使用此参数) SNAP: 从人脸抓拍机得到的抓拍图 适用于小图片+单人脸的情况 默认COMMON |
- 请求示例
1 {
2 "image": "027d8308a2ec665acb1bdf63e513bcb9",
3 "image_type": "FACE_TOKEN",
4 "face_field": "faceshape,facetype"
5 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
face_num | 是 | int | 检测到的图片中的人脸数量 |
face_list | 是 | array | 人脸信息列表,具体包含的参数参考下面的列表。 |
+face_token | 是 | string | 人脸图片的唯一标识 |
+location | 是 | array | 人脸在图片中的位置 |
++left | 是 | double | 人脸区域离左边界的距离 |
++top | 是 | double | 人脸区域离上边界的距离 |
++width | 是 | double | 人脸区域的宽度 |
++height | 是 | double | 人脸区域的高度 |
++rotation | 是 | int64 | 人脸框相对于竖直方向的顺时针旋转角,[-180,180] |
+face_probability | 是 | double | 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。 |
+angel | 是 | array | 人脸旋转角度参数 |
++yaw | 是 | double | 三维旋转之左右旋转角[-90(左), 90(右)] |
++pitch | 是 | double | 三维旋转之俯仰角度[-90(上), 90(下)] |
++roll | 是 | double | 平面内旋转角[-180(逆时针), 180(顺时针)] |
+age | 否 | double | 年龄 ,当face_field包含age时返回 |
+expression | 否 | array | 表情,当 face_field包含expression时返回 |
++type | 否 | string | none:不笑;smile:微笑;laugh:大笑 |
++probability | 否 | double | 表情置信度,范围【0~1】,0最小、1最大。 |
+face_shape | 否 | array | 脸型,当face_field包含face_shape时返回 |
++type | 否 | double | square: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形 |
++probability | 否 | double | 置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大。 |
+gender | 否 | array | 性别,face_field包含gender时返回 |
++type | 否 | string | male:男性 female:女性 |
++probability | 否 | double | 性别置信度,范围【0~1】,0代表概率最小、1代表最大。 |
+glasses | 否 | array | 是否带眼镜,face_field包含glasses时返回 |
++type | 否 | string | none:无眼镜,common:普通眼镜,sun:墨镜 |
++probability | 否 | double | 眼镜置信度,范围【0~1】,0代表概率最小、1代表最大。 |
+eye_status | 否 | array | 双眼状态(睁开/闭合) face_field包含eye_status时返回 |
++left_eye | 否 | double | 左眼状态 [0,1]取值,越接近0闭合的可能性越大 |
++right_eye | 否 | double | 右眼状态 [0,1]取值,越接近0闭合的可能性越大 |
+emotion | 否 | array | 情绪 face_field包含emotion时返回 |
++type | 否 | string | angry:愤怒 disgust:厌恶 fear:恐惧 happy:高兴 sad:伤心 surprise:惊讶 neutral:无情绪 |
++probability | 否 | double | 情绪置信度,范围0~1 |
+face_type | 否 | array | 真实人脸/卡通人脸 face_field包含face_type时返回 |
++type | 否 | string | human: 真实人脸 cartoon: 卡通人脸 |
++probability | 否 | double | 人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。 |
+landmark | 否 | array | 4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_field包含landmark时返回 |
+landmark72 | 否 | array | 72个特征点位置 face_field包含landmark72时返回 |
+quality | 否 | array | 人脸质量信息。face_field包含quality时返回 |
++occlusion | 否 | array | 人脸各部分遮挡的概率,范围[0~1],0表示完整,1表示不完整 |
+++left_eye | 否 | double | 左眼遮挡比例,[0-1] ,1表示完全遮挡 |
+++right_eye | 否 | double | 右眼遮挡比例,[0-1] , 1表示完全遮挡 |
+++nose | 否 | double | 鼻子遮挡比例,[0-1] , 1表示完全遮挡 |
+++mouth | 否 | double | 嘴巴遮挡比例,[0-1] , 1表示完全遮挡 |
+++left_cheek | 否 | double | 左脸颊遮挡比例,[0-1] , 1表示完全遮挡 |
+++right_cheek | 否 | double | 右脸颊遮挡比例,[0-1] , 1表示完全遮挡 |
+++chin | 否 | double | 下巴遮挡比例,[0-1] , 1表示完全遮挡 |
++blur | 否 | double | 人脸模糊程度,范围[0~1],0表示清晰,1表示模糊 |
++illumination | 否 | double | 取值范围在[0~255], 表示脸部区域的光照程度 越大表示光照越好 |
++completeness | 否 | int64 | 人脸完整度,0或1, 0为人脸溢出图像边界,1为人脸都在图像边界内 |
+spoofing | 否 | double | 判断图片是否合成图功能 |
++char | 否 | string | 人脸当前正在读出的文字(当前只支持对数字进行识别,返回内容为单个数字,范围0~9) |
++probability | 否 | double | 置信度,范围0~1 |
+parsing_info | 否 | string | 人脸分层结果 结果数据是使用gzip压缩后再base64编码 使用前需base64解码后再解压缩 原数据格式为string 形如0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,… |
- 返回示例
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094400,
6 "cached": 0,
7 "result": {
8 "face_num": 1,
9 "face_list": [
10 {
11 "face_token": "35235asfas21421fakghktyfdgh68bio",
12 "location": {
13 "left": 117,
14 "top": 131,
15 "width": 172,
16 "height": 170,
17 "rotation": 4
18 },
19 "face_probability": 1,
20 "angle": {
21 "yaw": -0.34859421849251,
22 "pitch": 1.9135693311691,
23 "roll": 2.3033397197723
24 },
25 "landmark": [
26 {
27 "x": 61.67,
28 "y": 133.44
29 },
30 {
31 "x": 99.73,
32 "y": 129.72
33 },
34 {
35 "x": 85.88,
36 "y": 155.07
37 },
38 {
39 "x": 85.82,
40 "y": 173.16
41 }
42 ],
43 "age": 29.298097610474,
44 "expression": {
45 "type": "smile",
46 "probability": 0.5543018579483
47 },
48 "gender": {
49 "type": "male",
50 "probability": 0.99979132413864
51 },
52 "glasses": {
53 "type": "sun",
54 "probability": 0.99999964237213
55 },
56 "eye_status": {
57 "left_eye": 0.9999974966,
58 "right_eye": 0.9999724627
59 },
60 "face_shape": {
61 "type": "triangle",
62 "probability": 0.5543018579483
63 },
64 "quality": {
65 "occlusion": {
66 "left_eye": 0,
67 "right_eye": 0.015625,
68 "nose": 0,
69 "mouth": 0,
70 "left_cheek": 0.03078358248,
71 "right_cheek": 0.03356481344,
72 "chin_contour": 0.006372549105
73 },
74 "blur": 5.188863383e-7,
75 "illumination": 131,
76 "completeness": 1
77 },
78 "lib_language": {
79 "char": "0",
80 "probability": 0.67
81 }
82 }
83 ]
84 }
85}
72个关键点分布图(对应landmark72个点的顺序,序号从0-71):
2.1.2 人脸对比
两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值
- 请求路径
/face-api/v3/face/match
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断。 两张图片通过json格式上传,格式参考表格下方示例 |
image_type | 是 | string | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M; FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |
face_type | 否 | string | 人脸的类型 LIVE:表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等, IDCARD:表示身份证芯片照:二代身份证内置芯片中的人像照片, WATERMARK:表示带水印证件照:一般为带水印的小图,如公安网小图 CERT:表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认LIVE |
quality_control | 否 | string | 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE 若图片质量不满足要求,则返回结果中会提示质量检测失败 |
liveness_control | 否 | string | 活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认 NONE 若活体检测结果不满足要求,则返回结果中会提示活体检测失败 |
- 请求示例
1 [
2 {
3 "image": "sfasq35sadvsvqwr5q...",
4 "image_type": "BASE64",
5 "face_type": "LIVE",
6 "quality_control": "LOW",
7 "liveness_control": "HIGH"
8 },
9 {
10 "image": "sfasq35sadvsvqwr5q...",
11 "image_type": "BASE64",
12 "face_type": "IDCARD",
13 "quality_control": "LOW",
14 "liveness_control": "HIGH"
15 }
16 ]
注意:请求体要求为json格式,可以参考请求示例。
- 请求示例
1[
2 {
3 "image": "sfasq35sadvsvqwr5q...",
4 "image_type": "BASE64",
5 "face_type": "LIVE",
6 "quality_control": "LOW",
7 "liveness_control": "HIGH"
8 },
9 {
10 "image": "sfasq35sadvsvqwr5q...",
11 "image_type": "BASE64",
12 "face_type": "IDCARD",
13 "quality_control": "LOW",
14 "liveness_control": "HIGH"
15 }
16]
- 返回结果
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
score | 是 | float | 人脸相似度得分,推荐阈值80分 |
face_list | 是 | array | 人脸信息列表 |
+face_token | 是 | string | 人脸的唯一标志 |
- 返回示例
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094576,
6 "cached": 0,
7 "result": {
8 "score": 44.3,
9 "face_list": [
10 {
11 "face_token": "fid1"
12 },
13 {
14 "face_token": "fid2"
15 }
16 ]
17 }
18}
2.1.3 人脸搜索
在指定人脸集合中,找到最相似的人脸
- 请求路径
/face-api/v3/face/identify
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断 |
image_type | 是 | string | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M; FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |
group_id_list | 是 | string | 从指定的group中进行查找 用逗号分隔,上限10个 |
quality_control | 否 | string | 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE 若图片质量不满足要求,则返回结果中会提示质量检测失败 |
liveness_control | 否 | string | 活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE 若活体检测结果不满足要求,则返回结果中会提示活体检测失败 |
user_id | 否 | string | 当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能。 |
match_threshold | 否 | int | 匹配阈值(设置阈值后,score低于此阈值的用户信息将不会返回) 最大100 最小0 默认0 此阈值设置得越高,检索速度将会越快,推荐使用80的阈值 |
max_user_num | 否 | unit32 | 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回50个,若您想要修改最大返回人脸数量,请参考4.如何控制1:N返回的最大人脸数问题文档 |
若为视频监控模型,请求参数可以增加下列字段:
若您的前端摄像头是抓拍机抓拍并处理过的单人脸小图模式,推荐您在人脸检测/人脸注册/人脸更新/人脸搜索接口中使用SNAP参数,若为普通摄像头及混合场景模式,使用COMMON参数即可
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image_spec | 否 | string | 图片规格 服务会对不同规格的图片采用不同的图片处理方式 COMMON: 通用图片规格 默认的处理方式(如无适应的图片规格则使用此参数) SNAP: 从人脸抓拍机得到的抓拍图 适用于小图片+单人脸的情况 默认COMMON |
说明:如果使用base 64格式的图片,两张请求的图片请分别进行base64编码。
- 请求示例
1 {
2 "image": "027d8308a2ec665acb1bdf63e513bcb9",
3 "image_type": "FACE_TOKEN",
4 "group_id_list": "group_repeat,group_233",
5 "quality_control": "LOW",
6 "liveness_control": "NORMAL"
7 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
face_token | 是 | string | 人脸标志 |
user_list | 是 | array | 匹配的用户信息列表 |
+group_id | 是 | string | 用户所属的group_id |
+user_id | 是 | string | 用户的user_id |
+user_info | 是 | string | 注册用户时携带的user_info |
+score | 是 | float | 用户的匹配得分,推荐阈值80分 |
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094591,
6 "cached": 0,
7 "result": {
8 "face_token": "fid",
9 "user_list": [
10 {
11 "group_id": "test1",
12 "user_id": "u333333",
13 "user_info": "Test User",
14 "score": 99.3
15 }
16 ]
17 }
18}
2.1.4 M:N 多人脸搜索
使用多人脸的图片, 在指定人脸集合中,查找最相似的人脸
- 请求路径 /face-api/v3/face/midentify
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(数据大小应小于10M 分辨率应小于1920*1080) |
image_type | 是 | string | 图片类型 BASE64:图片的base64值; FACE_TOKEN: face_token 人脸标识 |
group_id_list | 是 | string | 从指定的group中进行查找 用逗号分隔,上限10个 |
max_face_num | 否 | int | 最多处理人脸的数目 默认值为1(仅检测图片中面积最大的那个人脸) 最大值10 |
match_threshold | 否 | int | 匹配阈值(设置阈值后,score低于此阈值的用户信息将不会返回) 最大100 最小0 默认80 此阈值设置得越高,检索速度将会越快,推荐使用默认阈值80 |
quality_control | 否 | string | 质量控制(质量不符合要求的人脸不会出现在返回结果中) NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认NONE |
liveness_control | 否 | string | 活体控制(活体分数不符合要求的人脸不会出现在返回结果中) NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE |
max_user_num | 否 | unit32 | 识别返回的最大用户数,默认为1,最大值20 |
多人脸的情况下 如果设置了质量控制、活体控制参数,不合格的人脸将被过滤,不会出现在结果中。
-
请求示例
Plain Text1{ 2"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKD...", 3"image_type": "BASE64", 4"group_id_list": "group1", 5"max_face_num" : 5, 6"quality_control": "LOW", 7"liveness_control": "NORMAL" 8}
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
face_num | 是 | int | 图片中的人脸数量 |
face_list | 是 | array | 人脸信息列表 |
+face_token | 是 | string | 人脸标志 |
+location | 是 | array | 人脸在图片中的位置 |
++left | 是 | double | 人脸区域离左边界的距离 |
++top | 是 | double | 人脸区域离上边界的距离 |
++width | 是 | double | 人脸区域的宽度 |
++height | 是 | double | 人脸区域的高度 |
++rotation | 是 | int64 | 人脸框相对于竖直方向的顺时针旋转角,[-180,180] |
+user_list | 是 | array | 匹配的用户信息列表 |
++group_id | 是 | string | 用户所属的group_id |
++user_id | 是 | string | 用户的user_id |
++user_info | 是 | string | 注册用户时携带的user_info |
++score | 是 | float | 用户的匹配得分 80分以上可以判断为同一人,此分值对应万分之一误识率 |
-
返回示例
Plain Text1{ 2 "error_code": 0, 3 "error_msg": "SUCCESS", 4 "log_id": 240483475, 5 "timestamp": 1535533440, 6 "cached": 0, 7 "result": { 8 "face_num": 2, 9 "face_list": [ 10 { 11 "face_token": "6fe19a6ee0c4233db9b5bba4dc2b9233", 12 "location": { 13 "left": 31.95568085, 14 "top": 120.3764267, 15 "width": 87, 16 "height": 85, 17 "rotation": -5 18 }, 19 "user_list": [ 20 { 21 "group_id": "group1", 22 "user_id": "5abd24fd062e49bfa906b257ec40d284", 23 "user_info": "userinfo1", 24 "score": 69.85684967041 25 }, 26 { 27 "group_id": "group1", 28 "user_id": "2abf89cffb31473a9948268fde9e1c3f", 29 "user_info": "userinfo2", 30 "score": 66.586112976074 31 } 32 ] 33 }, 34 { 35 "face_token": "fde61e9c074f48cf2bbb319e42634f41", 36 "location": { 37 "left": 219.4467773, 38 "top": 104.7486954, 39 "width": 81, 40 "height": 77, 41 "rotation": 3 42 }, 43 "user_list": [ 44 { 45 "group_id": "group1", 46 "user_id": "088717532b094c3990755e91250adf7d", 47 "user_info": "userinfo", 48 "score": 65.154159545898 49 } 50 ] 51 } 52 ] 53 } 54}
2.1.5 图片活体检测
多图活体检测接口,支持送入1/3/8张图片进行活体检测(如果传入一个人的多张图片,活体判断会更准确)
- 请求路径
/face-api/v3/face/liveness
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断; 可以上传同一个用户的1张、3张或8张图片来进行活体判断,注:后端会选择每组照片中的最高分数作为整体分数。 |
image_type | 是 | string | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M; FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |
face_field | 否 | string | 包括age,expression,face_shape,gender,glasses,landmark,quality,face_type,parsing,eye_status,emotion,feature信息,逗号分隔,默认只返回face_token、活体数、人脸框、概率和旋转角度 |
option | 否 | string | 场景信息,程序会视不同的场景选用相对应的模型。当前支持的场景有COMMON(通用场景),GATE(闸机场景),默认使用COMMON |
- 请求示例
1[
2 {
3 "image": "sfasq35sadvsvqwr5q...",
4 "image_type": "BASE64",
5 "face_field": "age",
6 "option": "COMMON"
7 },
8 {
9 "image": "http://xxx.baidu.com/image1.png",
10 "image_type": "URL",
11 "face_field": "age",
12 "option": "COMMON"
13 },
14 {
15 "image": "9f30d19f86f89f2f07ce88b69557061a",
16 "image_type": "FACE_TOKEN",
17 "face_field": "age",
18 "option": "COMMON"
19 }
20]
- 返回结果
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
face_liveness | 是 | float | 活体分数值 |
thresholds | 是 | array | 由服务端返回最新的阈值数据(随着模型的优化,阈值可能会变化),将此参数与返回的face_liveness进行比较,可以作为活体判断的依据。 frr_1e-4:万分之一误识率的阈值;frr_1e-3:千分之一误识率的阈值;frr_1e-2:百分之一误识率的阈值。误识率越低,准确率越高,相应的拒绝率也越高 |
face_list | 是 | array | 每张图片的详细信息描述,如果只上传一张图片,则只返回一个结果。 |
+face_token | 是 | string | 人脸图片的唯一标识 |
+location | 是 | array | 人脸在图片中的位置 |
++left | 是 | double | 人脸区域离左边界的距离 |
++top | 是 | double | 人脸区域离上边界的距离 |
++width | 是 | double | 人脸区域的宽度 |
++height | 是 | double | 人脸区域的高度 |
++rotation | 是 | int64 | 人脸框相对于竖直方向的顺时针旋转角,[-180,180] |
+face_probability | 是 | double | 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。 |
+angle | 是 | array | 人脸旋转角度参数 |
++yaw | 是 | double | 三维旋转之左右旋转角[-90(左), 90(右)] |
++pitch | 是 | double | 三维旋转之俯仰角度[-90(上), 90(下)] |
++roll | 是 | double | 平面内旋转角[-180(逆时针), 180(顺时针)] |
+age | 否 | double | 年龄 ,当face_field包含age时返回 |
+expression | 否 | array | 表情,当 face_field包含expression时返回 |
++type | 否 | string | none:不笑;smile:微笑;laugh:大笑 |
++probability | 否 | double | 表情置信度,范围【0~1】,0最小、1最大。 |
+face_shape | 否 | array | 脸型,当face_field包含face_shape时返回 |
++type | 否 | double | square: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形 |
++probability | 否 | double | 置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大。 |
+gender | 否 | array | 性别,face_field包含gender时返回 |
++type | 否 | string | male:男性 female:女性 |
++probability | 否 | double | 性别置信度,范围【0~1】,0代表概率最小、1代表最大。 |
+glasses | 否 | array | 是否带眼镜,face_field包含glasses时返回 |
++type | 否 | string | none:无眼镜,common:普通眼镜,sun:墨镜 |
++probability | 否 | double | 眼镜置信度,范围【0~1】,0代表概率最小、1代表最大。 |
+face_type | 否 | array | 真实人脸/卡通人脸 face_field包含face_type时返回 |
++type | 否 | string | human: 真实人脸 cartoon: 卡通人脸 |
++probability | 否 | double | 人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。 |
+landmark | 否 | array | 4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_field包含landmark时返回 |
+landmark72 | 否 | array | 72个特征点位置 face_field包含landmark时返回 |
+quality | 否 | array | 人脸质量信息。face_field包含quality时返回 |
++occlusion | 否 | array | 人脸各部分遮挡的概率,范围[0~1],0表示完整,1表示不完整 |
+++left_eye | 否 | double | 左眼遮挡比例,[0-1] , 1表示完全遮挡 |
+++right_eye | 否 | double | 右眼遮挡比例,[0-1] , 1表示完全遮挡 |
+++nose | 否 | double | 鼻子遮挡比例,[0-1] , 1表示完全遮挡 |
+++mouth | 否 | double | 嘴巴遮挡比例,[0-1] , 1表示完全遮挡 |
+++left_cheek | 否 | double | 左脸颊遮挡比例,[0-1] , 1表示完全遮挡 |
+++right_cheek | 否 | double | 右脸颊遮挡比例,[0-1] , 1表示完全遮挡 |
+++chin | 否 | double | 下巴遮挡比例,,[0-1] , 1表示完全遮挡 |
++blur | 否 | double | 人脸模糊程度,范围[0~1],0表示清晰,1表示模糊 |
++illumination | 否 | double | 取值范围在[0~255], 表示脸部区域的光照程度 越大表示光照越好 |
++completeness | 否 | int64 | 人脸完整度,0或1, 0为人脸溢出图像边界,1为人脸都在图像边界内 |
+liveness | 否 | array | 单张图片活体检测结果 |
++livemapscore | 否 | double | 单张图片的活体打分 范围[0~1] |
+parsing_info | 否 | string | 人脸分层结果 结果数据是使用gzip压缩后再base64编码 使用前需base64解码后再解压缩 原数据格式为string 形如0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,… |
++char | 否 | string | 人脸当前正在读出的文字(当前只支持对数字进行识别,返回内容为单个数字,范围0~9) |
++probability | 否 | double | 置信度,范围0~1 |
- 返回示例
1{
2"error_code": 0,
3"error_msg": "SUCCESS",
4"log_id": 1234567890123,
5"timestamp": 1533094517,
6"cached": 0,
7"result": {
8 "thresholds": {
9 "frr_1e-4": 0.05,
10 "frr_1e-3": 0.3,
11 "frr_1e-2": 0.9
12 },
13 "face_liveness": 0.05532243927,
14 "face_list": [
15 {
16 "face_token": "df46f7c7db4aa09a093c26fb8d1a8d44",
17 "location": {
18 "left": 328.9026489,
19 "top": 97.16340637,
20 "width": 162,
21 "height": 154,
22 "rotation": 32
23 },
24 "face_probability": 1,
25 "angle": {
26 "yaw": 10.16196251,
27 "pitch": 2.244354248,
28 "roll": 33.82199097
29 },
30 "liveness": {
31 "livemapscore": 0.04492170034
32 },
33 "age": 23
34 },
35 {
36 "face_token": "901d2c64274fccd687d311a6e6110a01",
37 "location": {
38 "left": 411.4876404,
39 "top": 166.3593445,
40 "width": 329,
41 "height": 308,
42 "rotation": 45
43 },
44 "face_probability": 0.9194830656,
45 "angle": {
46 "yaw": -1.716423035,
47 "pitch": 7.344647408,
48 "roll": 45.79914856
49 },
50 "liveness": {
51 "livemapscore": 0.001787073661
52 },
53 "age": 23,
54 },
55 {
56 "face_token": "7d57e36981c48b4946eb97c8d838b02a",
57 "location": {
58 "left": 161.4559937,
59 "top": 199.8726501,
60 "width": 218,
61 "height": 201,
62 "rotation": -1
63 },
64 "face_probability": 1,
65 "angle": {
66 "yaw": -8.187754631,
67 "pitch": 6.973727226,
68 "roll": -1.25429821
69 },
70 "liveness": {
71 "livemapscore": 0.05532243927
72 },
73 "age": 23
74 }
75 ]
76}
77}
- 活体阈值说明
阈值 | 误拒率 | 通过率 | 攻击拒绝率 |
---|---|---|---|
0.05 | 0.01% | 99.99% | 63.91% |
0.3 | 0.1% | 99.9% | 90.33% |
0.9 | 1% | 99% | 97.56% |
- 阈值(Threshold):高于此数值,则可判断为活体。(视用户的业务场景需求,选用合适的阈值)
- 误拒率(FRR):如0.5%,指1000次真人请求,会有5次因为活体分数低于阈值被错误拒绝。
- 通过率(TAR):如99%,指100次真人请求,会有99次因为活体分数高于阈值而通过。
- 攻击拒绝率(TRR):如99%,代表100次作弊假体攻击,会有99次被拒绝。
2.2 人脸管理接口
2.2.1 人脸注册
向人脸库中添加人脸(如果group,uid不存在, 则会自动创建用户组和注册用户) 组下单个用户的人脸数目限制为20张(如果不同组下有同一个user_id, 每个组的user_id下的人脸数目都是限制20,不会合并计算) 一个用户组中只能有一个唯一的face_token
- 请求路径:
/face-api/v3/face/add
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断。 注:组内每个uid下的人脸图片数目上限为20张 |
image_type | 是 | string | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M; FACE_TOKEN:人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。 |
group_id | 是 | string | 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制48B。 产品建议:根据您的业务需求,可以将需要注册的用户,按照业务划分,分配到不同的group下,例如按照会员手机尾号作为groupid,用于刷脸支付、会员计费消费等,这样可以尽可能控制每个group下的用户数与人脸数,提升检索的准确率 单个group建议80W人脸上限 |
user_id | 是 | string | 用户id(由数字、字母、下划线组成),长度限制48B |
user_info | 否 | string | 用户资料,长度限制256B 默认空 |
quality_control | 否 | string | 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE 若图片质量不满足要求,则返回结果中会提示质量检测失败 |
liveness_control | 否 | string | 活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE 若活体检测结果不满足要求,则返回结果中会提示活体检测失败 |
action_type | 否 | string | 操作方式 APPEND: 当user_id在库中已经存在时,对此user_id重复注册时,新注册的图片默认会追加到该user_id下 REPLACE : 当对此user_id重复注册时,则会用新图替换库中该user_id下所有图片 默认使用APPEND |
若为视频监控模型,请求参数可以增加下列字段:
若您的前端摄像头是抓拍机抓拍并处理过的单人脸小图模式,推荐您在人脸检测/人脸注册/人脸更新/人脸搜索接口中使用SNAP参数,若为普通摄像头及混合场景模式,使用COMMON参数即可
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image_spec | 否 | string | 图片规格 服务会对不同规格的图片采用不同的图片处理方式 COMMON: 通用图片规格 默认的处理方式(如无适应的图片规格则使用此参数) SNAP: 从人脸抓拍机得到的抓拍图 适用于小图片+单人脸的情况 默认COMMON |
说明:人脸注册完毕后,生效时间一般为5s以内,之后便可以进行人脸搜索或认证操作。
- 请求示例
1 {
2 "image": "027d8308a2ec665acb1bdf63e513bcb9",
3 "image_type": "FACE_TOKEN",
4 "group_id": "group_repeat",
5 "user_id" : "user1",
6 "user_info" : "abc",
7 "quality_control": "LOW",
8 "liveness_control": "NORMAL"
9 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
face_token | 是 | string | 人脸图片的唯一标识 |
location | 是 | array | 人脸在图片中的位置 |
+left | 是 | double | 人脸区域离左边界的距离 |
+top | 是 | double | 人脸区域离上边界的距离 |
+width | 是 | double | 人脸区域的宽度 |
+height | 是 | double | 人脸区域的高度 |
+rotation | 是 | int64 | 人脸框相对于竖直方向的顺时针旋转角,[-180,180] |
每个face_token在用户组下都是唯一的,即同一张人脸无法在同一个用户组下注册多次
- 返回示例
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094602,
6 "cached": 0,
7 "result": {
8 "face_token": "2fa64a88a9d5118916f9a303782a97d3",
9 "location": {
10 "left": 117,
11 "top": 131,
12 "width": 172,
13 "height": 170,
14 "rotation": 4
15 }
16 }
17}
2.2.2 人脸更新
用于对人脸库中指定用户,更新其下的人脸图像。
说明:针对一个user_id执行更新操作,新上传的人脸图像将覆盖该group_id中user_id的原有所有图像。
- 请求路径:
/face-api/v3/face/update
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | string | 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断 |
image_type | 是 | string | 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M; FACE_TOKEN: 人脸图片的唯一标识 |
group_id | 是 | string | 用户组id,标识一组用户(由数字、字母、下划线组成),长度限制128B |
user_id | 是 | string | 用户id(由数字、字母、下划线组成),长度限制48B |
user_info | 否 | string | 用户资料,长度限制48B 默认空 |
quality_control | 否 | string | 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE 若图片质量不满足要求,则返回结果中会提示质量检测失败 |
liveness_control | 否 | string | 活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE 若活体检测结果不满足要求,则返回结果中会提示活体检测失败 |
action_type | 否 | string | 操作方式 UPDATE: 会使用新图替换库中该user_id下所有图片, 若user_id不存在则会报错 REPLACE : 当user_id不存在时, 则会注册这个user_id的用户 默认使用UPDATE |
若为视频监控模型,请求参数可以增加下列字段:
若您的前端摄像头是抓拍机抓拍并处理过的单人脸小图模式,推荐您在人脸检测/人脸注册/人脸更新/人脸搜索接口中使用SNAP参数,若为普通摄像头及混合场景模式,使用COMMON参数即可
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image_spec | 否 | string | 图片规格 服务会对不同规格的图片采用不同的图片处理方式 COMMON: 通用图片规格 默认的处理方式(如无适应的图片规格则使用此参数) SNAP: 从人脸抓拍机得到的抓拍图 适用于小图片+单人脸的情况 默认COMMON |
- 请求示例
1 {
2 "image": "027d8308a2ec665acb1bdf63e513bcb9",
3 "image_type": "FACE_TOKEN",
4 "group_id": "group_repeat",
5 "user_id" : "user1",
6 "user_info" : "cba",
7 "quality_control": "LOW",
8 "liveness_control": "NORMAL"
9 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
log_id | 是 | uint64 | 请求标识码,随机数,唯一 |
face_token | 是 | string | 人脸图片的唯一标识 |
location | 是 | array | 人脸在图片中的位置 |
+left | 是 | double | 人脸区域离左边界的距离 |
+top | 是 | double | 人脸区域离上边界的距离 |
+width | 是 | double | 人脸区域的宽度 |
+height | 是 | double | 人脸区域的高度 |
+rotation | 是 | int64 | 人脸框相对于竖直方向的顺时针旋转角,[-180,180] |
- 返回示例
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094612,
6 "cached": 0,
7 "result": {
8 "face_token": "2fa64a88a9d5118916f9a303782a97d3",
9 "location": {
10 "left": 117,
11 "top": 131,
12 "width": 172,
13 "height": 170,
14 "rotation": 4
15 }
16 }
17}
2.2.3 人脸列表
获取一个用户下的人脸列表
- 请求路径
/face-api/v3/face/list
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
user_id | 是 | string | 用户id(由数字、字母、下划线组成),长度限制4B |
group_id | 是 | string | 用户组id(由数字、字母、下划线组成) 长度限制48B |
- 请求示例
1 {
2 "user_id": "user1",
3 "group_id": "group1"
4 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
face_list | 是 | array | 人脸信息列表 |
+face_token | 是 | string | 人脸标志 |
+ctime | 是 | string | 人脸创建时间 |
- 返回示例
1 {
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094619,
6 "cached": 0,
7 "result": {
8 "face_list": [
9 {
10 "face_token": "fid1",
11 "ctime": "2018-01-01 00:00:00"
12 },
13 {
14 "face_token": "fid2",
15 "ctime": "2018-01-01 10:00:00"
16 }
17 ]
18 }
19 }
2.2.4 删除人脸
删除用户下的某一张人脸 如果该用户下没有其他人脸了则同时删除用户
- 请求路径
/face-api/v3/face/delete
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
user_id | 是 | string | 用户id(由数字、字母、下划线组成),长度限制48B |
group_id | 是 | string | 用户组id(由数字、字母、下划线组成) 长度限制48B |
face_token | 是 | string | 人脸id(由数字、字母、下划线组成)长度限制64B |
- 请求示例
1 {
2 "user_id": "user1",
3 "group_id": "group1",
4 "face_token": "2fa64a88a9d5118916f9a303782a97d3"
5 }
- 返回结果 通过返回的error_code判断是否成功 如失败则查看error_msg获得具体错误信息
- 通过返回的error_code判断是否成功 如失败则查看error_msg获得具体错误信息
1 {
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094650,
6 "cached": 0,
7 "result": null
8 }
2.3 用户管理接口
2.3.1 复制用户
将已经存在于人脸库中的用户复制到一个新的组
- 请求路径
/face-api/v3/user/copy
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
user_id | 是 | string | 用户id |
src_group_id | 是 | string | 从指定group里复制 长度限制48B |
dst_group_id | 是 | string | 需要添加用户的组id 长度限制48B |
- 请求示例
1 {
2 "user_id": "user1",
3 "src_group_id": "group1",
4 "dst_group_id": "group2"
5 }
- 返回结果 通过返回的error_code判断是否成功 如失败则查看error_msg获得具体错误信息
1 {
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094714,
6 "cached": 0,
7 "result": null
8 }
2.3.2 获取用户信息
获取人脸库中某个用户的信息(user_info信息和用户所属的组)
- 请求路径
/face-api/v3/user/get
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
user_id | 是 | string | 用户id(由数字、字母、下划线组成),长度限制48B |
group_id | 是 | string | 用户组id(由数字、字母、下划线组成,长度限制48B) 如传入@ALL则从所有组中查询用户信息 |
- 请求示例
1 {
2 "user_id": "user1",
3 "group_id": "group1"
4 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
user_list | 是 | array | 用户信息列表 |
+user_info | 是 | string | 用户注册时携带的用户信息 |
+group_id | 是 | string | 用户所属的group_id |
- 返回示例
1 {
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094729,
6 "cached": 0,
7 "result": {
8 "user_list": [
9 {
10 "user_info": "user info ...",
11 "group_id": "gid1"
12 },
13 {
14 "user_info": "user info2 ...",
15 "group_id": "gid2"
16 }
17 ]
18 }
19 }
2.3.3 用户列表
获取用户组中的用户列表
- 请求路径
/face-api/v3/user/list
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
group_id | 是 | string | 用户组id |
start | 否 | uint32 | 默认值0,起始序号 |
length | 否 | uint32 | 返回数量,默认值100,最大值1000 |
- 请求示例
1 {
2 "group_id": "group1"
3 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
user_id_list | 是 | array | 用户ID列表 |
- 返回示例
1 {
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094739,
6 "cached": 0,
7 "result": {
8 "user_id_list": [
9 "uid1",
10 "uid2"
11 ]
12 }
13 }
2.3.4 删除用户
将用户从某个组中删除
- 请求路径
/face-api/v3/user/delete
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
group_id | 是 | string | 用户组id(由数字、字母、下划线组成,长度限制48B) 如传入@ALL则从所有组中删除用户 |
user_id | 是 | string | 用户id(由数字、字母、下划线组成,长度限制48B) |
- 请求示例
1 {
2 "user_id": "user1",
3 "group_id": "group1"
4 }
- 返回结果 通过返回的error_code判断是否成功 如失败则查看error_msg获得具体错误信息
1 {
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094766,
6 "cached": 0,
7 "result": null
8 }
2.4 用户组管理接口
2.4.1 创建用户组
创建一个空的用户组
如果用户组已存在 则返回错误
- 请求路径
/face-api/v3/group/add
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
group_id | 是 | string | group标识 (由数字、字母、下划线组成),长度限制48B |
-
请求示例
JSON1{ 2 "group_id": "group1" 3}
- 返回结果 通过返回的error_code判断是否成功 如失败则查看error_msg获得具体错误信息
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094781,
6 "cached": 0,
7 "result": null
8}
2.4.2 用户组列表
获取人脸库中用户组的列表
- 请求路径
/face-api/v3/group/list
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
start | 否 | uint32 | 默认值0,起始序号 |
length | 否 | uint32 | 返回数量,默认值100,最大值1000 |
- 请求示例
1 {
2 "start": 0,
3 "length": 100
4 }
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
group_id_list | 是 | array | group |
- 返回示例
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094800,
6 "cached": 0,
7 "result": {
8 "group_id_list": [
9 "gid1",
10 "gid2"
11 ]
12 }
13}
2.4.3 删除用户组
删除用户组下所有的用户信息及人脸信息 如果组不存在 则返回错误 注:使用删除组接口前需要先绑定定时脚本
1#组删除脚本(部署目录如果不是`/home/work`, 记得修改到部署目录下)
2*/10 * * * * cd /home/work/odp && ./hhvm/bin/hhvm app/face-api/script/DeleteGroup.php
- 路径
/face-api/v3/group/delete
- URL请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | app标识 (由数字、字母、下划线组成),长度限制48B |
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
请求参数 | 必选 | 类型 | 说明 |
---|---|---|---|
group_id | 是 | string | group标识 (由数字、字母、下划线组成),长度限制48B |
- 返回结果
通过返回的error_code判断是否成功 如失败则查看error_msg获得具体错误信息
注:
用户组删除为异步操作,通过定时任务每5min执行一次
1、删除1W人脸库大约需要70s;
2、删除5W人脸库大约需要3min;
3、删除10W人脸库大约需要4min;
1{
2 "error_code": 0,
3 "error_msg": "SUCCESS",
4 "log_id": 1234567890123,
5 "timestamp": 1533094791,
6 "cached": 0,
7 "result": null
8}
2.4.4 查询人脸组数量
- 请求路径: /face-api/facehub/statapp
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
请求参数 | 类型 | 说明 |
---|---|---|
op_app_id_list | string | appid |
-
返回结果
JSON1{ 2 "appid1": { 3 "group_num": 1 4}
批量获取组统计信息
- 请求路径 :/face-api/facehub/statgroup
- Header:
参数 | 值 |
---|---|
Content-Type | application/json |
- Body请求参数
请求参数 | 类型 | 说明 |
---|---|---|
op_app_id | string | appid标识 |
group_id_list | string | groupid列表 多个按, 分隔 限制20个 |
-
返回结果
JSON1{ 2 "gid1": { 3 "user_num": 3, 4 "face_num": 5, 5 "ctime": "2017-11-30 00:00:00", 6 "utime": "2017-11-30 12:00:00" 7 }, 8 "gid2": { 9 "user_num": 3, 10 "face_num": 5, 11 "ctime": "2017-11-30 00:00:00", 12 "utime": "2017-11-30 12:00:00" 13 } 14}
2.5 人脸库管理接口
2.5.1 创建人脸库(APPID)
人脸识别私有化服务中没有单独创建人脸库(Appid)的接口,如果需要创建人脸库,可以直接调用创建人脸组接口实现。
创建方式为:在“创建用户组”接口中可以自定义一个Appid,当组创建成功后,此Appid即可生效。请参考「创建用户组」接口文档。
系统会默认生成一个default的人脸库Appid。
2.5.2 查询appid列表
列出所有的appid
- 请求路径 /face-api/v3/app/list
- 请求参数:无
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
app_id_list | 是 | array | appid |
-
返回示例
JSON1{ 2 "error_code": 0, 3 "error_msg": "SUCCESS", 4 "log_id": 774558169, 5 "timestamp": 1559027574, 6 "cached": 0, 7 "result": { 8 "app_id_list": [ 9 "516978270", 10 "516978277", 11 "516978100" 12 ] 13 } 14}
3.错误码对照表
错误码 | 错误信息 | 说明 | 处理建议 |
---|---|---|---|
222001 | param[] is null | 必要参数未传入 | 参考API说明文档,修改参数 |
222002 | param[start] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222003 | param[length] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222004 | param[op_app_id_list] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222005 | param[group_id_list] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222006 | group_id format error | 参数格式错误 | 参考API说明文档,修改参数 |
222007 | uid format error | 参数格式错误 | 参考API说明文档,修改参数 |
222008 | face_id format error | 参数格式错误 | 参考API说明文档,修改参数 |
222009 | quality_conf format error |
参数格式错误 | 参考API说明文档,修改参数 |
222010 | user_info format error | 参数格式错误 | 参考API说明文档,修改参数 |
222011 | param[uid_list] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222012 | param[op_app_id] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222013 | param[image] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222014 | param[app_id] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222015 | param[image_type] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222016 | param[max_face_num] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222017 | param[face_field] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222018 | param[user_id] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222019 | param[quality_control] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222020 | param[liveness_control] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222021 | param[max_user_num] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222022 | param[id_card_number] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222023 | param[name] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222024 | param[face_type] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222025 | param[face_token] format error |
参数格式错误 | 参考API说明文档,修改参数 |
222026 | param[max_star_num] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222027 | code length param error | 验证码长度错误 (最小值大于最大值) |
参考API说明文档,修改参数 |
222028 | param[min_code_length] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222029 | param[max_code_length] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222030 | param[match_threshold] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222200 | request body should be json format | 该接口需使用 application/json的 格式进行请求 |
请修改接口格式为: application/json |
222201 | network not available | 服务端请求失败 | 重新尝试 |
222202 | pic not has face | 图片中没有人脸 | 检查图片质量 |
222203 | image check fail | 无法解析人脸 | 检查图片质量 |
222204 | image_url_download_fail | 从图片的url下载 图片失败 |
请确认url可公网访问 |
222205 | network not availablel | 服务端请求失败 | 重新尝试 |
222206 | rtse service return fail | 服务端请求失败 | 重新尝试 |
222207 | match user is not found |
未找到匹配的用户 | 请确认人脸库中 是否存在此用户 |
222208 | the number of image is incorrect |
图片的数量错误 | 多张图片请使用 json格式传输 |
222209 | face token not exist | face token不存在 | 请确认您操作的 人脸已创建成功; 若face_token未注册到 人脸库则有效期只有1小时 注册人脸库的 face_token永久有效 |
222210 | the number of user's faces is beyond the limit | 人脸库中用户下的人脸数目超过限制 | 当前每个用户下限制人脸数目最大20张 |
222300 | add face fail | 人脸图片添加失败 | 重新尝试 |
222301 | get face fail | 获取人脸图片失败 | 请重新尝试, 如果持续出现此类错误, 请提交工单 |
222302 | system error | 服务端请求失败 | 重新尝试 |
222303 | get face fail | 获取人脸图片失败 | 请重新尝试, 如果持续出现此类错误,请提交工单 |
223100 | group is not exist | 操作的用户组不存在 | 请确认您操作的 用户组已创建成功 |
223101 | group is already exist | 该用户组已存在 | 请不要重复创建用户组 |
223102 | user is already exist | 该用户已存在 | 请不要重复创建用户 |
223103 | user is not exist | 找不到该用户 | 请确认您操作的 用户已创建成功 |
223104 | group_list is too large | group_list包含组 数量过多 |
请按照文档提示 设置group_list参数 |
223105 | face is already exist | 该人脸已存在 | 请不要重复添加人脸 |
223106 | face is not exist | 该人脸不存在 | 请确认您操作的 人脸已创建成功; 若face_token未注册到 人脸库则有效期只有1小时, 注册人脸库的 face_token永久有效 |
223110 | uid_list is too large | uid_list包含数量过多 | 请按照文档提示 设置user_list参数 |
223111 | dst group not exist | 目标用户组不存在 | 请确认您操作的 用户组已创建成功 |
223112 | quality_conf format error |
quality_conf格式不正确 | 请按照文档提示设置 quality_conf参数 |
223113 | face is covered | 人脸有被遮挡 | 提示用户请勿遮挡面部 |
223114 | face is fuzzy | 人脸模糊 | 人脸图片模糊, 前端页面可以提示 用户拍摄时不要晃动手机 |
223115 | face light is not good | 人脸光照不好 | 提示用户到光线适宜的地方拍摄 |
223116 | incomplete face | 人脸不完整 | 提示用户请勿遮挡面部 |
223117 | app_list is too large | app_list包含app数量 过多 |
请按照文档提示设置 app_list参数 |
223118 | quality control error | 质量控制项错误 | 请按照文档提示设置 质量控制参数 |
223119 | liveness control item error |
活体控制项错误 | 请按照文档提示设置 活体控制参数 |
223120 | liveness check fail | 活体检测未通过 | 此次活体检测结果为非活体 |
223121 | left eye is occlusion | 质量检测未通过 左眼 遮挡程度过高 |
提示用户请勿遮挡左眼 |
223122 | right eye is occlusion | 质量检测未通过 右眼 遮挡程度过高 |
提示用户请勿遮挡右眼 |
223123 | left cheek is occlusion | 质量检测未通过 左脸 遮挡程度过高 |
提示用户请勿遮挡左脸颊 |
223124 | right cheek is occlusion |
质量检测未通过 右脸 遮挡程度过高 |
提示用户请勿遮挡右脸颊 |
223125 | chin contour is occlusion |
质量检测未通过 下巴遮挡程度过高 | 提示用户请勿遮挡下巴 |
223126 | nose is occlusion | 质量检测未通过 鼻子遮挡程度过高 | 提示用户请勿遮挡鼻子 |
223127 | mouth is occlusion | 质量检测未通过 嘴巴 遮挡程度过高 |
提示用户请勿遮挡嘴巴 |
222901 | system busy | 参数校验初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222902 | system busy | 参数校验初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222903 | system busy | 参数校验初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222904 | system busy | 参数校验初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222905 | system busy | 接口初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222906 | system busy | 接口初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222907 | system busy | 缓存处理失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222908 | system busy | 缓存处理失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222909 | system busy | 缓存处理失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222910 | system busy | 数据存储处理失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222911 | system busy | 数据存储处理失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222912 | system busy | 数据存储处理失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222913 | system busy | 接口初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222914 | system busy | 接口初始化失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222915 | system busy | 后端服务连接失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222916 | system busy | 后端服务连接失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222304 | image size is too large | 图片尺寸太大 | 请确保图片尺寸在1920x1080以下下 |
223128 | group was deleting | 正在清理该用户组的数据 | 请等该用户组清理完毕后再对 该组进行操作 |
222361 | system busy | 公安服务连接失败 | 请重新尝试, 若尝试多次无效, 请提交工单咨询 |
222046 | param[template_type] format error | 参数格式错误 | 请参考接口文档修改 |
222101 | param[merge_degree] format error | 参数格式错误 | 请参考API说明文档,修改参数 |
222102 | param[face_location] format error | 参数格式错误 | 参考API说明文档,修改参数 |
222307 | image illegal, reason: porn | 图片非法 鉴黄未通过 | 请重新上传合法的图片 |
222308 | image illegal, reason: sensitive person | 图片非法 含有政治敏感人物 | 请重新上传合法的图片 |
222211 | template image quality reject | 人脸融合失败 模板图质量不合格 | 请检查模板图是否符合 人脸融合文档中的质量要求 |
222212 | merge face fail | 人脸融合失败 | 请更换素材后重新尝试, 如果持续出现此类错误,请提交工单 |
223129 | face not forward | 人脸未面向正前方 (人脸的角度信息大于30度) |
请使用面向正前方的人脸图片 |
222290 | auth fail | feature服务鉴权失败 | 请检查授权服务运行正常,网络通畅 |
222291 | qps exceed maximum | feature服务QPS超限 | 请降低服务访问频率 |
222292 | auth expired | feature服务鉴权过期 | 请联系服务人员更新授权文件 |
222293 | instance exceed maximum | feature服务实例数超限 | 请将运行实例数控制在授权数量内 |