Selaa lähdekoodia

face api upgrade..

deason 2 vuotta sitten
vanhempi
commit
6811e13c25

+ 21 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/param/ImageBase64Parm.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.starters.face.verify.common.param;
+
+public class ImageBase64Parm implements ImageParm {
+
+    private String imgBase64;
+
+    public ImageBase64Parm(String imgBase64) {
+        this.imgBase64 = imgBase64;
+    }
+
+    @Override
+    public String value() {
+        return imgBase64;
+    }
+
+    @Override
+    public ImageParmType type() {
+        return ImageParmType.BASE64;
+    }
+
+}

+ 21 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/param/ImageFileParm.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.starters.face.verify.common.param;
+
+public class ImageFileParm implements ImageParm {
+
+    private String imgPath;
+
+    public ImageFileParm(String imgPath) {
+        this.imgPath = imgPath;
+    }
+
+    @Override
+    public String value() {
+        return imgPath;
+    }
+
+    @Override
+    public ImageParmType type() {
+        return ImageParmType.FILE_PATH;
+    }
+
+}

+ 9 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/param/ImageParm.java

@@ -0,0 +1,9 @@
+package cn.com.qmth.examcloud.starters.face.verify.common.param;
+
+public interface ImageParm {
+
+    String value();
+
+    ImageParmType type();
+
+}

+ 9 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/param/ImageParmType.java

@@ -0,0 +1,9 @@
+package cn.com.qmth.examcloud.starters.face.verify.common.param;
+
+public enum ImageParmType {
+    FILE_URL,
+    FILE_PATH,
+    BASE64,
+    FACE_TOKEN;
+
+}

+ 21 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/param/ImageTokenParm.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.starters.face.verify.common.param;
+
+public class ImageTokenParm implements ImageParm {
+
+    private String imgToken;
+
+    public ImageTokenParm(String imgToken) {
+        this.imgToken = imgToken;
+    }
+
+    @Override
+    public String value() {
+        return imgToken;
+    }
+
+    @Override
+    public ImageParmType type() {
+        return ImageParmType.FACE_TOKEN;
+    }
+
+}

+ 21 - 0
examcloud-starters/examcloud-face-verify-starter/src/main/java/cn/com/qmth/examcloud/starters/face/verify/common/param/ImageUrlParm.java

@@ -0,0 +1,21 @@
+package cn.com.qmth.examcloud.starters.face.verify.common.param;
+
+public class ImageUrlParm implements ImageParm {
+
+    private String imgUrl;
+
+    public ImageUrlParm(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
+    @Override
+    public String value() {
+        return imgUrl;
+    }
+
+    @Override
+    public ImageParmType type() {
+        return ImageParmType.FILE_URL;
+    }
+
+}

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

@@ -1,59 +1,33 @@
 package cn.com.qmth.examcloud.starters.face.verify.service;
 
 import cn.com.qmth.examcloud.starters.face.verify.common.FaceResult;
-
-import java.io.File;
+import cn.com.qmth.examcloud.starters.face.verify.common.param.ImageParm;
 
 public interface FaceVerifyService {
 
     /**
      * 百度 人脸活体检测
      */
-    FaceResult faceVerifyByBaidu(String imageUrl);
-
-    /**
-     * 百度 人脸活体检测
-     */
-    FaceResult faceVerifyByBaidu(File imageFile);
+    FaceResult faceVerifyByBaidu(ImageParm image);
 
     /**
      * 百度 人脸检测
      */
-    FaceResult faceDetectByBaidu(String imageUrl);
-
-    /**
-     * 百度 人脸检测
-     */
-    FaceResult faceDetectByBaidu(File imageFile);
+    FaceResult faceDetectByBaidu(ImageParm image);
 
     /**
      * 百度 人脸比对
      */
-    FaceResult faceCompareByBaidu(String imageUrl, String imageUrl2);
-
-    /**
-     * 百度 人脸比对
-     */
-    FaceResult faceCompareByBaidu(File imageFile, File imageFile2);
-
-    /**
-     * Face++ 人脸检测
-     */
-    FaceResult faceDetectByFacePlus(String imageUrl);
+    FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2);
 
     /**
      * Face++ 人脸检测
      */
-    FaceResult faceDetectByFacePlus(File imageFile);
-
-    /**
-     * Face++ 人脸比对
-     */
-    FaceResult faceCompareByFacePlus(String imageUrl, String imageUrl2);
+    FaceResult faceDetectByFacePlus(ImageParm image);
 
     /**
      * Face++ 人脸比对
      */
-    FaceResult faceCompareByFacePlus(File imageFile, File imageFile2);
+    FaceResult faceCompareByFacePlus(ImageParm image1, ImageParm image2);
 
-}
+}

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

