Ver código fonte

update face api

deason 2 anos atrás
pai
commit
5d1002b217

+ 13 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/FaceVerifyProperties.java

@@ -47,6 +47,11 @@ public class FaceVerifyProperties implements Serializable {
      */
     private String baiduLocalUrlPrefix;
 
+    /*
+     * 百度 人脸相似度得分(自定义期望通过阈值)
+     */
+    private Double baiduExpectFaceCompareScore = 70d;
+
     public String getFacePlusKey() {
         return facePlusKey;
     }
@@ -103,4 +108,12 @@ public class FaceVerifyProperties implements Serializable {
         this.baiduLocalUrlPrefix = baiduLocalUrlPrefix;
     }
 
+    public Double getBaiduExpectFaceCompareScore() {
+        return baiduExpectFaceCompareScore;
+    }
+
+    public void setBaiduExpectFaceCompareScore(Double baiduExpectFaceCompareScore) {
+        this.baiduExpectFaceCompareScore = baiduExpectFaceCompareScore;
+    }
+
 }

+ 6 - 1
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/service/FaceVerifyService.java

@@ -20,6 +20,11 @@ public interface FaceVerifyService {
      */
     FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2);
 
+    /**
+     * 百度 人脸比对(自定义期望通过阈值)
+     */
+    FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2, Double expectFaceCompareScore);
+
     /**
      * Face++ 人脸检测
      */
@@ -30,4 +35,4 @@ public interface FaceVerifyService {
      */
     FaceResult faceCompareByFacePlus(ImageParm image1, ImageParm image2);
 
-}
+}

+ 6 - 7
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/service/baidu/BaiduApiHelper.java

@@ -102,7 +102,7 @@ public class BaiduApiHelper {
         return parseFaceDetectResult(response);
     }
 
-    public static FaceResult faceCompare(FaceVerifyProperties properties, String jsonParams) {
+    public static FaceResult faceCompare(FaceVerifyProperties properties, String jsonParams, Double expectFaceCompareScore) {
         if (StringUtils.isBlank(jsonParams)) {
             throw new IllegalArgumentException("Baidu api params must be not empty.");
         }
@@ -114,10 +114,10 @@ public class BaiduApiHelper {
         RequestBody formBody = FormBody.create(MediaType.parse(Constants.JSON_CONTENT_TYPE), jsonParams);
 
         BaiduResponse response = callApi(requestUrl, formBody);
-        return parseFaceCompareResult(response);
+        return parseFaceCompareResult(response, expectFaceCompareScore);
     }
 
-    public static FaceResult faceCompareUseLocalApi(FaceVerifyProperties properties, String jsonParams) {
+    public static FaceResult faceCompareUseLocalApi(FaceVerifyProperties properties, String jsonParams, Double expectFaceCompareScore) {
         if (StringUtils.isBlank(jsonParams)) {
             throw new IllegalArgumentException("Baidu api params must be not empty.");
         }
@@ -126,7 +126,7 @@ public class BaiduApiHelper {
         RequestBody formBody = FormBody.create(MediaType.parse(Constants.JSON_CONTENT_TYPE), jsonParams);
 
         BaiduResponse response = callApi(requestUrl, formBody);
-        return parseFaceCompareResult(response);
+        return parseFaceCompareResult(response, expectFaceCompareScore);
     }
 
     private static FaceResult parseFaceDetectResult(BaiduResponse response) {
@@ -181,7 +181,7 @@ public class BaiduApiHelper {
         return result;
     }
 
-    private static FaceResult parseFaceCompareResult(BaiduResponse response) {
+    private static FaceResult parseFaceCompareResult(BaiduResponse response, Double expectFaceCompareScore) {
         FaceResult result = new FaceResult();
         result.setPass(false);
         result.setApiLimit(false);
@@ -201,8 +201,7 @@ public class BaiduApiHelper {
         if (data != null) {
             result.setScore(data.getScore() != null ? data.getScore() : 0d);
 
-            // 人脸相似度得分,官方推荐阈值80分,建议调整为75分
-            if (data.getScore() != null && data.getScore() >= 75d) {
+            if (data.getScore() != null && data.getScore() >= expectFaceCompareScore) {
                 result.setPass(true);
             }
         }

+ 1 - 1
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/service/baidu/BaiduResult.java

@@ -9,7 +9,7 @@ public class BaiduResult implements Serializable {
 
     private Double face_liveness;//活体分数值,推荐阈值0.393241
 
-    private Double score;//人脸相似度得分,官方推荐阈值80分,建议调整为75分
+    private Double score;//人脸相似度得分,官方推荐阈值80分
 
     private Integer face_num;//人脸数
 

+ 7 - 2
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/service/impl/FaceVerifyServiceImpl.java

@@ -51,15 +51,20 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
 
     @Override
     public FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2) {
+        return this.faceCompareByBaidu(image1, image2, properties.getBaiduExpectFaceCompareScore());
+    }
+
+    @Override
+    public FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2, Double expectFaceCompareScore) {
         List<Map<String, String>> images = new ArrayList<>();
         images.add(this.buildImageParmForBaidu(image1));
         images.add(this.buildImageParmForBaidu(image2));
 
         String params = new JsonHelper().toJson(images);
         if (properties.getBaiduLocalEnabled()) {
-            return BaiduApiHelper.faceCompareUseLocalApi(properties, params);
+            return BaiduApiHelper.faceCompareUseLocalApi(properties, params, expectFaceCompareScore);
         }
-        return BaiduApiHelper.faceCompare(properties, params);
+        return BaiduApiHelper.faceCompare(properties, params, expectFaceCompareScore);
     }
 
     private Map<String, String> buildImageParmForBaidu(ImageParm image) {

+ 2 - 0
examcloud-starters/examcloud-face-verify-starter/src/test/java/cn/com/qmth/examcloud/starters/face/verify/test/FaceApiTest.java

@@ -7,6 +7,7 @@ import cn.com.qmth.examcloud.starters.face.verify.common.param.ImageFileParm;
 import cn.com.qmth.examcloud.starters.face.verify.common.param.ImageParm;
 import cn.com.qmth.examcloud.starters.face.verify.common.param.ImageUrlParm;
 import cn.com.qmth.examcloud.starters.face.verify.service.impl.FaceVerifyServiceImpl;
+import org.junit.Test;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
@@ -25,6 +26,7 @@ public class FaceApiTest {
         properties.setBaiduLocalAppId("test");
         properties.setBaiduLocalUrlPrefix("http://192.168.10.102:8301");
         // properties.setBaiduLocalUrlPrefix("http://192.168.0.117:8300");
+        // properties.setBaiduExpectFaceCompareScore(70d);
 
         FaceVerifyServiceImpl faceVerifyService = new FaceVerifyServiceImpl();
         faceVerifyService.setProperties(properties);