소스 검색

视频处理

suntianwu 3 년 전
부모
커밋
54b5547a28

+ 6 - 2
src/main/java/com/iden/bms/face/FaceIdenService.java

@@ -89,13 +89,16 @@ public class FaceIdenService {
                 imgPersonFiles = imgPersonFileList.toArray(imgPersonFiles);
                 logger.info("FaceIdenService.handleCameraImage 2...");
                 FaceMonitor faceMonitorPerson = null;
+                if(imgPersonFiles.length > 0){
+                    faceMonitorPerson = FaceIdenTool.initFaceMonitor(idenRoot,imgPersonFiles);
+                }
 
                 try {
                     for (File cameraCodedir : cameraCodeDirs) {
                         if (cameraCodedir.isDirectory()) {
                             File[] imgFiles = FileUtil.sortByName(cameraCodedir.listFiles());
                             if (imgFiles != null && imgFiles.length > 0) {
-                                faceMonitorPerson = FaceIdenTool.initFaceMonitor(idenRoot,imgPersonFiles);
+
                                 String cameraCode = cameraCodedir.getName();
                                 QueryWrapper<IdenCamera> queryWrapper = new QueryWrapper<>();
                                 queryWrapper.lambda().eq(IdenCamera::getCode, cameraCode);
@@ -103,6 +106,7 @@ public class FaceIdenService {
                                 if (idenCamera == null) {
                                     continue;
                                 }
+
                                 logger.info("FaceIdenService.handleCameraImage 3...");
                                 //获取特征码
                                 FaceModel[] faceModels = FaceIdenTool.extractFeature(idenRoot, imgFiles);
@@ -165,7 +169,7 @@ public class FaceIdenService {
                                     idenFaceImage.setImage(fileUrl + "camera/image/" + cameraCode + "/" + finalImgFile.getName());
 
                                     //和人员图像库比对特征码,关联personId
-                                    if (faceModels[i] != null) {
+                                    if (faceModels[i] != null && faceMonitorPerson != null) {
 
                                         FaceRetrieveResultVO faceRetrieveResultVO = FaceIdenTool.getHitResult(faceMonitorPerson, faceModels[i]);
                                         if (faceRetrieveResultVO != null) {

+ 5 - 0
src/main/java/com/iden/bms/face/FaceIdenTool.java

@@ -37,6 +37,11 @@ public class FaceIdenTool {
             }
         }
 
+        if(faceTestImageList.isEmpty()){
+            faceMonitor.releaseEngine();
+            faceMonitor = null;
+            return null;
+        }
         FaceModel[] faceModels = faceMonitor.extractFeature(faceTestImageList);
         //加载人脸特征库
         if (faceModels != null && faceModels.length > 0) {

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

@@ -88,6 +88,7 @@ public class TraceService {
      * @return
      */
     public List<TraceVO> listUploadImagesTrace(String imageNames, String beginDate, String endDate, UserLoginedConvertVO loginUser) {
+        List<TraceVO> result = new ArrayList<>();
         Date dateBegin = null;
         if(StringUtils.isNotEmpty(beginDate)){
             dateBegin  = DateUtils.strToDate(beginDate,"yyyyMMdd");
@@ -115,9 +116,12 @@ public class TraceService {
         //初始化引擎,加载摄像头上传的在时间段内的图像人脸特征库
         File cameraImageDirFile = new File(idenRoot + "data/final/camera/image");
         File[] cameraImageFiles = getCameraImageFiles(cameraImageDirFile,dateBegin,dateEnd);
+        if(cameraImageFiles == null || cameraImageFiles.length == 0){
+            return result;
+        }
+
         FaceMonitor faceMonitorCamera = FaceIdenTool.initFaceMonitor(idenRoot,cameraImageFiles);
 
-        List<TraceVO> result = new ArrayList<>();
         for(FaceModel faceModel : faceModels) {
             FaceRetrieveResultVO faceRetrieveResultVO = FaceIdenTool.getHitResult(faceMonitorCamera,faceModel);
            if (faceRetrieveResultVO != null) {

+ 8 - 6
src/main/java/com/iden/common/util/VideoUtil.java

@@ -219,21 +219,23 @@ public class VideoUtil {
         System.out.println("ImageHeight:" + grabber.getImageHeight());
         System.out.println("AudioChannels:" + grabber.getAudioChannels());
         System.out.println("Format:" + grabber.getFormat());
-        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile,  grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());
+        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile,  grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());
         recorder.setFrameRate(grabber.getFrameRate());
-//					recorder.setAudioBitrate(grabber.getAudioBitrate());
-//					recorder.setSampleRate(grabber.getSampleRate());
+					recorder.setAudioBitrate(grabber.getAudioBitrate());
+				recorder.setSampleRate(grabber.getSampleRate());
 //					recorder.setGopSize(2);
-        recorder.setFormat( grabber.getFormat());
-      //  recorder.setAudioCodecName("aac");
+        recorder.setFormat(grabber.getFormat());
+    //    recorder.setAudioCodecName("aac");
         recorder.setVideoCodec(grabber.getVideoCodec());
+        recorder.start();
         Frame frame = null;
         //如果想截取规定时间段视频 请看系列文章二
         while (isStart) {
             frame = grabber.grabFrame();
-            if (frame != null && frame.image != null) {
+            if(frame != null){
                 recorder.record(frame);
             }
+
         }
         recorder.stop();
         recorder.release();