소스 검색

优化识别

suntianwu 3 년 전
부모
커밋
aff319b889

+ 0 - 22
src/main/java/com/iden/bms/schedule/FaceIdenSchedule.java

@@ -47,26 +47,4 @@ public class FaceIdenSchedule {
     }
 
 
-    /**
-     * 处理摄像头上传的视频
-     */
-    @Async
-    @Scheduled(cron = "30 1/5 * * * ?")
-    public void handleCameraVideo() {
-        String key = RedisKeyConstant.HANDLE_CAMERA_VIDEO;
-        String requestId = UUID.randomUUID().toString();
-        boolean result = redisUtil.tryLock(key,requestId,10 * 60);
-        try {
-            if (result) {
-                faceIdenService.handleCameraVideo();
-            }
-        } catch (Exception e) {
-            e.getMessage();
-        }  finally {
-            redisUtil.releaseLock(key,requestId);
-        }
-
-    }
-
-
 }

+ 52 - 0
src/main/java/com/iden/bms/schedule/VideoSchedule.java

@@ -0,0 +1,52 @@
+package com.iden.bms.schedule;
+
+
+
+import com.iden.bms.service.VideoService;
+import com.iden.common.cache.RedisKeyConstant;
+import com.iden.common.cache.RedisUtil;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import javax.annotation.Resource;
+import java.util.UUID;
+
+/**
+ * 定时读取目录下图片,调用人脸识别引擎,把特征码入库
+ */
+@Configuration
+@EnableScheduling
+@EnableAsync
+public class VideoSchedule {
+
+    @Resource
+    private VideoService videoService;
+    @Resource
+    private RedisUtil redisUtil;
+
+    /**
+     * 处理摄像头上传的视频
+     */
+    @Async
+    @Scheduled(cron = "30 1/5 * * * ?")
+    public void handleCameraVideo() {
+        String key = RedisKeyConstant.HANDLE_CAMERA_VIDEO;
+        String requestId = UUID.randomUUID().toString();
+        boolean result = redisUtil.tryLock(key,requestId,10 * 60);
+        try {
+            if (result) {
+                videoService.handleCameraVideo();
+            }
+        } catch (Exception e) {
+            e.getMessage();
+        }  finally {
+            redisUtil.releaseLock(key,requestId);
+        }
+
+    }
+
+
+}

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

@@ -21,7 +21,6 @@ import com.iden.common.service.*;
 import com.iden.common.util.ByteUtil;
 import com.iden.common.util.DateUtils;
 import com.iden.common.util.FileUtil;
-import com.iden.common.videotool.VideoTool;
 import com.iden.common.vo.FaceRetrieveResultVO;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
@@ -49,10 +48,6 @@ public class FaceIdenService {
     @Resource
     private IdenCommunityService idenCommunityService;
     @Resource
-    private PersonService personService;
-    @Resource
-    private IdenCameraVideoService idenCameraVideoService;
-    @Resource
     private IdenPersonService idenPersonService;
 
 
@@ -363,85 +358,4 @@ public class FaceIdenService {
         }
 
     }
