deason 2 năm trước cách đây
mục cha
commit
4d2690dd1c

+ 32 - 25
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/model/FaceResult.java

@@ -3,7 +3,7 @@ package cn.com.qmth.examcloud.starters.face.verify.model;
 import java.io.Serializable;
 
 /**
- * 人脸接口结果
+ * 人脸相关接口(通用)响应结果
  */
 public class FaceResult implements Serializable {
 
@@ -20,24 +20,31 @@ public class FaceResult implements Serializable {
     private boolean apiLimit;
 
     /**
-     * 错误信息
+     * 分值
      */
-    private String error;
+    private double score;
 
     /**
-     * 分值
+     * 人脸数
      */
-    private Double score;
+    private int faceNum;
 
     /**
-     * 阈值(JSON)
+     * 人脸接口响应信息
      */
-    private String thresholds;
+    private String jsonResult;
 
     /**
-     * 人脸数
+     * 错误信息
      */
-    private Integer faceNum;
+    private String error;
+
+    /**
+     * 是否存在陌生人
+     */
+    public boolean hasStranger() {
+        return faceNum > 1;
+    }
 
     public boolean isPass() {
         return pass;
@@ -55,36 +62,36 @@ public class FaceResult implements Serializable {
         this.apiLimit = apiLimit;
     }
 
-    public String getError() {
-        return error;
+    public double getScore() {
+        return score;
     }
 
-    public void setError(String error) {
-        this.error = error;
+    public void setScore(double score) {
+        this.score = score;
     }
 
-    public Double getScore() {
-        return score;
+    public int getFaceNum() {
+        return faceNum;
     }
 
-    public void setScore(Double score) {
-        this.score = score;
+    public void setFaceNum(int faceNum) {
+        this.faceNum = faceNum;
     }
 
-    public String getThresholds() {
-        return thresholds;
+    public String getJsonResult() {
+        return jsonResult;
     }
 
-    public void setThresholds(String thresholds) {
-        this.thresholds = thresholds;
+    public void setJsonResult(String jsonResult) {
+        this.jsonResult = jsonResult;
     }
 
-    public Integer getFaceNum() {
-        return faceNum;
+    public String getError() {
+        return error;
     }
 
-    public void setFaceNum(Integer faceNum) {
-        this.faceNum = faceNum;
+    public void setError(String error) {
+        this.error = error;
     }
 
 }

+ 38 - 29
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/model/baidu/BaiduApiHelper.java

@@ -136,6 +136,7 @@ public class BaiduApiHelper {
         result.setApiLimit(false);
         result.setScore(0d);
         result.setFaceNum(0);
+        result.setJsonResult(new JsonHelper().toJson(response));
 
         if (response.getError_code() != 0) {
             result.setError(response.getError_code() + " - " + response.getError_msg());
@@ -148,35 +149,36 @@ public class BaiduApiHelper {
         }
 
         BaiduResult data = response.getResult();
-        if (data != null) {
-            if (data.getThresholds() != null) {
-                result.setThresholds(new JsonHelper().toJson(data.getThresholds()));
-            }
+        if (data == null) {
+            result.setError(result.getJsonResult());
+            return result;
+        }
 
-            double faceLiveness = 0d;
-            List<BaiduFace> faces = data.getFace_list();
-            if (data.getFace_liveness() != null) {
-                faceLiveness = data.getFace_liveness();
-            } else {
-                if (faces != null && !faces.isEmpty()) {
-                    BaiduFace face = faces.get(0);
-                    if (face.getLiveness() != null && face.getLiveness().getLivemapscore() != null) {
-                        faceLiveness = face.getLiveness().getLivemapscore();
-                    }
+        double faceLiveness = 0d;
+        List<BaiduFace> faces = data.getFace_list();
+        if (data.getFace_liveness() != null) {
+            faceLiveness = data.getFace_liveness();
+        } else {
+            if (faces != null && !faces.isEmpty()) {
+                BaiduFace face = faces.get(0);
+                if (face.getLiveness() != null && face.getLiveness().getLivemapscore() != null) {
+                    faceLiveness = face.getLiveness().getLivemapscore();
                 }
             }
-            result.setScore(faceLiveness);
+        }
+        result.setScore(faceLiveness);
 
-            if (data.getFace_num() != null) {
-                result.setFaceNum(data.getFace_num());
-            } else {
-                result.setFaceNum(faces != null ? faces.size() : 0);
-            }
+        if (data.getFace_num() != null) {
+            result.setFaceNum(data.getFace_num());
+        } else {
+            result.setFaceNum(faces != null ? faces.size() : 0);
+        }
 
-            // 活体分数值,推荐阈值0.393241
-            if (faceLiveness >= 0.39d) {
-                result.setPass(true);
-            }
+        // 活体分数值,推荐阈值0.393241
+        if (faceLiveness >= 0.39d) {
+            result.setPass(true);
+        } else {
+            result.setError("faceLiveness: " + faceLiveness + " < 0.39");
         }
 
         return result;
@@ -188,6 +190,7 @@ public class BaiduApiHelper {
         result.setApiLimit(false);
         result.setScore(0d);
         result.setFaceNum(0);
+        result.setJsonResult(new JsonHelper().toJson(response));
 
         if (response.getError_code() != 0) {
             result.setError(response.getError_code() + " - " + response.getError_msg());
@@ -200,12 +203,18 @@ public class BaiduApiHelper {
         }
 
         BaiduResult data = response.getResult();
-        if (data != null) {
-            result.setScore(data.getScore() != null ? data.getScore() : 0d);
+        if (data == null) {
+            result.setError(result.getJsonResult());
+            return result;
+        }
 
-            if (data.getScore() != null && data.getScore() >= expectFaceCompareScore) {
-                result.setPass(true);
-            }
+        double score = data.getScore() != null ? data.getScore() : 0d;
+        result.setScore(score);
+
+        if (score >= expectFaceCompareScore) {
+            result.setPass(true);
+        } else {
+            result.setError("faceScore: " + score + " < " + expectFaceCompareScore);
         }
 
         return result;

+ 7 - 3
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/model/faceplus/FacePlusApiHelper.java

@@ -38,6 +38,7 @@ public class FacePlusApiHelper {
         result.setApiLimit(false);
         result.setScore(0d);
         result.setFaceNum(0);
+        result.setJsonResult(new JsonHelper().toJson(response));
 
         if (StringUtils.isNotEmpty(response.getError_message())) {
             result.setError(response.getError_message());
@@ -55,6 +56,8 @@ public class FacePlusApiHelper {
         if (faceNum == 1) {
             // 是否人脸检测通过 (只有一张人脸算成功,否则算失败)
             result.setPass(true);
+        } else {
+            result.setError("faceNum: " + faceNum + " notEq 1");
         }
 
         return result;
@@ -77,6 +80,7 @@ public class FacePlusApiHelper {
         result.setApiLimit(false);
         result.setScore(0d);
         result.setFaceNum(0);
+        result.setJsonResult(new JsonHelper().toJson(response));
 
         if (StringUtils.isNotEmpty(response.getError_message())) {
             result.setError(response.getError_message());
@@ -91,13 +95,13 @@ public class FacePlusApiHelper {
         FacePlusThresholds thresholds = response.getThresholds();
         if (thresholds != null) {
             float confidence = response.getConfidence() != null ? response.getConfidence() : 0f;
-
-            result.setScore((double) confidence);
-            result.setThresholds(new JsonHelper().toJson(thresholds));
+            result.setScore(confidence);
 
             // 是否人脸对比通过
             if (confidence >= thresholds.getLe_4()) {
                 result.setPass(true);
+            } else {
+                result.setError("faceConfidence: " + confidence + " < " + thresholds.getLe_4());
             }
 
             if (response.getFaces2() != null) {