# 人脸图片比对

上传两张人脸图片,比对相似度,返回值越接近1,相似度越高。

# 一、请求说明

# 二、请求参数

  • 请求参数以表单形式提交,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");
    }

最后更新于: 4/16/2020, 1:08:09 PM