Selaa lähdekoodia

人脸认证bug

qzy 1 vuosi sitten
vanhempi
commit
cba283846f

+ 3 - 1
sp-core/sp-base/src/main/java/com/pj/face/handler/IFaceHandler.java

@@ -4,6 +4,8 @@ import com.pj.common.core.utils.sign.Base64;
 import com.pj.face.brand.FaceBrand;
 import com.pj.sms.brand.SmsType;
 
+import java.util.List;
+
 /**
  * 使用流程
  * 1、判断是否人脸有效checkIsLive
@@ -39,6 +41,6 @@ public interface IFaceHandler {
      * @param baseImg
      * @return
      */
-    String faceSearch(String baseImg);
+    List<String> faceSearch(String baseImg);
     FaceBrand faceBrand();
 }

+ 7 - 6
sp-core/sp-base/src/main/java/com/pj/face/handler/impl/TencenFaceHandlerImpl.java

@@ -14,7 +14,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -50,7 +52,7 @@ public class TencenFaceHandlerImpl implements IFaceHandler {
      * @param baseImg
      * @return
      */
-    public String faceSearch(String baseImg) {
+    public List<String> faceSearch(String baseImg) {
         IaiClient client = this.createClient();
         SearchFacesRequest request = new SearchFacesRequest();
         request.setImage(baseImg);
@@ -59,7 +61,7 @@ public class TencenFaceHandlerImpl implements IFaceHandler {
         request.setMaxPersonNum(2L);
         request.setGroupIds(new String[]{tencenProperties.getGroupId()});
         SearchFacesResponse response;
-        AtomicReference<String> faceId = new AtomicReference<>("");
+        List<String> faceId = new ArrayList<>();
         try {
             response = client.SearchFaces(request);
         } catch (TencentCloudSDKException e) {
@@ -67,12 +69,11 @@ public class TencenFaceHandlerImpl implements IFaceHandler {
         }
         Arrays.stream(response.getResults())
                 .forEach(result -> {
-                    Optional<Candidate> optionalCandidate = Arrays.stream(result.getCandidates())
+                    Arrays.stream(result.getCandidates())
                             .filter(candidate -> candidate.getScore() >= 80)
-                            .findFirst();
-                    optionalCandidate.ifPresent(candidate -> faceId.set(candidate.getPersonId()));
+                            .forEach(candidate -> faceId.add(candidate.getPersonId()));
                 });
-        return faceId.get();
+        return faceId;
     }
 
     public void createPersonByBase(String personId, String name, String imageBase) {

+ 12 - 6
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserService.java

@@ -645,11 +645,17 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
             throw new AjaxError("识别失败");
         }
         if (type==2){
-            String faceId = faceFactory.handler().faceSearch(img);
-            if (StrUtil.isEmpty(faceId)) {
+            List<String> faceId = faceFactory.handler().faceSearch(img);
+            if (faceId.isEmpty()) {
                 throw  new AjaxError("人脸不匹配");
             }
-            AppUser appUser = findByFaceId(faceId);
+            AppUser appUser =null;
+            for (String id : faceId) {
+                AppUser  checkUser = findByFaceId(id);
+                if (checkUser!=null){
+                    appUser=checkUser;
+                }
+            }
             if (appUser == null) {
                 throw  new AjaxError("人员信息未找到");
             }
@@ -688,11 +694,11 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
         } catch (IOException e) {
             throw new AjaxError("识别失败");
         }
-        String faceId = faceFactory.handler().faceSearch(img);
-        if (StrUtil.isEmpty(faceId)) {
+        List<String> faceId = faceFactory.handler().faceSearch(img);
+        if (faceId.isEmpty()) {
             return AjaxJson.getError("人员未录入人脸");
         }
-        AppUser appUser = findByFaceId(faceId);
+        AppUser appUser = findByFaceId(faceId.get(0));
         if (appUser == null) {
             return AjaxJson.getError("人员信息未找到");
         }