# 人脸图片比对
上传两张人脸图片,比对相似度,返回值越接近1,相似度越高。
# 一、请求说明
请求地址:http://api.spiderid.cn/api/router/rest,https://api.spiderid.cn/api/router/rest
服务接口名称(即公共参数method的值): image.face.compare
请求方式:POST
# 二、请求参数
- 请求参数以表单形式提交,Content-Type值为: application/x-www-form-urlencoded;charset=utf-8
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
imageSource | String | 是 | 源图片数据:以base64:开头 (图片base64数据), 以fs: 开头(文件云文件) |
faceTypeSource | String | 是 | 源图片类型:LIVE,IDCARD,WATERMARK,CERT。 见FaceType类型介绍 |
qualitySource | String | 否 | 源图片质量控制:NONE,LOW,NORMAL,HIGH 。 见QualityControl类型介绍 |
livenessSource | String | 否 | 源图片活体控制:NONE,LOW,NORMAL,HIGH 。 见LivenessControl类型介绍 |
imageTarget | String | 是 | 对比图片数据:以base64:开头 (图片base64数据), 以fs: 开头(文件云文件) |
faceTypeTarget | String | 是 | 对比图片类型:LIVE,IDCARD,WATERMARK,CERT 。 见FaceType类型介绍 |
qualityTarget | String | 否 | 对比图片质量控制:NONE,LOW,NORMAL,HIGH 。 见QualityControl类型介绍 |
livenessTarget | String | 否 | 对比图片活体控制:NONE,LOW,NORMAL,HIGH。 见LivenessControl类型介绍 |
字段解释
FaceType 图片类型介绍
类型字段 | 介绍 |
---|---|
LIVE | 默认 表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 |
IDCARD | 表示身份证芯片照:⼆代身份证内置芯片中的人像照片 |
WATERMARK | 表示带水印证件照:⼀般为带水印的小图,如权威身份认证信息库网小图 |
CERT | 表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 |
- QualityControl 质量类型介绍
类型字段 | 介绍 |
---|---|
NONE | 默认 不进行控制 |
LOW | 较低的质量要求 |
NORMAL | 一般的质量要求 |
HIGH | 较高的质量要求 |
- LivenessControl 活体类型介绍
类型字段 | 介绍 |
---|---|
NONE | 默认 不进行控制 |
LOW | 较低的质量要求(高通过率,低攻击拒绝率) |
NORMAL | 一般的质量要求(平衡的攻击拒绝率,通过率) |
HIGH | 较高的质量要求(低通过率,高攻击拒绝率) |
请求示例:
http或https://api.spiderid.cn/api/router/rest?
<[公共请求参数]>
imageSource=XXX&imageTarget=XXX&...
# 三、响应参数
data 结果信息 | 类型 | 描述 |
---|---|---|
message | String | 描述 |
incorrect | Integer | 返回码 |
score | Double | 分数,返回值越接近1,相似度越高 |
# 四、成功示例
JSON示例
{
"code": 0,
"message": "success",
"requestId": "add...f822",
"data": {
"incorrect": 100,
"message": "比对成功",
"score": 0.2245
}
}
# 五、失败示例
JSON示例
{
"code": 0,
"message": "success",
"requestId": "75da...637",
"data": {
"incorrect": 101,
"message": "图片质量不合法"
}
}
# 六、返回码说明(incorrect)
返回码 | 描述 | 是否收费 |
---|---|---|
100 | 比对成功 | 是 |
101 | 图片质量不合法 | 否 |
102 | 上传图片文件过大 | 否 |
103 | 活体检测未通过 | 是 |
104 | 比对失败 | 否 |
# SDK 请求示例
public static void main(String[] args) throws IOException {
//提供的url
String url = "http://api.spiderid.cn/api/router/rest";
//您的appKey
String appkey = "XXX";
//您的appSecret
String secretKey = "XXX";
try {
ImageFaceCompareRequest request = new ImageFaceCompareRequest();
//源照片 图片质量控制非必填 活体控制非必填
//1.base64:开头,使用base64为字符串传参
String imgSourxe = "base64:" + Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("C:/aaa.png")));
//2.fs: 开头
//String imgTarget = uploadFile(url, appkey, secretKey);
request.setImageSource(imgSourxe);
request.setFaceTypeSource(FaceType.LIVE);
//对比照片
//1.base64: 开头,使用base64为字符串传参
//String imgTarget = "base64:" + Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("C:/aa.jpg")));
//2.fs: 开头
String imgTarget = uploadFile(url, appkey, secretKey);
request.setImageTarget(imgTarget);
request.setFaceTypeTarget(FaceType.LIVE);
request.setQualityTarget(QualityControl.NORMAL);
request.setLivenessTarget(LivenessControl.NORMAL);
//1.默认客户端
ApiClient apiClient = new DefaultApiClient(url, appkey, secretKey);
//2.调用出错自动重试客户端
//AutoRetryApiClient apiClient = new AutoRetryApiClient(url, appkey, secretKey);
ImageFaceCompareResponse response = apiClient.execute(request);
//后续业务处理
} catch (ApiException e) {
e.printStackTrace();
}
}
/**
* fs:开头,需要调用我们提供的上传接口,获取bucket,和objectKey,格式为:fs:+bucket:+objectKey
*
* @param url
* @param appkey
* @param secretKey
* @return
* @throws ApiException
* @throws IOException
*/
private static String uploadFile(String url, String appkey, String secretKey) throws ApiException, IOException {
ApiClient client = new DefaultApiClient(url, appkey, secretKey);
FsUploadPolicyRequest req = new FsUploadPolicyRequest();
req.setBizType("face");
//获取文件上传权限
FsUploadPolicyResponse fsResponse = client.execute(req);
//获取权限识别
if (null == fsResponse.getData()) {
throw new ApiException();
}
//上传文件示例
Map<String, String> params = new HashMap<String, String>(5);
params.put("token", fsResponse.getData().token);
if (fsResponse.getData().getObjectKey().endsWith("/")) {
params.put("key", fsResponse.getData().getObjectKey() + "${filename}");
} else {
params.put("key", fsResponse.getData().getObjectKey());
}
//需要上传的文件
Map<String, FileItem> fileParams = new HashMap<String, FileItem>(5);
fileParams.put("file", new FileItem(new File("C:/111.jpg")));
//上传
String uploadUrl = fsResponse.getData().getUploadUrl();
String json = WebUtils.doPost(uploadUrl, params, fileParams, 30000, 30000);
JSONObject jsonObject = JSON.parseObject(json);
jsonObject.getString("bucket");
return "fs:" + jsonObject.getString("bucket") + ":"+jsonObject.getString("objectKey");
}