TRX vor 1 Jahr
Ursprung
Commit
3e289c32e3

+ 15 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/UrlParam.java

@@ -0,0 +1,15 @@
+package com.zhongshu.card.client.model.base;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2025/2/18
+ */
+@Data
+public class UrlParam extends ProjectOidParam {
+
+    @Schema(description = "文件地址")
+    private String url;
+}

+ 6 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/OrgUserFaceController.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.controller.projectAbout;
 import com.github.microservice.auth.security.annotations.ResourceAuth;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.UrlParam;
 import com.zhongshu.card.client.model.base.UserIdAndOidModel;
 import com.zhongshu.card.client.model.projectAbout.OrgUserFaceModel;
 import com.zhongshu.card.client.model.projectAbout.OrgUserFaceParam;
@@ -45,4 +46,9 @@ public class OrgUserFaceController {
         return orgUserFaceService.getUserFaceModel(param.getUserId(), param.getProjectOid());
     }
 
+    @Operation(summary = "判断检查人脸可信度", description = "判断检查人脸可信度")
+    @RequestMapping(value = "conformFace", method = {RequestMethod.POST})
+    public ResultContent conformFace(@RequestBody @Valid UrlParam param) {
+        return orgUserFaceService.conformFace(param.getUrl(), param.getProjectOid());
+    }
 }

+ 57 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/OrgUserFaceService.java

@@ -1,11 +1,13 @@
 package com.zhongshu.card.server.core.service.projectAbout;
 
+import com.github.microservice.auth.client.model.UserFaceConfidenceModel;
 import com.github.microservice.auth.client.model.UserFaceUploadModel;
 import com.github.microservice.auth.client.service.UserFaceService;
 import com.github.microservice.net.ResultContent;
 import com.google.common.collect.Lists;
 import com.zhongshu.card.client.model.projectAbout.OrgUserFaceModel;
 import com.zhongshu.card.client.model.projectAbout.OrgUserFaceParam;
+import com.zhongshu.card.client.model.projectAbout.projectCommon.ProjectCommonConfigModel;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.projectAbout.OrgUserFaceDao;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
@@ -22,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -58,6 +61,9 @@ public class OrgUserFaceService extends SuperService {
     @Autowired
     private CommonService commonService;
 
+    @Autowired
+    private ProjectCommonConfigService projectCommonConfigService;
+
     /**
      * 保存用户人脸信息
      *
@@ -113,8 +119,7 @@ public class OrgUserFaceService extends SuperService {
         Map<String, Object> map = new HashMap<>();
         map.put("groupId", groupId);
         // 通知人脸信息发送变化
-        devicePermissEventService.sendUserInfoChangeEvent(
-                orgUserFace.getUserId(), orgUserFace.getProjectOid(), map);
+        devicePermissEventService.sendUserInfoChangeEvent(orgUserFace.getUserId(), orgUserFace.getProjectOid(), map);
         return ResultContent.buildSuccess();
     }
 
@@ -164,6 +169,56 @@ public class OrgUserFaceService extends SuperService {
         return Lists.newArrayList();
     }
 
+    /**
+     * 判断人脸可信度
+     *
+     * @param url
+     * @param projectOid
+     * @return
+     */
+    public ResultContent conformFace(String url, String projectOid) {
+        if (StringUtils.isEmpty(projectOid)) {
+            projectOid = getCurrentProjectOid();
+        }
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("项目oid信息为空");
+        }
+        ProjectCommonConfigModel projectCommonConfig = projectCommonConfigService.getInfoByOid(projectOid);
+        if (ObjectUtils.isEmpty(projectCommonConfig)) {
+            return ResultContent.buildFail("项目为配置人脸可信度");
+        }
+        return conformFace(url, projectCommonConfig);
+    }
+
+    /**
+     * 判断人脸识别度是否符合要求
+     *
+     * @param url
+     * @param configModel
+     * @return
+     */
+    public ResultContent conformFace(String url, ProjectCommonConfigModel configModel) {
+        if (StringUtils.isEmpty(url)) {
+            return ResultContent.buildFail("图片为空");
+        }
+        if (ObjectUtils.isEmpty(configModel) || configModel.getSimilarity() == null) {
+            return ResultContent.buildSuccess();
+        }
+        String imageBase64 = commonService.getUrlFileBase64(url);
+        UserFaceConfidenceModel faceConfidenceModel = new UserFaceConfidenceModel();
+        faceConfidenceModel.setFile(imageBase64);
+        com.github.microservice.auth.client.content.ResultContent<Double> content = userFaceService.confidence(faceConfidenceModel);
+        if (content.isFailed()) {
+            return ResultContent.buildFail(content.getMsg());
+        }
+        Double confidence = content.getContent() * 100;
+        if (BigDecimal.valueOf(confidence).compareTo(BigDecimal.valueOf(configModel.getSimilarity())) >= 0) {
+            return ResultContent.buildSuccess();
+        } else {
+            return ResultContent.buildFail(String.format("未检测到人脸: %d", confidence.intValue()));
+        }
+    }
+
     public OrgUserFaceModel toModel(OrgUserFace entity) {
         OrgUserFaceModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {