人脸搜索
一、接口描述
1. 功能描述
人脸搜索也称为 1:N 识别,即在一个已有人脸分组中找出与指定人脸最相似的一张或多张人脸。
2. 接口使用
平台为每个API提供试用体验服务,您在AI市场选择“免费试用”规格下单后,即可开始体验业内领先的人工智能API服务。 免费试用服务具有调用量、QPS限制,如需更高性能的API服务,可以提交咨询工单,联系京东AI扩容购买。
在获得使用权限后,您可使用已经封装好的SDK/参照接口鉴权规则进行相应开发,整体流程详见 接入流程。
3. 图片要求
- 图片格式:bmp, jpg, jpeg, png, jfif
- 图片像素尺寸:最小 48*48 像素,最大 2048*2048 像素
- 图片 Base64 大小:小于2MB
二、请求说明
1. 接口地址:
https://aiapi.jd.com/jdai/faceSearchV1
2. 请求方式:
POST
3. 请求参数
(1)query请求参数
公共请求参数
名称 | 类型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|
appkey | string | 是 | 80d2b762ecb86593f9668526920f46c | 您的appkey,可在买家中心控制台中获取 |
timestamp | long | 是 | 1541491668060 | 请求的时间戳,精确到毫秒,timestamp有效期5分钟 |
sign | string | 是 | 2e148773a0337a8f2200ba90d445f083 | 签名,根据规则MD5(sectetkey+timestamp) |
(2)body请求参数
业务请求参数
名称 | 类型 | 必填 | 示例值 | 描述 |
groupId | string | 是 | 5de9ff3087887242172ce62d | 分组 Id,唯一标识;分组不存在时,将自动创建 |
topN | int | 否 | 1 | 希望返回前n张脸,每张脸相似度最高的结果;范围为 [1, 10],默认为5 |
threshold | float | 否 | 0.56 | 人脸相似度阈值,范围为 [0, 1],不设置则使用默认值 |
imgBase64 | string | 是 | 图像Base64编码值,去掉图片头"data:image/png;base64,",imgBase64=iVBORw0K...(由于过长,不给出示例) | 图片Base64编码 |
返回说明
1、返回参数
(1)公共返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
code | string | 1000 | 参见下方错误码-系统级错误码 |
charge | boolean | false 或 true | false:不扣费, true:扣费 |
remainTimes | long | 1305 | 剩余调用次数;免费api:每天剩余调用次数;收费api:剩余次数;无限制时为-1 |
remainSeconds | long | 1223456 | 剩余调用时间(s);免费api:-1;收费api:剩余调用时间;无限制时为-1 |
msg | string | 查询成功 | 参见下方错误码-系统级错误码 |
result | object | {...} | 查询结果 |
(2)业务返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
code | int | 0 | 状态码,0 为成功,非 0 请参考以下 业务错误码 |
msg | string | Accept | 状态码对应的说明 |
processTimeInMs | long | 34 | 从接收请求到处理结束的耗时,毫秒 |
timestamp | long | 1576728627956 | 返回时的时间戳 |
faceItems | array | [] | 每个人脸的检测结果;具体类型请参考下方 |
faceMatches | array | [] | 从指定人脸库匹配到的人脸结果;具体类型请参考下方 |
faceItems 数组中单个元素的结构:
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
boundingBox | object | { "left" : 490.11, "top" : 85.42, "width" : 108.84, "height" : 143.84 } | 人脸识别矩形框的位置,包括以下属性值: left:矩形框左上角像素点的横坐标 top:矩形框左上角像素点的纵坐标 width:矩形框的宽度 height:矩形框的高度 |
posture | object | { "yaw" : -11.58, "pitch" : -4.56, "roll" : -2.37 } | 人脸角度,包括以下属性值: yaw:人脸旋转角度,偏航角(Y轴),单位 度 pitch:人脸旋转角度,俯仰角(X轴),单位 度 roll:人脸旋转角度,翻滚角(Z轴),单位 度 |
isValidPosture | bool | true | 人脸角度是否在合理的阈值内 |
ptScore | float | 0.3 | 人脸关键点置信度;默认阈值为 20,小于该阈值的人脸才会返回 |
faceMatches 数组中单个元素的结构:
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
faceId | string | 5dfb1daa8788720a7305d65f | 人脸的唯一 id |
customInfo | string | {} | 请求时输入的 customInfo |
imgBase64 | string | 图像Base64编码值,去掉图片头"data:image/png;base64,",imgBase64=iVBORw0K...(由于过长,不给出示例) | 裁剪后的人脸图像 Base64 |
createTime | long | 1576808089949 | 创建的时间戳 |
updateTime | long | 1576808123367 | 最后一次更新的时间戳 |
score | float | 0.96252918243408203 | 人脸匹配分值 |
2、返回示例
{
"status": 0,
"charge": false,
"remain": 97,
"msg": "查询成功",
"result": {
"code" : 0,
"msg" : "Accept",
"processTimeInMs" : 552,
"timestamp" : 1576729150797,
"faceItems" : [
{
"boundingBox" : {
"height" : 559.81,
"left" : 375.71,
"top" : 109.00,
"width" : 406.53
},
"isValidPosture" : true,
"posture" : {
"pitch" : -9.99,
"roll" : -1.56,
"yaw" : 13.43
}
},
{
"boundingBox" : {
"height" : 554.01,
"left" : 849.03,
"top" : 98.94,
"width" : 392.19
},
"isValidPosture" : true,
"posture" : {
"pitch" : -10.72,
"roll" : 0.68,
"yaw" : -1.38
}
}
],
"faceMatches" : [
{
"createTime" : "1576808089949",
"customInfo" : "45464",
"faceId" : "5dfc2e998788724bae434395",
"groupId" : "5df8c5ae87887252653b3cec",
"imgBase64" : "/9j/4AAQSkZJRgAB...",
"score" : 0.96,
"updateTime" : "1576808123367"
}
]
}
}
四、错误码
1.系统级错误码
2.业务错误码
业务错误码(code) | 对应msg | 说明 |
1 | NoRequiredFields | 参数缺失 |
2 | ImageIsTooSmall | 图片太小 |
3 | ImageIsTooLarge | 图片太大 |
4 | Base64IsInvalid | 图片 Base64 不合法 |
5 | Base64IsTooLarge | 图片 Base64 大小超过 2MB |
6 | GroupIdIsNotExist | groupId 不存在 |
8 | ParamIsOutOfRange | 参数不在范围内 |
9 | ParamTypeIsInvalid | 参数类型错误 |
10 | NoFaceDetected | 没有检测到人脸 |
11 | InvalidFaceQuality | 人脸不够清晰,质量分小于阈值 |
12 | InvalidFacePosture | 人脸角度太大,大于阈值 |
14 | SearchFaceIsEmpty | 无搜索结果 |
31 | RequestBodyIsNotJson | 请求的 body 需要 json 字符串 |
41 | TimeoutException | 处理超时(> 10秒的处理立即返回) |