Переглянути джерело

新增人脸对比只返回 key接口

wujiefeng 1 рік тому
батько
коміт
230ea01d4c

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

@@ -38,4 +38,8 @@ public interface UserFaceService {
     @Operation(summary = "比对人脸图片", description = "比对人脸图片")
     @RequestMapping(value = "matches", method = RequestMethod.POST)
     ResultContent<Object> matches(@RequestParam("file") MultipartFile file);
+
+    @Operation(summary = "获取比对人脸图片UserId", description = "获取比对人脸图片UserId")
+    @RequestMapping(value = "getMatchesKey", method = RequestMethod.POST)
+    ResultContent<String> getMatchesKey(MultipartFile file);
 }

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

@@ -236,6 +236,25 @@ public class UserFaceServiceImpl implements UserFaceService {
         return ResultContent.buildContent(Map.of("items", items));
     }
 
+    @SneakyThrows
+    public ResultContent<String> getMatchesKey(MultipartFile file) {
+        @Cleanup InputStream inputStream = file.getInputStream();
+        HttpResponse<String> response = faceHelper.search(inputStream, 1);
+
+        if (response.statusCode() != 200) {
+            return ResultContent.build(ResultState.Fail, "人脸特征提取失败");
+        }
+        FaceSearchResultModel  resultsModel = JsonUtil.toObject(response.body(), FaceSearchResultModel.class);
+        List<FaceSearchResultModel.Item> items = resultsModel.getItems().stream().map(item -> {
+            item.setKey(item.getKey().substring(0, item.getKey().lastIndexOf("_")));
+            return item;
+        }).toList();
+        if (items.isEmpty()) {
+            return ResultContent.build(ResultState.Success, null);
+        }
+        return ResultContent.buildContent(items.get(0).getKey());
+    }
+
     /**
      * 将 InputStream 转换为 Base64 字符串
      *