@@ -4,17 +4,20 @@ import cn.com.qmth.examcloud.starters.face.verify.FaceVerifyProperties;
 import cn.com.qmth.examcloud.starters.face.verify.common.CommonUtils;
 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.ImageParm;
+import cn.com.qmth.examcloud.starters.face.verify.common.param.ImageParmType;
 import cn.com.qmth.examcloud.starters.face.verify.service.FaceVerifyService;
 import cn.com.qmth.examcloud.starters.face.verify.service.baidu.BaiduApiHelper;
 import cn.com.qmth.examcloud.starters.face.verify.service.faceplus.FacePlusApiHelper;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 public class FaceVerifyServiceImpl implements FaceVerifyService {
 
@@ -23,26 +26,9 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
     private FaceVerifyProperties properties;
 
     @Override
-    public FaceResult faceVerifyByBaidu(String imageUrl) {
+    public FaceResult faceVerifyByBaidu(ImageParm image) {
         List<Map<String, String>> images = new ArrayList<>();
-        Map<String, String> imageData = new TreeMap<>();
-        imageData.put("image_type", "URL");
-        imageData.put("image", imageUrl);
-        images.add(imageData);
-
-        String params = new JsonHelper().toJson(images);
-        return BaiduApiHelper.faceVerify(properties, params);
-    }
-
-    @Override
-    public FaceResult faceVerifyByBaidu(File imageFile) {
-        String imageBase64 = CommonUtils.toBase64(imageFile);
-
-        List<Map<String, String>> images = new ArrayList<>();
-        Map<String, String> imageData = new TreeMap<>();
-        imageData.put("image_type", "BASE64");
-        imageData.put("image", imageBase64);
-        images.add(imageData);
+        images.add(this.buildImageParmForBaidu(image));
 
         String params = new JsonHelper().toJson(images);
         if (properties.getBaiduLocalEnabled()) {
@@ -52,23 +38,8 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
     }
 
     @Override
-    public FaceResult faceDetectByBaidu(String imageUrl) {
-        // image_type: URL、BASE64、FACE_TOKEN,其中“本地化部署”不支持 URL 方式
-        Map<String, String> imageData = new TreeMap<>();
-        imageData.put("image_type", "URL");
-        imageData.put("image", imageUrl);
-
-        String params = new JsonHelper().toJson(imageData);
-        return BaiduApiHelper.faceDetect(properties, params);
-    }
-
-    @Override
-    public FaceResult faceDetectByBaidu(File imageFile) {
-        String imageBase64 = CommonUtils.toBase64(imageFile);
-
-        Map<String, String> imageData = new TreeMap<>();
-        imageData.put("image_type", "BASE64");
-        imageData.put("image", imageBase64);
+    public FaceResult faceDetectByBaidu(ImageParm image) {
+        Map<String, String> imageData = this.buildImageParmForBaidu(image);
 
         String params = new JsonHelper().toJson(imageData);
         if (properties.getBaiduLocalEnabled()) {
@@ -78,37 +49,10 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
     }
 
     @Override
-    public FaceResult faceCompareByBaidu(String imageUrl, String imageUrl2) {
+    public FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2) {
         List<Map<String, String>> images = new ArrayList<>();
-        Map<String, String> imageData = new TreeMap<>();
-        imageData.put("image_type", "URL");
-        imageData.put("image", imageUrl);
-        images.add(imageData);
-
-        Map<String, String> imageData2 = new TreeMap<>();
-        imageData2.put("image_type", "URL");
-        imageData2.put("image", imageUrl2);
-        images.add(imageData2);
-
-        String params = new JsonHelper().toJson(images);
-        return BaiduApiHelper.faceCompare(properties, params);
-    }
-
-    @Override
-    public FaceResult faceCompareByBaidu(File imageFile, File imageFile2) {
-        String imageBase64 = CommonUtils.toBase64(imageFile);
-        String imageBase64_2 = CommonUtils.toBase64(imageFile2);
-
-        List<Map<String, String>> images = new ArrayList<>();
-        Map<String, String> imageData = new TreeMap<>();
-        imageData.put("image_type", "BASE64");
-        imageData.put("image", imageBase64);
-        images.add(imageData);
-
-        Map<String, String> imageData2 = new TreeMap<>();
-        imageData2.put("image_type", "BASE64");
-        imageData2.put("image", imageBase64_2);
-        images.add(imageData2);
+        images.add(this.buildImageParmForBaidu(image1));
+        images.add(this.buildImageParmForBaidu(image2));
 
         String params = new JsonHelper().toJson(images);
         if (properties.getBaiduLocalEnabled()) {
@@ -117,43 +61,66 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
         return BaiduApiHelper.faceCompare(properties, params);
     }
 
-    @Override
-    public FaceResult faceDetectByFacePlus(String imageUrl) {
-        // 参数:image_url、image_base64、image_file
-        Map<String, String> params = new TreeMap<>();
-        params.put("image_url", imageUrl);
+    private Map<String, String> buildImageParmForBaidu(ImageParm image) {
+        if (image == null || StringUtils.isBlank(image.value())) {
+            throw new IllegalArgumentException("ImageParm must be not empty.");
+        }
 
-        return FacePlusApiHelper.faceDetect(properties, params);
+        // image_type: URL、BASE64、FACE_TOKEN,其中“本地化部署API”不支持 URL 方式
+        Map<String, String> imageData = new HashMap<>();
+        if (ImageParmType.FILE_URL == image.type()) {
+            imageData.put("image_type", "URL");
+            imageData.put("image", image.value());
+        } else if (ImageParmType.FACE_TOKEN == image.type()) {
+            imageData.put("image_type", "FACE_TOKEN");
+            imageData.put("image", image.value());
+        } else {
+            imageData.put("image_type", "BASE64");
+            if (ImageParmType.FILE_PATH == image.type()) {
+                File imageFile = new File(image.value());
+                String imageBase64 = CommonUtils.toBase64(imageFile);
+                imageData.put("image", imageBase64);
+            } else {
+                imageData.put("image", image.value());
+            }
+        }
+        return imageData;
     }
 
-    @Override
-    public FaceResult faceDetectByFacePlus(File imageFile) {
-        String imageBase64 = CommonUtils.toBase64(imageFile);
-
-        Map<String, String> params = new TreeMap<>();
-        params.put("image_base64", imageBase64);
+    private void buildImageParmForFacePlus(Map<String, String> params, ImageParm image, String index) {
+        if (image == null || StringUtils.isBlank(image.value())) {
+            throw new IllegalArgumentException("ImageParm must be not empty.");
+        }
 
-        return FacePlusApiHelper.faceDetect(properties, params);
+        // 参数:image_url、image_file、image_base64、face_token
+        if (ImageParmType.FILE_URL == image.type()) {
+            params.put("image_url" + (index != null ? index : ""), image.value());
+        } else if (ImageParmType.FACE_TOKEN == image.type()) {
+            params.put("face_token" + (index != null ? index : ""), image.value());
+        } else {
+            if (ImageParmType.FILE_PATH == image.type()) {
+                File imageFile = new File(image.value());
+                String imageBase64 = CommonUtils.toBase64(imageFile);
+                params.put("image_base64" + (index != null ? "_" + index : ""), imageBase64);
+            } else {
+                params.put("image_base64" + (index != null ? "_" + index : ""), image.value());
+            }
+        }
     }
 
     @Override
-    public FaceResult faceCompareByFacePlus(String imageUrl, String imageUrl2) {
-        // 参数:image_url、image_base64、image_file、face_token
-        Map<String, String> params = new TreeMap<>();
-        params.put("image_url1", imageUrl);
-        params.put("image_url2", imageUrl2);
+    public FaceResult faceDetectByFacePlus(ImageParm image) {
+        Map<String, String> params = new HashMap<>();
+        this.buildImageParmForFacePlus(params, image, null);
 
-        return FacePlusApiHelper.faceCompare(properties, params);
+        return FacePlusApiHelper.faceDetect(properties, params);
     }
 
     @Override
-    public FaceResult faceCompareByFacePlus(File imageFile, File imageFile2) {
-        String imageBase64 = CommonUtils.toBase64(imageFile);
-        String imageBase64_2 = CommonUtils.toBase64(imageFile2);
-
-        Map<String, String> params = new TreeMap<>();
-        params.put("image_base64_1", imageBase64);
-        params.put("image_base64_2", imageBase64_2);
+    public FaceResult faceCompareByFacePlus(ImageParm image1, ImageParm image2) {
+        Map<String, String> params = new HashMap<>();
+        this.buildImageParmForFacePlus(params, image1, "1");
+        this.buildImageParmForFacePlus(params, image2, "2");
 
         return FacePlusApiHelper.faceCompare(properties, params);
     }

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

@@ -3,10 +3,10 @@ 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.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.io.File;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -28,31 +28,27 @@ public class FaceApiTest {
         FaceVerifyServiceImpl faceVerifyService = new FaceVerifyServiceImpl();
         faceVerifyService.setProperties(properties);
 
-        // String imageUrl = "https://img0.baidu.com/it/u=2750657437,2761718651&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=749";
-        // String imageUrl = "https://img2.baidu.com/it/u=1657567997,3247312681&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=666";
-        String imageUrl = "https://img0.baidu.com/it/u=3045244088,3053373141&fm=253&fmt=auto&app=138&f=JPEG?w=200&h=200";
-        String imageUrl2 = "https://img2.baidu.com/it/u=529672263,3841026141&fm=253&fmt=auto&app=138&f=JPEG?w=200&h=200";
+        String image1 = "https://img0.baidu.com/it/u=2750657437,2761718651&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=749";
+        String image2 = "https://img2.baidu.com/it/u=1657567997,3247312681&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=666";
+        String image3 = "https://img0.baidu.com/it/u=3045244088,3053373141&fm=253&fmt=auto&app=138&f=JPEG?w=200&h=200";
+        String image4 = "https://img2.baidu.com/it/u=529672263,3841026141&fm=253&fmt=auto&app=138&f=JPEG?w=200&h=200";
+        String image5 = "D:\\home\\test\\101.jpg";
+        String image6 = "D:\\home\\test\\102.jpg";
 
-        File imageFile1 = new File("D:\\home\\test\\101.jpg");
-        File imageFile2 = new File("D:\\home\\test\\102.jpg");
-
-        // FaceResult result = faceVerifyService.faceVerifyByBaidu(imageUrl);
-        FaceResult result = faceVerifyService.faceVerifyByBaidu(imageFile1);
-        // FaceResult result = faceVerifyService.faceDetectByBaidu(imageUrl);
-        // FaceResult result = faceVerifyService.faceDetectByBaidu(imageFile1);
-        // FaceResult result = faceVerifyService.faceCompareByBaidu(imageUrl, imageUrl2);
-        // FaceResult result = faceVerifyService.faceCompareByBaidu(imageFile1, imageFile2);
-        // FaceResult result = faceVerifyService.faceDetectByFacePlus(imageUrl);
-        // FaceResult result = faceVerifyService.faceDetectByFacePlus(imageFile1);
-        // FaceResult result = faceVerifyService.faceCompareByFacePlus(imageUrl, imageUrl2);
-        // FaceResult result = faceVerifyService.faceCompareByFacePlus(imageFile1, imageFile2);
+        ImageParm imageParm = new ImageUrlParm(image1);
+        ImageParm imageParm2 = new ImageUrlParm(image2);
+        FaceResult result = faceVerifyService.faceVerifyByBaidu(imageParm);
+        // FaceResult result = faceVerifyService.faceDetectByBaidu(imageParm);
+        // FaceResult result = faceVerifyService.faceCompareByBaidu(imageParm, imageParm2);
+        // FaceResult result = faceVerifyService.faceDetectByFacePlus(imageParm);
+        // FaceResult result = faceVerifyService.faceCompareByFacePlus(imageParm, imageParm2);
         System.out.println("==================================================");
         System.out.println(new JsonHelper().toJson(result));
 
-        // concurrentTest(faceVerifyService, imageUrl, imageFile1);
+        // concurrentTest(faceVerifyService, imageParm);
     }
 
-    private void concurrentTest(FaceVerifyServiceImpl faceVerifyService, String imageUrl, File imageFile) {
+    private void concurrentTest(FaceVerifyServiceImpl faceVerifyService, ImageParm image) {
         int threadNum = 20;
         ExecutorService service = Executors.newCachedThreadPool();
         final CountDownLatch commander = new CountDownLatch(1);
@@ -61,7 +57,7 @@ public class FaceApiTest {
         for (int n = 0; n < threadNum; n++) {
             Runnable runnable = () -> {
                 try {
-                    FaceResult res = faceVerifyService.faceVerifyByBaidu(imageFile);
+                    FaceResult res = faceVerifyService.faceVerifyByBaidu(image);
                     System.out.println("线程:" + Thread.currentThread().getName() + " 结果:" + new JsonHelper().toJson(res) + "\n");
                 } catch (Exception e) {
                     e.printStackTrace();