deason 2 years ago
parent
commit
f833ab879f

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

@@ -6,6 +6,16 @@ import java.io.File;
 
 public interface FaceVerifyService {
 
+    /**
+     * 百度 人脸活体检测
+     */
+    FaceResult faceVerifyByBaidu(String imageUrl);
+
+    /**
+     * 百度 人脸活体检测
+     */
+    FaceResult faceVerifyByBaidu(File imageFile);
+
     /**
      * 百度 人脸检测
      */

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

@@ -48,6 +48,33 @@ public class BaiduApiHelper {
         }
     }
 
+    public static FaceResult faceVerify(FaceVerifyProperties properties, String jsonParams) {
+        if (StringUtils.isBlank(jsonParams)) {
+            throw new IllegalArgumentException("Baidu api params must be not empty.");
+        }
+
+        BaiduSession session = BaiduApiHelper.getAccessToken(properties.getBaiduKey(), properties.getBaiduSecret());
+        String accessToken = session.getAccess_token();
+
+        String requestUrl = String.format("%s?access_token=%s", Constants.BAIDU_FACE_VERIFY_URL, accessToken);
+        RequestBody formBody = FormBody.create(MediaType.parse(Constants.JSON_CONTENT_TYPE), jsonParams);
+
+        BaiduResponse response = callApi(requestUrl, formBody);
+        return parseFaceDetectResult(response);
+    }
+
+    public static FaceResult faceVerifyUseLocalApi(FaceVerifyProperties properties, String jsonParams) {
+        if (StringUtils.isBlank(jsonParams)) {
+            throw new IllegalArgumentException("Baidu api params must be not empty.");
+        }
+
+        String requestUrl = String.format("%s?appid=%s", properties.getBaiduLocalUrlPrefix() + Constants.BAIDU_FACE_VERIFY_LOCAL_URL, properties.getBaiduLocalAppId());
+        RequestBody formBody = FormBody.create(MediaType.parse(Constants.JSON_CONTENT_TYPE), jsonParams);
+
+        BaiduResponse response = callApi(requestUrl, formBody);
+        return parseFaceDetectResult(response);
+    }
+
     public static FaceResult faceDetect(FaceVerifyProperties properties, String jsonParams) {
         if (StringUtils.isBlank(jsonParams)) {
             throw new IllegalArgumentException("Baidu api params must be not empty.");

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

@@ -22,6 +22,35 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
 
     private FaceVerifyProperties properties;
 
+    @Override
+    public FaceResult faceVerifyByBaidu(String imageUrl) {
+        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);
+
+        String params = new JsonHelper().toJson(images);
+        if (properties.getBaiduLocalEnabled()) {
+            return BaiduApiHelper.faceVerifyUseLocalApi(properties, params);
+        }
+        return BaiduApiHelper.faceVerify(properties, params);
+    }
+
     @Override
     public FaceResult faceDetectByBaidu(String imageUrl) {
         // image_type: URL、BASE64、FACE_TOKEN,其中“本地化部署”不支持 URL 方式

+ 12 - 10
examcloud-starters/examcloud-face-verify-starter/src/test/java/cn/com/qmth/examcloud/starters/face/verify/test/FaceVerifyTest.java

@@ -13,10 +13,10 @@ public class FaceVerifyTest {
     @Test
     public void demo() {
         FaceVerifyProperties properties = new FaceVerifyProperties();
-        properties.setFacePlusKey("VOlRKNlCSAYIOcSLDKOaZukkqpmi-Pwo");
-        properties.setFacePlusSecret("bzMjy-JfwtVUxVDMzagFh7ggbQBC71f1");
-        properties.setBaiduKey("WkMttisvQVrqDSSSDhU2Un9X");
-        properties.setBaiduSecret("Zb83wGDg75yrU4oOkbkeQGW3KlOSHsMm");
+        properties.setFacePlusKey("xxx");
+        properties.setFacePlusSecret("xxx");
+        properties.setBaiduKey("xxx");
+        properties.setBaiduSecret("xxx");
         properties.setBaiduLocalEnabled(true);
         properties.setBaiduLocalAppId("test");
         properties.setBaiduLocalUrlPrefix("http://192.168.10.102:8301");
@@ -26,15 +26,17 @@ public class FaceVerifyTest {
 
         // 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 = "http://5b0988e595225.cdn.sohucs.com/images/20171017/cbdb993563a94a45ab5f99202b0c9c52.jpeg";
-        String imageUrl2 = "https://pix2.tvzhe.com/thumb/star/32/524/260x346.jpg";
+        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";
 
-        File imageFile1 = new File("D:\\home\\test\\fds.jpg");
-        File imageFile2 = new File("D:\\home\\test\\app100001.jpg");
+        File imageFile1 = new File("D:\\home\\test\\101.jpg");
+        File imageFile2 = new File("D:\\home\\test\\102.jpg");
 
-        FaceResult result = faceVerifyService.faceDetectByBaidu(imageUrl);
+        // 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(imageUrl, imageUrl2);
         // FaceResult result = faceVerifyService.faceCompareByBaidu(imageFile1, imageFile2);
         // FaceResult result = faceVerifyService.faceDetectByFacePlus(imageUrl);
         // FaceResult result = faceVerifyService.faceDetectByFacePlus(imageFile1);