suntianwu 3 年 前
コミット
825a24f9ce
1 ファイル変更104 行追加100 行削除
  1. 104 100
      src/main/java/com/iden/bms/face/FaceIdenService.java

+ 104 - 100
src/main/java/com/iden/bms/face/FaceIdenService.java

@@ -90,123 +90,127 @@ public class FaceIdenService {
                 logger.info("FaceIdenService.handleCameraImage 2...");
                 FaceMonitor faceMonitorPerson = FaceIdenTool.initFaceMonitor(idenRoot,imgPersonFiles);
 
-                for(File cameraCodedir : cameraCodeDirs) {
-                    if(cameraCodedir.isDirectory()){
-                        File[] imgFiles = FileUtil.sortByName(cameraCodedir.listFiles());
-                        if(imgFiles != null && imgFiles.length > 0){
-                            String cameraCode = cameraCodedir.getName();
-                            QueryWrapper<IdenCamera> queryWrapper = new QueryWrapper<>();
-                            queryWrapper.lambda().eq(IdenCamera::getCode,cameraCode);
-                            IdenCamera idenCamera = idenCameraService.getOne(queryWrapper);
-                            if(idenCamera == null){
-                                continue;
-                            }
-                            logger.info("FaceIdenService.handleCameraImage 3...");
-                           //获取特征码
-                            FaceModel[] faceModels = FaceIdenTool.extractFeature(idenRoot,imgFiles);
-
-                            List<IdenFaceImage> idenFaceImageList = new ArrayList<>();
-                            for(int i = 0; i < imgFiles.length; i++) {
-                                File imgFile  = imgFiles[i];
-                                String imgFileName = imgFile.getName();
-                                IdenFaceImage idenFaceImage = new IdenFaceImage();
-                                //识别特征码
-                                if (faceModels[i] != null) {
-                                    String featPtr = ByteUtil.byte2Hex(faceModels[i].getFeatValue());
-                                    //没有人脸的、不是正面的、不符合标准的,连拍的图片
-                                    if(FaceIdenTool.isBad(featPtr) || isContinuation(cameraCode,imgFileName,featPtr)) {
-                                        File discardDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin","discard"));
-                                        if(!discardDir.exists()){
-                                            discardDir.mkdirs();
+                try {
+                    for (File cameraCodedir : cameraCodeDirs) {
+                        if (cameraCodedir.isDirectory()) {
+                            File[] imgFiles = FileUtil.sortByName(cameraCodedir.listFiles());
+                            if (imgFiles != null && imgFiles.length > 0) {
+                                String cameraCode = cameraCodedir.getName();
+                                QueryWrapper<IdenCamera> queryWrapper = new QueryWrapper<>();
+                                queryWrapper.lambda().eq(IdenCamera::getCode, cameraCode);
+                                IdenCamera idenCamera = idenCameraService.getOne(queryWrapper);
+                                if (idenCamera == null) {
+                                    continue;
+                                }
+                                logger.info("FaceIdenService.handleCameraImage 3...");
+                                //获取特征码
+                                FaceModel[] faceModels = FaceIdenTool.extractFeature(idenRoot, imgFiles);
+
+                                List<IdenFaceImage> idenFaceImageList = new ArrayList<>();
+                                for (int i = 0; i < imgFiles.length; i++) {
+                                    File imgFile = imgFiles[i];
+                                    String imgFileName = imgFile.getName();
+                                    IdenFaceImage idenFaceImage = new IdenFaceImage();
+                                    //识别特征码
+                                    if (faceModels[i] != null) {
+                                        String featPtr = ByteUtil.byte2Hex(faceModels[i].getFeatValue());
+                                        //没有人脸的、不是正面的、不符合标准的,连拍的图片
+                                        if (FaceIdenTool.isBad(featPtr) || isContinuation(cameraCode, imgFileName, featPtr)) {
+                                            File discardDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin", "discard"));
+                                            if (!discardDir.exists()) {
+                                                discardDir.mkdirs();
+                                            }
+                                            File finalImgFile = new File(discardDir, imgFileName);
+                                            imgFile.renameTo(finalImgFile);//移动到废弃目录
+                                            continue;
+                                        } else {
+                                            idenFaceImage.setFeatPtr(featPtr);
+                                            //存到redis
+                                            redisUtil.hset(RedisKeyConstant.HANDLE_CAMERA_IMAGE_FIRST + "_" + cameraCode, imgFileName, featPtr, RedisKeyConstant.HANDLE_CAMERA_IMAGE_FIRST_TIME);
                                         }
-                                        File finalImgFile = new File(discardDir, imgFileName);
-                                        imgFile.renameTo(finalImgFile);//移动到废弃目录
-                                        continue;
-                                    } else {
-                                        idenFaceImage.setFeatPtr(featPtr);
-                                        //存到redis
-                                        redisUtil.hset(RedisKeyConstant.HANDLE_CAMERA_IMAGE_FIRST + "_" + cameraCode, imgFileName, featPtr, RedisKeyConstant.HANDLE_CAMERA_IMAGE_FIRST_TIME);
-                                    }
 
-                                }
-                                idenFaceImage.setCameraId(idenCamera.getId());
-                                idenFaceImage.setCommunityId(idenCamera.getCommunityId());
-                                String photographPlace = idenCamera.getPlace();
-                                if (StringUtils.isEmpty(photographPlace)) {
-                                    IdenCommunity idenCommunity = idenCommunityService.getById(idenCamera.getCommunityId());
-                                    if(idenCommunity != null) {
-                                        photographPlace = idenCommunity.getName() + "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
-                                    } else {
-                                        photographPlace = "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
                                     }
-                                }
-                                idenFaceImage.setPhotographPlace(photographPlace);
-                                idenFaceImage.setLongitude(idenCamera.getLongitude());
-                                idenFaceImage.setLatitude(idenCamera.getLatitude());
-
-                                String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
-                                idenFaceImage.setPhotographTime(DateUtils.strToDate(photographTime,"yyyyMMddHHmmss"));
-                                idenFaceImage.setDataDate(photographTime.substring(0,8));
-
-                                File finalDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin","final"));
-                                if(!finalDir.exists()){
-                                    finalDir.mkdirs();
-                                }
-                                logger.info("FaceIdenService.handleCameraImage ...finalDir == " + finalDir.getAbsolutePath());
-                                logger.info("FaceIdenService.handleCameraImage ...imgFile.getName() == " + imgFileName);
-                                File finalImgFile = new File(finalDir, imgFileName);
-
-                                logger.info("FaceIdenService.handleCameraImage ...finalImgFile == " + finalImgFile.getAbsolutePath());
-
-                                imgFile.renameTo(finalImgFile);//移动到最终目录
+                                    idenFaceImage.setCameraId(idenCamera.getId());
+                                    idenFaceImage.setCommunityId(idenCamera.getCommunityId());
+                                    String photographPlace = idenCamera.getPlace();
+                                    if (StringUtils.isEmpty(photographPlace)) {
+                                        IdenCommunity idenCommunity = idenCommunityService.getById(idenCamera.getCommunityId());
+                                        if (idenCommunity != null) {
+                                            photographPlace = idenCommunity.getName() + "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
+                                        } else {
+                                            photographPlace = "(" + idenCamera.getLongitude() + ":" + idenCamera.getLatitude() + ")";
+                                        }
+                                    }
+                                    idenFaceImage.setPhotographPlace(photographPlace);
+                                    idenFaceImage.setLongitude(idenCamera.getLongitude());
+                                    idenFaceImage.setLatitude(idenCamera.getLatitude());
 
-                                idenFaceImage.setImage( fileUrl + "camera/image/" + cameraCode + "/" + finalImgFile.getName());
+                                    String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
+                                    idenFaceImage.setPhotographTime(DateUtils.strToDate(photographTime, "yyyyMMddHHmmss"));
+                                    idenFaceImage.setDataDate(photographTime.substring(0, 8));
 
-                                //和人员图像库比对特征码,关联personId
-                                if(faceModels[i] != null){
+                                    File finalDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin", "final"));
+                                    if (!finalDir.exists()) {
+                                        finalDir.mkdirs();
+                                    }
+                                    logger.info("FaceIdenService.handleCameraImage ...finalDir == " + finalDir.getAbsolutePath());
+                                    logger.info("FaceIdenService.handleCameraImage ...imgFile.getName() == " + imgFileName);
+                                    File finalImgFile = new File(finalDir, imgFileName);
+
+                                    logger.info("FaceIdenService.handleCameraImage ...finalImgFile == " + finalImgFile.getAbsolutePath());
+
+                                    imgFile.renameTo(finalImgFile);//移动到最终目录
+
+                                    idenFaceImage.setImage(fileUrl + "camera/image/" + cameraCode + "/" + finalImgFile.getName());
+
+                                    //和人员图像库比对特征码,关联personId
+                                    if (faceModels[i] != null) {
+
+                                        FaceRetrieveResultVO faceRetrieveResultVO = FaceIdenTool.getHitResult(faceMonitorPerson, faceModels[i]);
+                                        if (faceRetrieveResultVO != null) {
+                                            int hitIndex = faceRetrieveResultVO.getIndex();
+                                            IdenPerson idenPerson = personService.getPersonIdByImageFileName(imgPersonFiles[hitIndex].getName());
+                                            if (idenPerson != null) {
+                                                idenFaceImage.setPersonId(idenPerson.getId());
+                                                idenFaceImage.setUid(idenPerson.getUid());
+                                                idenFaceImage.setType(idenPerson.getType());
+                                                idenFaceImage.setGender(idenPerson.getGender());
+                                                float score = faceRetrieveResultVO.getScore();
+                                                BigDecimal b = new BigDecimal(score);
+                                                double similarity = b.divide(new BigDecimal(100)).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+                                                idenFaceImage.setSimilarity(similarity);
+                                            }
+                                        }
 
-                                    FaceRetrieveResultVO faceRetrieveResultVO = FaceIdenTool.getHitResult(faceMonitorPerson,faceModels[i]);
-                                    if (faceRetrieveResultVO != null){
-                                        int hitIndex = faceRetrieveResultVO.getIndex();
-                                        IdenPerson idenPerson = personService.getPersonIdByImageFileName(imgPersonFiles[hitIndex].getName());
-                                        if(idenPerson != null) {
-                                            idenFaceImage.setPersonId(idenPerson.getId());
-                                            idenFaceImage.setUid(idenPerson.getUid());
-                                            idenFaceImage.setType(idenPerson.getType());
-                                            idenFaceImage.setGender(idenPerson.getGender());
-                                            float score = faceRetrieveResultVO.getScore();
-                                            BigDecimal b = new BigDecimal(score);
-                                            double similarity = b.divide(new BigDecimal(100)).setScale(4,BigDecimal.ROUND_HALF_UP).doubleValue();
+                                    }
+                                    if (idenFaceImage.getPersonId() == null) { //没有关联上,是陌生人
+                                        idenFaceImage.setType(PersonTypeEnum.STRANGER.getValue());
 
-                                            idenFaceImage.setSimilarity(similarity);
+                                        //查询以前的陌生人图库,进行人脸识别,若是同一个人,得到uid, 设置为一样
+                                        String uid = relevanceBeforeFace(idenFaceImage.getFeatPtr());
+                                        if (StringUtils.isEmpty(uid)) {
+                                            uid = UUID.randomUUID().toString();
                                         }
+                                        idenFaceImage.setUid(uid);
                                     }
-
+                                    idenFaceImage.setCreateTime(new Date());
+                                    idenFaceImageList.add(idenFaceImage);
                                 }
-                                if (idenFaceImage.getPersonId() == null){ //没有关联上,是陌生人
-                                    idenFaceImage.setType(PersonTypeEnum.STRANGER.getValue());
 
-                                    //查询以前的陌生人图库,进行人脸识别,若是同一个人,得到uid, 设置为一样
-                                    String uid = relevanceBeforeFace(idenFaceImage.getFeatPtr());
-                                    if (StringUtils.isEmpty(uid)) {
-                                        uid = UUID.randomUUID().toString();
-                                    }
-                                    idenFaceImage.setUid(uid);
+                                //把图像存到图库中
+                                if (CollUtil.isNotEmpty(idenFaceImageList)) {
+                                    idenFaceImageService.saveBatch(idenFaceImageList);
                                 }
-                                idenFaceImage.setCreateTime(new Date());
-                                idenFaceImageList.add(idenFaceImage);
-                            }
 
-                            //把图像存到图库中
-                            if (CollUtil.isNotEmpty(idenFaceImageList)) {
-                                idenFaceImageService.saveBatch(idenFaceImageList);
                             }
-
                         }
                     }
+                } finally {
+                    //释放人脸引擎
+                    FaceIdenTool.releaseEngine(faceMonitorPerson);
                 }
-                //释放人脸引擎
-                FaceIdenTool.releaseEngine(faceMonitorPerson);
+
             }
         }
         logger.info("FaceIdenService.handleCameraImage end");