|
@@ -35,20 +35,31 @@ public class FacePlusApiHelper {
|
|
|
FacePlusResponse response = callApi(Constants.FACEPP_FACE_DETECT_URL, request);
|
|
|
|
|
|
FaceResult result = new FaceResult();
|
|
|
- result.setApiSuccess(true);
|
|
|
- result.setPass(false);
|
|
|
- result.setScore(0d);
|
|
|
+ result.setFacePass(false);
|
|
|
+ result.setFaceScore(0d);
|
|
|
result.setFaceNum(0);
|
|
|
result.setJsonResult(new JsonHelper().style(Include.NON_NULL).toJson(response));
|
|
|
|
|
|
- if (StringUtils.isNotEmpty(response.getError_message())) {
|
|
|
- result.setApiSuccess(false);
|
|
|
- result.setError(response.getError_message());
|
|
|
+ String errorMessage = response.getError_message();
|
|
|
+ if (StringUtils.isNotEmpty(errorMessage)) {
|
|
|
+ result.setApiRetry(true);// 默认值
|
|
|
+ result.setError(errorMessage);
|
|
|
|
|
|
- // 请求并发超限(约20个/秒,可按需调整)
|
|
|
- if ("CONCURRENCY_LIMIT_EXCEEDED".equals(response.getError_message())) {
|
|
|
- // log.warn("facepp_api_limit...");
|
|
|
+ if (errorMessage.startsWith("INVALID_IMAGE_SIZE")
|
|
|
+ || errorMessage.startsWith("INVALID_IMAGE_URL")
|
|
|
+ || errorMessage.startsWith("IMAGE_FILE_TOO_LARGE")) {
|
|
|
+ // INVALID_IMAGE_SIZE 上传的图像像素尺寸太大或太小
|
|
|
+ // INVALID_IMAGE_URL 图片URL错误或者无效
|
|
|
+ // IMAGE_FILE_TOO_LARGE 图像文件太大,图片文件大小不超过2MB
|
|
|
+
|
|
|
+ result.setApiRetry(false);
|
|
|
}
|
|
|
+
|
|
|
+ // 请求并发超限(约20个/秒,可按需调整)
|
|
|
+ /*if (errorMessage.startsWith("CONCURRENCY_LIMIT_EXCEEDED")) {
|
|
|
+ log.warn("facepp_api_limit...");
|
|
|
+ }*/
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -57,7 +68,7 @@ public class FacePlusApiHelper {
|
|
|
|
|
|
if (faceNum == 1) {
|
|
|
// 是否人脸检测通过 (只有一张人脸算成功,否则算失败)
|
|
|
- result.setPass(true);
|
|
|
+ result.setFacePass(true);
|
|
|
} else {
|
|
|
result.setError("faceNum=" + faceNum + " but notEq 1");
|
|
|
}
|
|
@@ -78,31 +89,42 @@ public class FacePlusApiHelper {
|
|
|
FacePlusResponse response = callApi(Constants.FACEPP_FACE_COMPARE_URL, request);
|
|
|
|
|
|
FaceResult result = new FaceResult();
|
|
|
- result.setApiSuccess(true);
|
|
|
- result.setPass(false);
|
|
|
- result.setScore(0d);
|
|
|
+ result.setFacePass(false);
|
|
|
+ result.setFaceScore(0d);
|
|
|
result.setFaceNum(0);
|
|
|
result.setJsonResult(new JsonHelper().style(Include.NON_NULL).toJson(response));
|
|
|
|
|
|
- if (StringUtils.isNotEmpty(response.getError_message())) {
|
|
|
- result.setApiSuccess(false);
|
|
|
- result.setError(response.getError_message());
|
|
|
+ String errorMessage = response.getError_message();
|
|
|
+ if (StringUtils.isNotEmpty(errorMessage)) {
|
|
|
+ result.setApiRetry(true);// 默认值
|
|
|
+ result.setError(errorMessage);
|
|
|
|
|
|
- // 请求并发超限(约20个/秒,可按需调整)
|
|
|
- if ("CONCURRENCY_LIMIT_EXCEEDED".equals(response.getError_message())) {
|
|
|
- // log.warn("facepp_api_limit...");
|
|
|
+ if (errorMessage.startsWith("INVALID_IMAGE_SIZE")
|
|
|
+ || errorMessage.startsWith("INVALID_IMAGE_URL")
|
|
|
+ || errorMessage.startsWith("IMAGE_FILE_TOO_LARGE")) {
|
|
|
+ // INVALID_IMAGE_SIZE 上传的图像像素尺寸太大或太小
|
|
|
+ // INVALID_IMAGE_URL 图片URL错误或者无效
|
|
|
+ // IMAGE_FILE_TOO_LARGE 图像文件太大,图片文件大小不超过2MB
|
|
|
+
|
|
|
+ result.setApiRetry(false);
|
|
|
}
|
|
|
+
|
|
|
+ // 请求并发超限(约20个/秒,可按需调整)
|
|
|
+ /*if (errorMessage.startsWith("CONCURRENCY_LIMIT_EXCEEDED")) {
|
|
|
+ log.warn("facepp_api_limit...");
|
|
|
+ }*/
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
FacePlusThresholds thresholds = response.getThresholds();
|
|
|
if (thresholds != null) {
|
|
|
float confidence = response.getConfidence() != null ? response.getConfidence() : 0f;
|
|
|
- result.setScore(confidence);
|
|
|
+ result.setFaceScore(confidence);
|
|
|
|
|
|
// 是否人脸对比通过
|
|
|
if (confidence >= thresholds.getLe_4()) {
|
|
|
- result.setPass(true);
|
|
|
+ result.setFacePass(true);
|
|
|
} else {
|
|
|
result.setError("faceConfidence=" + confidence + " but less than " + thresholds.getLe_4());
|
|
|
}
|
|
@@ -126,13 +148,20 @@ public class FacePlusApiHelper {
|
|
|
long cost = System.currentTimeMillis() - start;
|
|
|
// System.out.println("response:" + code + " cost:" + cost + "ms body:" + bodyStr);
|
|
|
|
|
|
- if (response.isSuccessful() || code == 400 || code == 401 || code == 403) {
|
|
|
+ if (response.isSuccessful() || code == 400 || code == 401 || code == 403 || code == 412) {
|
|
|
FacePlusResponse result = new JsonHelper().parseJson(bodyStr, FacePlusResponse.class);
|
|
|
if (result != null) {
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (code == 413) {
|
|
|
+ // 客户发送的请求大小超过了2MB限制。该错误的返回格式为纯文本,不是json格式。
|
|
|
+ FacePlusResponse result = new FacePlusResponse();
|
|
|
+ result.setError_message("IMAGE_FILE_TOO_LARGE");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
log.warn("[FACE++] url:{} response:{} cost:{}ms body:{}", requestUrl, code, cost, bodyStr);
|
|
|
} catch (IOException e) {
|
|
|
log.error(e.getMessage(), e);
|