Browse Source

优化识别

suntianwu 3 years ago
parent
commit
e7cc35f5a8

+ 29 - 10
src/main/java/com/iden/bms/service/FaceIdenService.java

@@ -389,32 +389,51 @@ public class FaceIdenService {
 
 
                             for(File videoFile : videoFiles){
                             for(File videoFile : videoFiles){
                                 String videoFileName = videoFile.getName();
                                 String videoFileName = videoFile.getName();
+                                logger.info("FaceIdenService.handleCameraVideo ...videoFile.getName() == " + videoFileName);
+
                                 String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
                                 String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
                                 Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
                                 Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
-                                Long duration = VideoTool.fetchAllPic(ffmpegPath, videoFile.getAbsolutePath(),idenRoot + "data/origin/camera/image/" + cameraCode, shootEndTime);
 
 
-                                File finalDir = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","final"));
-                                if(!finalDir.exists()){
-                                    finalDir.mkdirs();
+
+                                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 ...finalDir == " + finalDir.getAbsolutePath());
-                                logger.info("FaceIdenService.handleCameraVideo ...videoFile.getName() == " + videoFileName);
-                                File finalvideoFile = new File(finalDir, videoFileName);
+                                logger.info("FaceIdenService.handleCameraVideo ...originImageDir == " + finalDirTmp.getAbsolutePath());
 
 
-                                logger.info("FaceIdenService.handleCameraVideo ...finalvideoFile == " + finalvideoFile.getAbsolutePath());
-                                videoFile.renameTo(finalvideoFile);//移动到最终目录
+                                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 idenCameraVideo = new IdenCameraVideo();
                                 idenCameraVideo.setVideoUrl(fileUrl + "camera/video/" + cameraCode + "/" + videoFileName);
                                 idenCameraVideo.setVideoUrl(fileUrl + "camera/video/" + cameraCode + "/" + videoFileName);
                                 idenCameraVideo.setCameraId(idenCamera.getId());
                                 idenCameraVideo.setCameraId(idenCamera.getId());
                                 idenCameraVideo.setCommunityId(idenCamera.getCommunityId());
                                 idenCameraVideo.setCommunityId(idenCamera.getCommunityId());
-                                idenCameraVideo.setName(videoFileName.substring(0,videoFileName.lastIndexOf(".mp4")));
+                                idenCameraVideo.setName(videoFileName.substring(0,videoFileName.lastIndexOf(".")));
                                 Long begin = shootEndTime.getTime() - duration;
                                 Long begin = shootEndTime.getTime() - duration;
                                 idenCameraVideo.setPhotographBeginTime(new Date(begin));
                                 idenCameraVideo.setPhotographBeginTime(new Date(begin));
                                 idenCameraVideo.setPhotographEndTime(shootEndTime);
                                 idenCameraVideo.setPhotographEndTime(shootEndTime);
                                 idenCameraVideo.setDuration(duration);
                                 idenCameraVideo.setDuration(duration);
                                 idenCameraVideo.setCreateTime(new Date());
                                 idenCameraVideo.setCreateTime(new Date());
                                 idenCameraVideoService.save(idenCameraVideo);
                                 idenCameraVideoService.save(idenCameraVideo);
+
                             }
                             }
                         }
                         }
                     }
                     }

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

@@ -96,10 +96,11 @@ public class TraceService {
                 fos.write(file.getBytes());
                 fos.write(file.getBytes());
                 imageUrl = fileUrl + "trace/" + saveFileName;
                 imageUrl = fileUrl + "trace/" + saveFileName;
             } else {
             } else {
-                throw new BDException("上传失败");
+                throw new BDException("上传文件不能为空");
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
-            throw new BDException("上传失败",e);
+            e.printStackTrace();
+            throw new BDException(e.getMessage());
         }
         }
 
 
         return imageUrl;
         return imageUrl;

+ 29 - 3
src/main/java/com/iden/common/videotool/VideoTool.java

@@ -1,6 +1,7 @@
 package com.iden.common.videotool;
 package com.iden.common.videotool;
 
 
 import com.iden.common.util.DateUtils;
 import com.iden.common.util.DateUtils;
+import com.iden.common.util.FileUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 
 
 import java.io.BufferedReader;
 import java.io.BufferedReader;
@@ -8,6 +9,7 @@ import java.io.File;
 import java.io.InputStreamReader;
 import java.io.InputStreamReader;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
+import java.util.UUID;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
@@ -17,27 +19,51 @@ public class VideoTool {
      * 视频分解为图片
      * 视频分解为图片
      * @param ffmpegPath
      * @param ffmpegPath
      * @param videoFilePath
      * @param videoFilePath
-     * @param saveDir
+     * @param saveTmpDir
      * @param shootEndTime
      * @param shootEndTime
      * @return
      * @return
      * @throws Exception
      * @throws Exception
      */
      */
-    public static Long fetchAllPic(String ffmpegPath,String videoFilePath, String saveDir, Date shootEndTime) throws Exception {
+    public static Long fetchAllPic(String ffmpegPath,String videoFilePath, String saveTmpDir,String targetDir, Date shootEndTime) throws Exception {
         Long endTime = shootEndTime.getTime() ;
         Long endTime = shootEndTime.getTime() ;
 
 
         //ms
         //ms
         long duration = getVideoTime(ffmpegPath,videoFilePath) * 1000;
         long duration = getVideoTime(ffmpegPath,videoFilePath) * 1000;
 
 
+        Long beginTime = endTime - duration;
 
 
-        String cmd = ffmpegPath +  " -y -i " + videoFilePath + " -r 1 " + saveDir + "%08d.jpg";
+        //每秒多少帧
+        int framRate = 1;
+        String cmd = ffmpegPath +  " -y -i " + videoFilePath + " -r " + framRate + " " + saveTmpDir + "%08d.jpg";
 
 
         log.info("开始运行视频分解为图片命令:" + cmd);
         log.info("开始运行视频分解为图片命令:" + cmd);
         Runtime.getRuntime().exec(cmd);
         Runtime.getRuntime().exec(cmd);
         log.info("视频分解为图片完成");
         log.info("视频分解为图片完成");
 
 
+        moveFile(beginTime,saveTmpDir,targetDir,framRate);
+
         return duration;
         return duration;
     }
     }
 
 
+    private static void moveFile(Long beginTime,String saveTmpDir,String targetDir, int framRate){
+        File saveTmpDirFile = new File(saveTmpDir);
+        File[] tmpFiles = FileUtil.sortByName(saveTmpDirFile.listFiles());
+        if (tmpFiles != null && tmpFiles.length > 0) {
+            for (int i = 0; i< tmpFiles.length; i++){
+                File tmpFile = tmpFiles[i];
+                String tmpFileName =  tmpFile.getName();
+                String tmpFileExt = tmpFileName.substring(tmpFileName.lastIndexOf(".") + 1);
+                long time = beginTime + (i * (1000/framRate));
+                String tmpFileNameNew = DateUtils.formatToDateStr(new Date(time),"yyyyMMddHHmmss") + "_" + UUID.randomUUID().toString() + "." + tmpFileExt;
+                File tmpNewFile = new File(targetDir,tmpFileNameNew);
+                tmpFile.renameTo(tmpNewFile);
+            }
+
+        }
+
+    }
+
+
     /**
     /**
      * 视频剪辑
      * 视频剪辑
      * @param ffmpegPath
      * @param ffmpegPath