Kaynağa Gözat

优化识别

suntianwu 3 yıl önce
ebeveyn
işleme
01ce93489b

+ 9 - 1
src/main/java/com/iden/bms/controller/CrowdController.java

@@ -3,6 +3,7 @@ package com.iden.bms.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.iden.bms.service.CrowdService;
+import com.iden.bms.service.FaceIdenService;
 import com.iden.bms.service.PersonService;
 import com.iden.common.annotation.Permission;
 import com.iden.common.exception.BDException;
@@ -44,6 +45,10 @@ public class CrowdController {
     private CrowdService crowdService;
     @Autowired
     private PersonService personService;
+    @Autowired
+    private FaceIdenService faceIdenService;
+
+
     @GetMapping("/listCommunity4Select")
     @ApiOperation(value = "人群下拉列表 ")
     public Result<List<CrowdVO>> listCommunity4Select(HttpServletRequest request, @RequestHeader(value = "token") String token){
@@ -243,7 +248,10 @@ public class CrowdController {
                                        @PathVariable("id") Long id,
                                        @RequestParam(value = "crowdId", required = true) Long crowdId){
         try {
-            this.crowdService.deletePersonFromCrowd(id,crowdId);
+            int flag =this.crowdService.deletePersonFromCrowd(id,crowdId);
+            if(flag  == 1){
+                faceIdenService.reloadFaceDataset();
+            }
             return  Result.success("删除成功!");
         } catch (BDException e) {
             log.error("人员删除-出现异常",e);

+ 13 - 1
src/main/java/com/iden/bms/controller/PersonController.java

@@ -2,6 +2,7 @@ package com.iden.bms.controller;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.iden.bms.service.FaceIdenService;
 import com.iden.bms.service.PersonService;
 import com.iden.common.annotation.Permission;
 import com.iden.common.exception.BDException;
@@ -14,6 +15,7 @@ import com.iden.common.vo.PersonStaVO;
 import com.iden.common.vo.PersonVO;
 import com.iden.common.vo.PageReqVO;
 import com.iden.common.vo.UserLoginedConvertVO;
+import io.micrometer.core.instrument.util.StringUtils;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +40,8 @@ public class PersonController {
 
     @Autowired
     private PersonService personService;
+    @Autowired
+    private FaceIdenService faceIdenService;
 
     @GetMapping("/getPersonStaVO")
     @ApiOperation(value = "查询人员统计值 ")
@@ -256,6 +260,10 @@ public class PersonController {
                                  @RequestBody PersonVO vo){
         try {
             this.personService.updatePerson(vo);
+            String oldImage =  this.personService.getPersonById(vo.getId()).getImage();
+            if(StringUtils.isNotEmpty(vo.getImage()) && !vo.getImage().equalsIgnoreCase(oldImage)){
+                faceIdenService.reloadFaceDataset();
+            }
             return  Result.success("修改成功!");
         }catch (BDException e) {
             log.error("修改人员-出现异常",e);
@@ -308,7 +316,11 @@ public class PersonController {
                                        @PathVariable("id") Long id,
                                        @RequestParam(value = "type", required = true) String type){
         try {
-            this.personService.deleteById(id,type);
+            int flag = this.personService.deleteById(id,type);
+            if( flag == 1){
+                faceIdenService.reloadFaceDataset();
+            }
+
             return  Result.success("删除成功!");
         } catch (BDException e) {
             log.error("人员删除-出现异常",e);

+ 5 - 6
src/main/java/com/iden/bms/service/CrowdService.java

@@ -55,8 +55,7 @@ public class CrowdService {
     private IdenPersonService idenPersonService;
     @Resource
     private IdenWarningPersonService idenWarningPersonService;
-    @Resource
-    private  FaceIdenService faceIdenService;
+
 
     @Resource
     private RedisUtil redisUtil;
@@ -278,7 +277,8 @@ public class CrowdService {
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public void deletePersonFromCrowd(Long id, Long crowdId) throws BDException {
+    public int deletePersonFromCrowd(Long id, Long crowdId) throws BDException {
+        int flag = 0;
         String key = RedisKeyConstant.PERSON_DELETE;
         String requestId = UUID.randomUUID().toString();
         boolean result = redisUtil.tryLock(key,requestId,10 * 60);
@@ -307,8 +307,7 @@ public class CrowdService {
                         }
                     }
                     this.idenPersonService.removeById(id);
-                    faceIdenService.reloadFaceDataset();
-                    ;
+                    flag = 1;
                 }
 
 
@@ -321,7 +320,7 @@ public class CrowdService {
         }  finally {
             redisUtil.releaseLock(key,requestId);
         }
-
+        return flag;
     }
 
 }

+ 3 - 0
src/main/java/com/iden/bms/service/FaceIdenService.java

@@ -161,6 +161,9 @@ public class FaceIdenService {
                             logger.info("FaceIdenService.handleCameraImage 3...");
                             //获取特征码
                             FaceModel[] faceModels = FaceIdenTool.extractFeature(imgFiles);
+                            if(faceModels == null || faceModels.length == 0){
+                                continue;
+                            }
                             logger.info("FaceIdenService.handleCameraImage 4...");
                            // List<IdenFaceImage> idenFaceImageList = new ArrayList<>();
                             for (int i = 0; i < imgFiles.length; i++) {

+ 9 - 9
src/main/java/com/iden/bms/service/PersonService.java

@@ -69,8 +69,7 @@ public class PersonService {
     private IdenCommunityService idenCommunityService;
     @Resource
     private IdenWarningPersonService idenWarningPersonService;
-    @Resource
-    private  FaceIdenService faceIdenService;
+
 
     @Resource
     private RedisUtil redisUtil;
@@ -582,7 +581,8 @@ public class PersonService {
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public void deleteById(Long id,String type) throws BDException {
+    public int deleteById(Long id,String type) throws BDException {
+        int flag = 0;
         String key = RedisKeyConstant.PERSON_DELETE;
         String requestId = UUID.randomUUID().toString();
         boolean result = redisUtil.tryLock(key,requestId,10 * 60);
@@ -616,7 +616,7 @@ public class PersonService {
                    UpdateWrapper<IdenPerson> updateWrapper = new UpdateWrapper<>();
                    updateWrapper.lambda().set(IdenPerson::getType,types).eq(IdenPerson::getId,id);
                    idenPersonService.update(updateWrapper);
-
+                   flag = 0;
                } else {
                    QueryWrapper<IdenPersonCrowdRef> queryWrapper = new QueryWrapper<>();
                    queryWrapper.lambda().eq(IdenPersonCrowdRef::getPersonId,idenPerson.getId());
@@ -631,7 +631,7 @@ public class PersonService {
                        }
                    }
                    this.idenPersonService.removeById(id);
-                   faceIdenService.reloadFaceDataset();
+                   flag = 1;
                }
 
             } else {
@@ -643,7 +643,7 @@ public class PersonService {
         }  finally {
             redisUtil.releaseLock(key,requestId);
         }
-
+        return flag;
     }
 
     /**
@@ -789,6 +789,7 @@ public class PersonService {
                 String oldImage = idenPerson.getImage();
                 BeanUtil.copyProperties(vo,idenPerson);
                 String newImage = vo.getImage();
+
                 if (StringUtils.isNotEmpty(newImage) && !newImage.equals(oldImage)){
                     //识别
                     String fileNameNew = newImage.substring(newImage.lastIndexOf("/") + 1);
@@ -813,13 +814,12 @@ public class PersonService {
                             imgFileOld.delete();
                         }
                     }
-
                 }
                 idenPerson.setModifyTime(new Date());
 
                 this.idenPersonService.updateById(idenPerson);
 
-                faceIdenService.reloadFaceDataset();
+
             } else {
                 throw new BDException("不能多人同时修改,稍后再试");
             }
@@ -832,7 +832,7 @@ public class PersonService {
     }
 
     /**
-     * 修改人员
+     * 修改备注
      * @param vo
      */
     @Transactional(rollbackFor = Exception.class)

+ 3 - 1
src/main/java/com/iden/bms/service/TraceService.java

@@ -138,7 +138,9 @@ public class TraceService {
 
         //上传的图像的特征码结构体数组
         FaceModel[] faceModels = FaceIdenTool.extractFeature(imgFiles);
-
+        if(faceModels == null || faceModels.length ==0){
+            return result;
+        }
         //初始化引擎,加载摄像头上传的在时间段内的图像人脸特征库
         QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().isNotNull(IdenFaceImage::getFeatPtr)

+ 24 - 16
src/main/java/com/iden/common/facetool/FaceIdenTool.java

@@ -1,5 +1,6 @@
 package com.iden.common.facetool;
 
+import cn.hutool.core.collection.CollUtil;
 import com.face.monitor.FaceMonitor;
 import com.face.monitor.model.FaceModel;
 import com.face.monitor.model.FaceRecogRetrieveResult;
@@ -84,7 +85,8 @@ public class FaceIdenTool {
      */
     public static FaceModel[] extractFeature(File[] imgFiles){
         //获取引擎
-        FaceMonitor faceMonitor = getMyFaceMonitor().getFaceMonitor();
+        MyFaceMonitor myFaceMonitor = getMyFaceMonitor();
+        FaceMonitor faceMonitor = myFaceMonitor.getFaceMonitor();
 
         List<byte[]> faceImageList = new ArrayList<>();
         if(imgFiles != null && imgFiles.length > 0){
@@ -92,7 +94,12 @@ public class FaceIdenTool {
                 faceImageList.add(readFileBytes(imgFile.getAbsolutePath()));
             }
         }
-        FaceModel[] faceModels = faceMonitor.extractFeature(faceImageList);
+        FaceModel[] faceModels = null;
+        if (CollUtil.isNotEmpty(faceImageList)){
+            faceMonitor.extractFeature(faceImageList);
+        }
+
+        returnObjectToPool(myFaceMonitor);
         return faceModels;
     }
 
@@ -119,20 +126,6 @@ public class FaceIdenTool {
     }
 
 
-    public static boolean isBad(String featPtr){
-        if (StringUtils.isEmpty(featPtr)) {
-            return true;
-        }
-        char[] chars = featPtr.toCharArray();
-
-        for (char c : chars){
-            if(!String.valueOf(c).equals("0")){
-                return false;
-            }
-        }
-        return true;
-    }
-
     /**
      * faceModel在faceMonitor的人脸特征库中检索命中的底库的index
      * @param faceMonitor
@@ -235,4 +228,19 @@ public class FaceIdenTool {
             }
         }
     }
+
+
+    public static boolean isBad(String featPtr){
+        if (StringUtils.isEmpty(featPtr)) {
+            return true;
+        }
+        char[] chars = featPtr.toCharArray();
+
+        for (char c : chars){
+            if(!String.valueOf(c).equals("0")){
+                return false;
+            }
+        }
+        return true;
+    }
 }