-    /**
-     * 把摄像头上传的图像解开为一帧帧图片,放到图像目录下,等待识别引擎处理
-     * @throws Exception
-     */
-    public void handleCameraVideo() throws Exception {
-        logger.info("FaceIdenService.handleCameraVideo start...");
-        File originVideoDirFile = new File(idenRoot + "data/origin/camera/video");
-        //使用摄像头编码做目录名,里面存放视频,名称里包含拍摄结束时间
-        // 比如 20211217123343_76639ced-6409-11ec-b8f9-fa883e4e1e9f.mp4
-        if (originVideoDirFile.isDirectory()) {
-            File[] cameraCodeDirs = originVideoDirFile.listFiles();
-            if (cameraCodeDirs != null && cameraCodeDirs.length > 0) {
-                for(File cameraCodedir : cameraCodeDirs) {
-                    if (cameraCodedir.isDirectory()) {
-                        File[] videoFiles = FileUtil.sortByName(cameraCodedir.listFiles());
-                        if (videoFiles != null && videoFiles.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;
-                            }
-
-                            for(File videoFile : videoFiles){
-                                String videoFileName = videoFile.getName();
-                                logger.info("FaceIdenService.handleCameraVideo ...videoFile.getName() == " + videoFileName);
-
-                                String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
-                                Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
-
-
-                                String tmp = UUID.randomUUID().toString();
-                                File finalDirTmp = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","discard") + "/" + tmp);
-                                if(!finalDirTmp.exists()){
-                                    finalDirTmp.mkdirs();
-                                }
-                                logger.info("FaceIdenService.handleCameraVideo ...originImageDir == " + finalDirTmp.getAbsolutePath());
-
-                                File originImageDir = new File(videoFile.getParentFile().getAbsolutePath().replace("video","image"));
-                                if(!originImageDir.exists()){
-                                    originImageDir.mkdirs();
-                                }
-                                logger.info("FaceIdenService.handleCameraVideo ...originImageDir == " + originImageDir.getAbsolutePath());
-
-                                //先把分解图片放入临时目录,临时目录下的文件重命名后移到原始目录等待图像识别
-                                Long duration = VideoTool.fetchAllPic(ffmpegPath, videoFile.getAbsolutePath(),finalDirTmp.getAbsolutePath(),originImageDir.getAbsolutePath(), shootEndTime);
-
-                                File finalVideoDir = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","final"));
-                                if(!finalVideoDir.exists()){
-                                    finalVideoDir.mkdirs();
-                                }
-                                logger.info("FaceIdenService.handleCameraVideo ...finalVideoDir == " + finalVideoDir.getAbsolutePath());
-
-                                File finalVideoFile = new File(finalVideoDir, videoFileName);
-                                logger.info("FaceIdenService.handleCameraVideo ...finalVideoFile == " + finalVideoFile.getAbsolutePath());
-                                videoFile.renameTo(finalVideoFile);//把视频文件移动到最终目录
-
-                                //保存数据库
-                                IdenCameraVideo idenCameraVideo = new IdenCameraVideo();
-                                idenCameraVideo.setVideoUrl(fileUrl + "camera/video/" + cameraCode + "/" + videoFileName);
-                                idenCameraVideo.setCameraId(idenCamera.getId());
-                                idenCameraVideo.setCommunityId(idenCamera.getCommunityId());
-                                idenCameraVideo.setName(videoFileName.substring(0,videoFileName.lastIndexOf(".")));
-                                Long begin = shootEndTime.getTime() - duration;
-                                idenCameraVideo.setPhotographBeginTime(new Date(begin));
-                                idenCameraVideo.setPhotographEndTime(shootEndTime);
-                                idenCameraVideo.setDuration(duration);
-                                idenCameraVideo.setCreateTime(new Date());
-                                idenCameraVideoService.save(idenCameraVideo);
-
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        logger.info("FaceIdenService.handleCameraVideo end");
-    }
-
 }

+ 128 - 0
src/main/java/com/iden/bms/service/VideoService.java

@@ -0,0 +1,128 @@
+package com.iden.bms.service;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.iden.common.entity.*;
+import com.iden.common.service.*;
+import com.iden.common.util.DateUtils;
+import com.iden.common.util.FileUtil;
+import com.iden.common.videotool.VideoTool;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.util.Date;
+import java.util.UUID;
+
+
+/**
+ * @Author: stw
+ * @Date: 2021/7/14
+ * @Desc:
+ */
+@Service
+public class VideoService {
+    @Resource
+    private IdenCameraService idenCameraService;
+
+    @Resource
+    private IdenCameraVideoService idenCameraVideoService;
+
+
+    @Value("${iden.root:#{null}}")
+    private String idenRoot;
+    @Value("${file.url:#{null}}")
+    private String fileUrl;
+    @Value("${ffmpeg.path:#{null}}")
+    private String ffmpegPath;
+
+
+    private static final Logger logger = LogManager.getLogger(VideoService.class);
+
+
+    /**
+     * 把摄像头上传的图像解开为一帧帧图片,放到图像目录下,等待识别引擎处理
+     * @throws Exception
+     */
+    public void handleCameraVideo() throws Exception {
+        logger.info("FaceIdenService.handleCameraVideo start...");
+        File originVideoDirFile = new File(idenRoot + "data/origin/camera/video");
+        //使用摄像头编码做目录名,里面存放视频,名称里包含拍摄结束时间
+        // 比如 20211217123343_76639ced-6409-11ec-b8f9-fa883e4e1e9f.mp4
+        if (originVideoDirFile.isDirectory()) {
+            File[] cameraCodeDirs = originVideoDirFile.listFiles();
+            if (cameraCodeDirs != null && cameraCodeDirs.length > 0) {
+                for(File cameraCodedir : cameraCodeDirs) {
+                    if (cameraCodedir.isDirectory()) {
+                        File[] videoFiles = FileUtil.sortByName(cameraCodedir.listFiles());
+                        if (videoFiles != null && videoFiles.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;
+                            }
+
+                            for(File videoFile : videoFiles){
+                                String videoFileName = videoFile.getName();
+                                logger.info("FaceIdenService.handleCameraVideo ...videoFile.getName() == " + videoFileName);
+
+                                String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
+                                Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
+
+
+                                String tmp = UUID.randomUUID().toString();
+                                File finalDirTmp = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","discard") + "/" + tmp);
+                                if(!finalDirTmp.exists()){
+                                    finalDirTmp.mkdirs();
+                                }
+                                logger.info("FaceIdenService.handleCameraVideo ...originImageDir == " + finalDirTmp.getAbsolutePath());
+
+                                File originImageDir = new File(videoFile.getParentFile().getAbsolutePath().replace("video","image"));
+                                if(!originImageDir.exists()){
+                                    originImageDir.mkdirs();
+                                }
+                                logger.info("FaceIdenService.handleCameraVideo ...originImageDir == " + originImageDir.getAbsolutePath());
+
+                                //先把分解图片放入临时目录,临时目录下的文件重命名后移到原始目录等待图像识别
+                                Long duration = VideoTool.fetchAllPic(ffmpegPath, videoFile.getAbsolutePath(),finalDirTmp.getAbsolutePath(),originImageDir.getAbsolutePath(), shootEndTime);
+
+                                File finalVideoDir = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","final"));
+                                if(!finalVideoDir.exists()){
+                                    finalVideoDir.mkdirs();
+                                }
+                                logger.info("FaceIdenService.handleCameraVideo ...finalVideoDir == " + finalVideoDir.getAbsolutePath());
+
+                                File finalVideoFile = new File(finalVideoDir, videoFileName);
+                                logger.info("FaceIdenService.handleCameraVideo ...finalVideoFile == " + finalVideoFile.getAbsolutePath());
+                                videoFile.renameTo(finalVideoFile);//把视频文件移动到最终目录
+
+                                //保存数据库
+                                IdenCameraVideo idenCameraVideo = new IdenCameraVideo();
+                                idenCameraVideo.setVideoUrl(fileUrl + "camera/video/" + cameraCode + "/" + videoFileName);
+                                idenCameraVideo.setCameraId(idenCamera.getId());
+                                idenCameraVideo.setCommunityId(idenCamera.getCommunityId());
+                                idenCameraVideo.setName(videoFileName.substring(0,videoFileName.lastIndexOf(".")));
+                                Long begin = shootEndTime.getTime() - duration;
+                                idenCameraVideo.setPhotographBeginTime(new Date(begin));
+                                idenCameraVideo.setPhotographEndTime(shootEndTime);
+                                idenCameraVideo.setDuration(duration);
+                                idenCameraVideo.setCreateTime(new Date());
+                                idenCameraVideoService.save(idenCameraVideo);
+
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        logger.info("FaceIdenService.handleCameraVideo end");
+    }
+
+}