Browse Source

新增获取人脸可信度接口

wujiefeng 1 year ago
parent
commit
6080eaf318

+ 31 - 0
centers/AuthCenter/AuthClient/src/main/java/com/github/microservice/auth/client/model/FaceStoreResponseModel.java

@@ -0,0 +1,31 @@
+package com.github.microservice.auth.client.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FaceStoreResponseModel {
+
+    private String detector_backend;
+
+    private String model_name;
+
+    private List<Result> results;
+
+    private String scale;
+
+    @Data
+    public static class Result{
+
+        @Schema(description = "人脸向量")
+        private List<Double> embedding;
+
+        @Schema(description = "人脸可信度")
+        private Double face_confidence;
+
+        @Schema(description = "区域信息")
+        private Object facial_area;
+    }
+}

+ 11 - 0
centers/AuthCenter/AuthClient/src/main/java/com/github/microservice/auth/client/model/UserFaceConfidenceModel.java

@@ -0,0 +1,11 @@
+package com.github.microservice.auth.client.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class UserFaceConfidenceModel {
+
+    private String file;
+
+}

+ 5 - 0
centers/AuthCenter/AuthClient/src/main/java/com/github/microservice/auth/client/service/UserFaceService.java

@@ -1,6 +1,7 @@
 package com.github.microservice.auth.client.service;
 
 import com.github.microservice.auth.client.content.ResultContent;
+import com.github.microservice.auth.client.model.UserFaceConfidenceModel;
 import com.github.microservice.auth.client.model.UserFaceQueryModel;
 import com.github.microservice.auth.client.model.UserFaceUploadModel;
 import io.swagger.v3.oas.annotations.Operation;
@@ -18,6 +19,10 @@ import java.util.List;
 @FeignClient(name = "authserver/manager/userFace")
 public interface UserFaceService {
 
+    @Operation(summary = "获取人脸可信度", description = "上传人脸图片,获取人脸可信度")
+    @RequestMapping(value = "confidence", method = RequestMethod.POST)
+    ResultContent<Double> confidence(@RequestBody UserFaceConfidenceModel userFaceConfidenceModel);
+
     @Operation(summary = "上传用户人脸图片", description = "上传用户人脸图片,用于人脸新增或替换")
     @RequestMapping(value = "upload", method = RequestMethod.POST)
     ResultContent<String> upload(@RequestBody @Valid UserFaceUploadModel userFaceUploadModel);

+ 40 - 2
centers/AuthCenter/AuthServer/src/main/java/com/github/microservice/auth/server/core/service/local/UserFaceServiceImpl.java

@@ -2,12 +2,11 @@ package com.github.microservice.auth.server.core.service.local;
 
 import com.github.microservice.auth.client.content.ResultContent;
 import com.github.microservice.auth.client.content.ResultState;
+import com.github.microservice.auth.client.model.*;
 import com.github.microservice.auth.security.helper.AuthHelper;
 import com.github.microservice.auth.server.core.helper.FaceHelper;
 import com.github.microservice.auth.server.core.model.FacePutResultsModel;
 import com.github.microservice.auth.server.core.model.FaceSearchResultModel;
-import com.github.microservice.auth.client.model.UserFaceQueryModel;
-import com.github.microservice.auth.client.model.UserFaceUploadModel;
 import com.github.microservice.auth.client.service.UserFaceService;
 import com.github.microservice.auth.server.core.dao.UserDao;
 import com.github.microservice.auth.server.core.dao.UserFaceDao;
@@ -57,6 +56,38 @@ public class UserFaceServiceImpl implements UserFaceService {
     @Autowired
     FaceHelper faceHelper;
 
+    @SneakyThrows
+    public ResultContent<Double> confidence(UserFaceConfidenceModel userFaceConfidenceModel){
+        String key = UUID.randomUUID().toString() + System.currentTimeMillis();
+        //上传人脸库,获取向量
+        String fileBase64 = userFaceConfidenceModel.getFile();
+        byte[] decode = Base64.getDecoder().decode(fileBase64);
+        @Cleanup InputStream inputStream = new ByteArrayInputStream(decode);
+
+        HttpResponse<String> response = faceHelper.uploadFs(inputStream, key);
+        if (response.statusCode() != 200) {
+            return ResultContent.buildFail("人脸特征提取失败");
+        }
+
+        String body = response.body();
+        if (StringUtils.isBlank(body)) {
+            return ResultContent.buildFail("无法提取人脸特征");
+        }
+        FaceStoreResponseModel storeResponse = JsonUtil.toObject(body, FaceStoreResponseModel.class);
+
+        if (storeResponse.getResults() == null || storeResponse.getResults().isEmpty()) {
+            return ResultContent.buildFail("获取人脸信息结果失败");
+        }
+        Double faceConfidence = storeResponse.getResults().get(0).getFace_confidence();
+
+        HttpResponse<String> deleteResponse = faceHelper.delete(key);
+        if (deleteResponse.statusCode() != 200) {
+            log.error("人脸库删除数据失败:key:{}", key);
+        }
+
+        return ResultContent.buildContent(faceConfidence);
+    }
+
 
     /**
      * 上传人脸图片
@@ -110,6 +141,13 @@ public class UserFaceServiceImpl implements UserFaceService {
         userFace.setFaceFSId(fileId);
         userFace.setFaceDataKey(key);
         userFaceDao.save(userFace);
+
+//        String body = response.body();
+//        FaceStoreResponseModel storeResponse = JsonUtil.toObject(body, FaceStoreResponseModel.class);
+//        System.out.println("face_confidence = " + storeResponse.getResults().get(0).getFace_confidence());
+//        UserFaceUploadResultModel userFaceUploadResultModel = new UserFaceUploadResultModel();
+//        userFaceUploadResultModel.setFileId(fileId);
+//        userFaceUploadResultModel.setFaceConfidence(storeResponse.getResults().get(0).getFace_confidence());
         return ResultContent.buildContent(fileId);
     }