人脸比对接口
2020.08.14 16:17:00
接口地址
https://verify.dun.163.com/v1/facecompare/check
接口描述
上传2张人脸图片,识别两张人脸的相似度,以判断是否为同一人。
请求参数
公共参数已省略,详细见 请求公共参数,其他参数如下:
参数名称 | 类 型 | 是否必选 | 最大长度 | 描述 |
---|---|---|---|---|
avatar1 | String | Y | URL不超过256, BASE64不超过200K | 用于人脸比对的头像照,请上传无遮挡的清晰正面照,轮廓保持完整 |
avatar2 | String | Y | URL不超过256, BASE64不超过200K | 用于人脸比对的头像照,请上传无遮挡的清晰正面照,轮廓保持完整 |
picType | Number | Y | 图片类型:1-URL, 2-BASE64 |
响应结果
响应字段如下,响应通用字段已省略,详细见响应通用字段:
result 数据结构
参数名称 | 类型 | 描述 |
---|---|---|
matched | Integer | 比对结果,0:其他错误,1:是同一人,2:不是同一人 |
score | Double | 相似度得分,范围0-1,分数越高,相似度越高。真人判断阈值推荐为0.55(matched字段采用该阈值)。开发者也可根据自己的认证场景依据该字段控制自己的阈值 |
taskId | String | 本次请求数据标识,可以根据该标识在控制台进行数据查询。强烈建议开发者保存该ID,便于后续排查问题 |
使用建议:如果您的图片对比源是用户头像等高度美化PS过的照片,而采集源是真实人像(比如活体检测),建议您根据score字段自行判断比对结果。PS程度越高,阈值建议设置得越低。 |
请求示例
- 备注:示例代码中的HttpClient4Utils、SignatureUtils工具类参见点击查看详情
/** 产品密钥ID,产品标识 */
private final static String SECRETID = "your_secret_id";
/** 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 */
private final static String SECRETKEY = "your_secret_key";
/** 业务ID,易盾根据产品业务特点分配 */
private final static String BUSINESSID = "your_business_id";
/** 易盾身份认证服务人脸比对在线检测接口地址 */
private final static String API_URL = "https://verify.dun.163yun.com/v1/facecompare/check";
/** 实例化HttpClient,发送http请求使用,可根据需要自行调参 */
private static HttpClient httpClient = HttpClient4Utils.createHttpClient(100, 20, 2000, 2000, 2000);
/**
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Map<String, String> params = new HashMap<String, String>();
// 1.设置公共参数
params.put("secretId", SECRETID);
params.put("businessId", BUSINESSID);
params.put("version", "v1");
params.put("timestamp", String.valueOf(System.currentTimeMillis()));
params.put("nonce", String.valueOf(new Random().nextInt()));
// 2.设置私有参数
params.put("avatar1", "http://p1.music.126.net/hRKlEHgk7vrn5lXB0pBbbw==/109951164471991113.jpg?imageView&thumbnail=500z500");
params.put("avatar1", "http://p1.music.126.net/hRKlEHgk7vrn5lXB0pBbbw==/109951164471991113.jpg?imageView&thumbnail=500z500");
params.put("picType", 1);
// 3.生成签名信息
String signature = SignatureUtils.genSignature(SECRETKEY, params);
params.put("signature", signature);
// 4.发送HTTP请求,这里使用的是HttpClient工具包,产品可自行选择自己熟悉的工具包发送请求
String response = HttpClient4Utils.sendPost(httpClient, API_URL, params, Consts.UTF_8);
// 5.解析接口返回值
JsonObject jObject = new JsonParser().parse(response).getAsJsonObject();
int code = jObject.get("code").getAsInt();
String msg = jObject.get("msg").getAsString();
if (code == 200) {
JsonObject resultObject = jObject.getAsJsonObject("result");
int status = resultObject.get("status").getAsInt();
String taskId = resultObject.get("taskId").getAsString();
int reasonType = resultObject.get("reasonType").getAsInt();
if (status == 1) {
System.out.println(String.format("taskId=%s,在线认证结果:通过", taskId));
} else if (status == 2) {
System.out.println(String.format("taskId=%s,在线认证结果:不通过, 原因:%s", taskId, reasonType));
} else if (status == 0) {
System.out.println(String.format("taskId=%s,在线认证结果:待定", taskId));
}
} else {
System.out.println(String.format("ERROR: code=%s, msg=%s", code, msg));
}
}