|
@@ -6,9 +6,12 @@ import cn.com.qmth.examcloud.starters.face.verify.common.JsonHelper;
|
|
|
import cn.com.qmth.examcloud.starters.face.verify.model.FaceResult;
|
|
|
import cn.com.qmth.examcloud.starters.face.verify.model.baidu.BaiduApiHelper;
|
|
|
import cn.com.qmth.examcloud.starters.face.verify.model.faceplus.FacePlusApiHelper;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.model.param.FaceApiParam;
|
|
|
+import cn.com.qmth.examcloud.starters.face.verify.model.param.FaceApiType;
|
|
|
import cn.com.qmth.examcloud.starters.face.verify.model.param.ImageParm;
|
|
|
import cn.com.qmth.examcloud.starters.face.verify.model.param.ImageParmType;
|
|
|
import cn.com.qmth.examcloud.starters.face.verify.service.FaceVerifyService;
|
|
|
+import org.apache.commons.lang3.ArrayUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -25,6 +28,96 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
|
|
|
|
|
|
private FaceVerifyProperties properties;
|
|
|
|
|
|
+ /**
|
|
|
+ * 人脸真实性检测
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public FaceResult faceVerify(FaceApiParam apiParam) {
|
|
|
+ if (ArrayUtils.getLength(apiParam.getImages()) < 1) {
|
|
|
+ throw new IllegalArgumentException("至少传一个图片参数!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (FaceApiType.FACE_PLUS == apiParam.getApiType()) {
|
|
|
+ throw new IllegalArgumentException("FacePlus暂不支持人脸真实性检测!");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, String> imageData = this.buildImageParmForBaidu(apiParam.getImages()[0]);
|
|
|
+ imageData.put("face_field", "spoofing");
|
|
|
+ List<Map<String, String>> images = new ArrayList<>();
|
|
|
+ images.add(imageData);
|
|
|
+ String params = new JsonHelper().toJson(images);
|
|
|
+
|
|
|
+ if (FaceApiType.BAIDU_API == apiParam.getApiType()) {
|
|
|
+ return BaiduApiHelper.faceVerify(properties, params);
|
|
|
+ }
|
|
|
+ // 默认:百度私有化部署API
|
|
|
+ return BaiduApiHelper.faceVerifyUseLocalApi(properties, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 人脸识别
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public FaceResult faceDetect(FaceApiParam apiParam) {
|
|
|
+ if (ArrayUtils.getLength(apiParam.getImages()) < 1) {
|
|
|
+ throw new IllegalArgumentException("至少传一个图片参数!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (FaceApiType.FACE_PLUS == apiParam.getApiType()) {
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ this.buildImageParmForFacePlus(params, apiParam.getImages()[0], null);
|
|
|
+
|
|
|
+ return FacePlusApiHelper.faceDetect(properties, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, String> imageData = this.buildImageParmForBaidu(apiParam.getImages()[0]);
|
|
|
+ imageData.put("liveness_control", "NORMAL");
|
|
|
+ imageData.put("max_face_num", "2");
|
|
|
+ String params = new JsonHelper().toJson(imageData);
|
|
|
+
|
|
|
+ if (FaceApiType.BAIDU_API == apiParam.getApiType()) {
|
|
|
+ return BaiduApiHelper.faceDetect(properties, params);
|
|
|
+ }
|
|
|
+ // 默认:百度私有化部署API
|
|
|
+ return BaiduApiHelper.faceDetectUseLocalApi(properties, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 人脸比对
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public FaceResult faceCompare(FaceApiParam apiParam) {
|
|
|
+ if (ArrayUtils.getLength(apiParam.getImages()) < 2) {
|
|
|
+ throw new IllegalArgumentException("至少传两个图片参数!");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (FaceApiType.FACE_PLUS == apiParam.getApiType()) {
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ this.buildImageParmForFacePlus(params, apiParam.getImages()[0], "1");
|
|
|
+ this.buildImageParmForFacePlus(params, apiParam.getImages()[1], "2");
|
|
|
+
|
|
|
+ return FacePlusApiHelper.faceCompare(properties, params);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Map<String, String>> images = new ArrayList<>();
|
|
|
+ images.add(this.buildImageParmForBaidu(apiParam.getImages()[0]));
|
|
|
+ images.add(this.buildImageParmForBaidu(apiParam.getImages()[1]));
|
|
|
+ String params = new JsonHelper().toJson(images);
|
|
|
+
|
|
|
+ Double expectFaceCompareScore;
|
|
|
+ if (apiParam.getExpectFaceCompareScore() != null) {
|
|
|
+ expectFaceCompareScore = apiParam.getExpectFaceCompareScore();
|
|
|
+ } else {
|
|
|
+ expectFaceCompareScore = properties.getBaiduExpectFaceCompareScore();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (FaceApiType.BAIDU_API == apiParam.getApiType()) {
|
|
|
+ return BaiduApiHelper.faceCompare(properties, params, expectFaceCompareScore);
|
|
|
+ }
|
|
|
+ // 默认:百度私有化部署API
|
|
|
+ return BaiduApiHelper.faceCompareUseLocalApi(properties, params, expectFaceCompareScore);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public FaceResult faceVerifyByBaidu(ImageParm image) {
|
|
|
Map<String, String> imageData = this.buildImageParmForBaidu(image);
|
|
@@ -110,7 +203,7 @@ public class FaceVerifyServiceImpl implements FaceVerifyService {
|
|
|
|
|
|
@Override
|
|
|
public FaceResult faceCompareByBaidu(ImageParm image1, ImageParm image2, Double expectFaceCompareScore,
|
|
|
- boolean localEnabled) {
|
|
|
+ boolean localEnabled) {
|
|
|
List<Map<String, String>> images = new ArrayList<>();
|
|
|
images.add(this.buildImageParmForBaidu(image1));
|
|
|
images.add(this.buildImageParmForBaidu(image2));
|