Skip to content

Commit

Permalink
version 4.3.1:修复人脸活体检测问题
Browse files Browse the repository at this point in the history
  • Loading branch information
flyhighzy committed May 10, 2018
1 parent fbb2b09 commit 07ab0f5
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 55 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.3.0</version>
<version>4.3.1</version>
<name>aip-java-sdk</name>
<description>The AIP SDK for Java provides Java APIs for all of AI APIs. </description>
<url>http://ai.baidu.com/sdk</url>
Expand Down
103 changes: 52 additions & 51 deletions src/main/java/com/baidu/aip/face/AipFace.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@ public AipFace(String appId, String apiKey, String secretKey) {
/**
* 人脸检测接口
*
*
* @param image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* @param imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
* face_field 包括age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities信息,逗号分隔,默认只返回人脸框、概率和旋转角度
* face_field 包括**age,beauty,expression,faceshape,gender,glasses,landmark,race,quality,facetype,parsing信息** <br> 逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度
* max_face_num 最多处理人脸的数目,默认值为1,仅检测图片中面积最大的那个人脸;**最大值10**,检测图片中面积最大的几张人脸。
* face_type 人脸的类型 **LIVE**表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等**IDCARD**表示身份证芯片照:二代身份证内置芯片中的人像照片 **WATERMARK**表示带水印证件照:一般为带水印的小图,如公安网小图 **CERT**表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认**LIVE**
* @return JSONObject
Expand All @@ -56,44 +55,46 @@ public JSONObject detect(String image, String imageType, HashMap<String, String>
request.addBody(options);
}
request.setUri(FaceConsts.DETECT);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 人脸搜索接口
*
*
* @param image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* @param imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* @param groupIdList - 从指定的group中进行查找 用逗号分隔,**上限20个**
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
* group_id_list 从指定的group中进行查找 用逗号分隔,**上限20个**
* quality_control 图片质量控制 **NONE**: 不进行控制 **LOW**:较低的质量要求 **NORMAL**: 一般的质量要求 **HIGH**: 较高的质量要求 **默认 NONE**
* liveness_control 活体检测控制 **NONE**: 不进行控制 **LOW**:较低的活体要求(高通过率 低攻击拒绝率) **NORMAL**: 一般的活体要求(平衡的攻击拒绝率, 通过率) **HIGH**: 较高的活体要求(高攻击拒绝率 低通过率) **默认NONE**
* user_id 当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能。
* max_user_num 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回5个
* max_user_num 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回20个
* @return JSONObject
*/
public JSONObject search(String image, String imageType, HashMap<String, String> options) {
public JSONObject search(String image, String imageType, String groupIdList, HashMap<String, String> options) {
AipRequest request = new AipRequest();
preOperation(request);

request.addBody("image", image);

request.addBody("image_type", imageType);

request.addBody("group_id_list", groupIdList);
if (options != null) {
request.addBody(options);
}
request.setUri(FaceConsts.SEARCH);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 人脸注册接口
*
*
* @param image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* @param imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
Expand All @@ -120,14 +121,14 @@ public JSONObject addUser(String image, String imageType, String groupId, String
request.addBody(options);
}
request.setUri(FaceConsts.USER_ADD);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 人脸更新接口
*
*
* @param image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* @param imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* @param groupId - 更新指定groupid下uid对应的信息
Expand All @@ -154,14 +155,14 @@ public JSONObject updateUser(String image, String imageType, String groupId, Str
request.addBody(options);
}
request.setUri(FaceConsts.USER_UPDATE);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 人脸删除接口
*
*
* @param userId - 用户id(由数字、字母、下划线组成),长度限制128B
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
* @param faceToken - 需要删除的人脸图片token,(由数字、字母、下划线组成)长度限制64B
Expand All @@ -182,14 +183,14 @@ public JSONObject faceDelete(String userId, String groupId, String faceToken, Ha
request.addBody(options);
}
request.setUri(FaceConsts.FACE_DELETE);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 用户信息查询接口
*
*
* @param userId - 用户id(由数字、字母、下划线组成),长度限制128B
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
* @param options - 可选参数对象,key: value都为string类型
Expand All @@ -207,13 +208,13 @@ public JSONObject getUser(String userId, String groupId, HashMap<String, String>
request.addBody(options);
}
request.setUri(FaceConsts.USER_GET);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 组列表查询接口
*
* 获取用户人脸列表接口
*
* @param userId - 用户id(由数字、字母、下划线组成),长度限制128B
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
Expand All @@ -232,14 +233,14 @@ public JSONObject faceGetlist(String userId, String groupId, HashMap<String, Str
request.addBody(options);
}
request.setUri(FaceConsts.FACE_GETLIST);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 获取用户列表接口
*
*
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
Expand All @@ -256,14 +257,14 @@ public JSONObject getGroupUsers(String groupId, HashMap<String, String> options)
request.addBody(options);
}
request.setUri(FaceConsts.GROUP_GETUSERS);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 复制用户接口
*
*
* @param userId - 用户id(由数字、字母、下划线组成),长度限制128B
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
Expand All @@ -280,13 +281,13 @@ public JSONObject userCopy(String userId, HashMap<String, String> options) {
request.addBody(options);
}
request.setUri(FaceConsts.USER_COPY);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 人脸删除接口
*
* 删除用户接口
*
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
* @param userId - 用户id(由数字、字母、下划线组成),长度限制128B
Expand All @@ -305,13 +306,13 @@ public JSONObject deleteUser(String groupId, String userId, HashMap<String, Stri
request.addBody(options);
}
request.setUri(FaceConsts.USER_DELETE);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 获取用户列表接口
*
* 创建用户组接口
*
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
* @param options - 可选参数对象,key: value都为string类型
Expand All @@ -327,14 +328,14 @@ public JSONObject groupAdd(String groupId, HashMap<String, String> options) {
request.addBody(options);
}
request.setUri(FaceConsts.GROUP_ADD);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 删除用户组接口
*
*
* @param groupId - 用户组id(由数字、字母、下划线组成),长度限制128B
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
Expand All @@ -349,14 +350,14 @@ public JSONObject groupDelete(String groupId, HashMap<String, String> options) {
request.addBody(options);
}
request.setUri(FaceConsts.GROUP_DELETE);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 组列表查询接口
*
*
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
* start 默认值0,起始序号
Expand All @@ -370,14 +371,14 @@ public JSONObject getGroupList(HashMap<String, String> options) {
request.addBody(options);
}
request.setUri(FaceConsts.GROUP_GETLIST);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 身份验证接口
*
*
* @param image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* @param imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* @param idCardNumber - 身份证号(真实身份证号号码)
Expand All @@ -403,40 +404,14 @@ public JSONObject personVerify(String image, String imageType, String idCardNumb
request.addBody(options);
}
request.setUri(FaceConsts.PERSON_VERIFY);
postOperation(request);
return requestServer(request);
}

/**
* 在线活体检测接口
*
*
* @param image - 图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* @param imageType - 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
* face_fields 如不选择此项,返回结果默认只有人脸框、概率和旋转角度。可选参数为qualities、faceliveness。qualities:图片质量相关判断;faceliveness:活体判断。如果两个参数都需要选择,请使用半角逗号分隔。
* @return JSONObject
*/
public JSONObject faceverify(String image, String imageType, HashMap<String, String> options) {
AipRequest request = new AipRequest();
preOperation(request);

request.addBody("image", image);

request.addBody("image_type", imageType);
if (options != null) {
request.addBody(options);
}
request.setUri(FaceConsts.FACEVERIFY);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 语音校验码接口接口
*
*
* @param options - 可选参数对象,key: value都为string类型
* options - options列表:
* appid 百度云创建应用时的唯一标识ID
Expand All @@ -449,14 +424,14 @@ public JSONObject videoSessioncode(HashMap<String, String> options) {
request.addBody(options);
}
request.setUri(FaceConsts.VIDEO_SESSIONCODE);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 视频活体检测接口接口
*
*
* @param sessionId - 语音校验码会话id,使用此接口的前提是已经调用了语音校验码接口
* @param videoBase64 - 二进制图像数据
* @param options - 可选参数对象,key: value都为string类型
Expand All @@ -475,14 +450,14 @@ public JSONObject videoFaceliveness(String sessionId, byte[] videoBase64, HashMa
request.addBody(options);
}
request.setUri(FaceConsts.VIDEO_FACELIVENESS);
request.setBodyFormat(EBodyFormat.RAW_JSON);
postOperation(request);
return requestServer(request);
}

/**
* 视频活体检测接口接口
*
*
* @param sessionId - 语音校验码会话id,使用此接口的前提是已经调用了语音校验码接口
* @param videoBase64 - 本地图片路径
* @param options - 可选参数对象,key: value都为string类型
Expand All @@ -499,11 +474,12 @@ public JSONObject videoFaceliveness(String sessionId, String videoBase64, HashMa
}
}


/**
* 人脸对比接口
* 两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值
*
* @param input - 请求参数array<MatchRequest>
* @param input - 请求参数array
* image: 必须,图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* imageType: 必须,图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* faceType: 可选,人脸的类型 LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片 WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图 CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片 默认LIVE
Expand All @@ -526,4 +502,29 @@ public JSONObject match(List<MatchRequest> input) {
return requestServer(request);
}

/**
* 在线活体检测接口
*
*
* @param input - 请求参数array
* image: 必须,图片信息(**总数据大小应小于10M**),图片上传方式根据image_type来判断
* imageType: 必须 图片类型 **BASE64**:图片的base64值,base64编码后的图片数据,需urlencode,编码后的图片大小不超过2M;**URL**:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)**;FACE_TOKEN**: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个
* face_field:可选 包括age,beauty,expression,faceshape,gender,glasses,landmark,race,quality,facetype,parsing信息,逗号分隔,默认只返回face_token、活体数、人脸框、概率和旋转角度。
* @return JSONObject
*/
public JSONObject faceverify(List<FaceVerifyRequest> input) {
AipRequest request = new AipRequest();

preOperation(request);
JSONArray arr = new JSONArray();
for (FaceVerifyRequest req : input) {
arr.put(req.toJsonObject());
}
request.addBody("body", arr.toString());
request.setBodyFormat(EBodyFormat.RAW_JSON_ARRAY);
request.setUri(FaceConsts.FACEVERIFY);
postOperation(request);
return requestServer(request);
}

}
5 changes: 2 additions & 3 deletions src/main/java/com/baidu/aip/face/FaceConsts.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,6 @@ public class FaceConsts {
static final String PERSON_VERIFY =
"https://aip.baidubce.com/rest/2.0/face/v3/person/verify";

static final String FACEVERIFY =
"https://aip.baidubce.com/rest/2.0/face/v3/faceverify";

static final String VIDEO_SESSIONCODE =
"https://aip.baidubce.com/rest/2.0/face/v1/faceliveness/sessioncode";

Expand All @@ -68,4 +65,6 @@ public class FaceConsts {

static final String MATCH = "https://aip.baidubce.com/rest/2.0/face/v3/match";

static final String FACEVERIFY =
"https://aip.baidubce.com/rest/2.0/face/v3/faceverify";
}
Loading

0 comments on commit 07ab0f5

Please sign in to comment.