Explorar el Código

update face api

deason hace 2 años
padre
commit
e8ea5ab3c3

+ 2 - 2
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/CommonUtils.java

@@ -20,13 +20,13 @@ public class CommonUtils {
 
     public static String toBase64(File imageFile) {
         if (imageFile == null || !imageFile.exists()) {
-            throw new IllegalArgumentException("文件不存在!");
+            throw new IllegalArgumentException("图片文件不存在!");
         }
 
         String regex = "\\.(?:jpg|jpeg|png)$";
         Matcher matcher = Pattern.compile(regex).matcher(imageFile.getName().toLowerCase());
         if (!matcher.find()) {
-            throw new IllegalArgumentException("文件格式不正确,仅支持(jpg、png)!");
+            throw new IllegalArgumentException("图片文件格式不正确,仅支持(jpg、png)!");
         }
 
         try (InputStream is = Files.newInputStream(imageFile.toPath());) {

+ 1 - 1
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/FaceResult.java

@@ -20,7 +20,7 @@ public class FaceResult implements Serializable {
     private boolean apiLimit;
 
     /**
-     * 接口错误信息
+     * 错误信息
      */
     private String error;
 

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

@@ -133,6 +133,8 @@ public class BaiduApiHelper {
         FaceResult result = new FaceResult();
         result.setPass(false);
         result.setApiLimit(false);
+        result.setScore(0d);
+        result.setFaceNum(0);
 
         if (response.getError_code() != 0) {
             result.setError(response.getError_code() + " - " + response.getError_msg());
@@ -146,15 +148,27 @@ public class BaiduApiHelper {
 
         BaiduResult data = response.getResult();
         if (data != null) {
-            double faceLiveness = data.getFace_liveness() != null ? data.getFace_liveness() : 0d;
+            if (data.getThresholds() != null) {
+                result.setThresholds(new JsonHelper().toJson(data.getThresholds()));
+            }
 
+            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.setThresholds(new JsonHelper().toJson(data.getThresholds()));
 
             if (data.getFace_num() != null) {
                 result.setFaceNum(data.getFace_num());
             } else {
-                List<BaiduFace> faces = data.getFace_list();
                 result.setFaceNum(faces != null ? faces.size() : 0);
             }
 
@@ -171,6 +185,7 @@ public class BaiduApiHelper {
         FaceResult result = new FaceResult();
         result.setPass(false);
         result.setApiLimit(false);
+        result.setScore(0d);
 
         if (response.getError_code() != 0) {
             result.setError(response.getError_code() + " - " + response.getError_msg());
@@ -184,7 +199,7 @@ public class BaiduApiHelper {
 
         BaiduResult data = response.getResult();
         if (data != null) {
-            result.setScore(data.getScore());
+            result.setScore(data.getScore() != null ? data.getScore() : 0d);
 
             // 人脸相似度得分,官方推荐阈值80分,建议调整为75分
             if (data.getScore() != null && data.getScore() >= 75d) {

+ 10 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/service/baidu/BaiduFace.java

@@ -12,6 +12,8 @@ public class BaiduFace implements Serializable {
 
     private Double spoofing;//是否为合成图
 
+    private BaiduLiveness liveness;//活体分数值
+
     public String getFace_token() {
         return face_token;
     }
@@ -36,4 +38,12 @@ public class BaiduFace implements Serializable {
         this.spoofing = spoofing;
     }
 
+    public BaiduLiveness getLiveness() {
+        return liveness;
+    }
+
+    public void setLiveness(BaiduLiveness liveness) {
+        this.liveness = liveness;
+    }
+
 }

+ 19 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/service/baidu/BaiduLiveness.java

@@ -0,0 +1,19 @@
+package cn.com.qmth.examcloud.starters.face.verify.service.baidu;
+
+import java.io.Serializable;
+
+public class BaiduLiveness implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Double livemapscore;//活体分数值
+
+    public Double getLivemapscore() {
+        return livemapscore;
+    }
+
+    public void setLivemapscore(Double livemapscore) {
+        this.livemapscore = livemapscore;
+    }
+
+}

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

@@ -35,6 +35,8 @@ public class FacePlusApiHelper {
         FaceResult result = new FaceResult();
         result.setPass(false);
         result.setApiLimit(false);
+        result.setScore(0d);
+        result.setFaceNum(0);
 
         if (StringUtils.isNotEmpty(response.getError_message())) {
             result.setError(response.getError_message());
@@ -72,6 +74,7 @@ public class FacePlusApiHelper {
         FaceResult result = new FaceResult();
         result.setPass(false);
         result.setApiLimit(false);
+        result.setScore(0d);
 
         if (StringUtils.isNotEmpty(response.getError_message())) {
             result.setError(response.getError_message());

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

@@ -40,6 +40,7 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
     @Override
     public FaceResult faceDetectByBaidu(ImageParm image) {
         Map<String, String> imageData = this.buildImageParmForBaidu(image);
+        imageData.put("liveness_control", "NORMAL");
 
         String params = new JsonHelper().toJson(imageData);
         if (properties.getBaiduLocalEnabled()) {

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

@@ -3,6 +3,7 @@ package cn.com.qmth.examcloud.starters.face.verify.test;
 import cn.com.qmth.examcloud.starters.face.verify.FaceVerifyProperties;
 import cn.com.qmth.examcloud.starters.face.verify.common.FaceResult;
 import cn.com.qmth.examcloud.starters.face.verify.common.JsonHelper;
+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;
@@ -35,8 +36,10 @@ public class FaceApiTest {
         String image5 = "D:\\home\\test\\101.jpg";
         String image6 = "D:\\home\\test\\102.jpg";
 
-        ImageParm imageParm = new ImageUrlParm(image1);
-        ImageParm imageParm2 = new ImageUrlParm(image2);
+        ImageParm imageParm = new ImageUrlParm(image3);
+        ImageParm imageParm2 = new ImageUrlParm(image4);
+        ImageParm imageParm3 = new ImageFileParm(image5);
+        ImageParm imageParm4 = new ImageFileParm(image6);
         FaceResult result = faceVerifyService.faceVerifyByBaidu(imageParm);
         // FaceResult result = faceVerifyService.faceDetectByBaidu(imageParm);
         // FaceResult result = faceVerifyService.faceCompareByBaidu(imageParm, imageParm2);