wyyay пре 2 година
родитељ
комит
859db278e7

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

@@ -0,0 +1,50 @@
+package com.iden.bms.schedule;
+
+
+import com.iden.bms.service.FaceIdenService;
+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 FaceIdenSchedule {
+
+    @Resource
+    private FaceIdenService faceIdenService;
+    @Resource
+    private RedisUtil redisUtil;
+
+    /**
+     * 处理摄像头上传的图像
+     */
+    @Async
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void handleCameraImage() {
+        String key = RedisKeyConstant.HANDLE_CAMERA_IMAGE;
+        String requestId = UUID.randomUUID().toString();
+        boolean result = redisUtil.tryLock(key,requestId,10 * 60);
+        try {
+            if (result) {
+                faceIdenService.handleCameraImage();
+            }
+        } catch (Exception e) {
+            e.getMessage();
+        }  finally {
+            redisUtil.releaseLock(key,requestId);
+        }
+    }
+
+
+}

+ 56 - 0
src/main/java/com/iden/bms/schedule/StreamSchedule.java

@@ -0,0 +1,56 @@
+package com.iden.bms.schedule;
+
+/**
+ * @author wyy
+ * @subject
+ * @creat 2023/2/18
+ */
+
+import com.iden.bms.service.StreamService;
+import com.iden.common.cache.RedisKeyConstant;
+import com.iden.common.cache.RedisUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+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 StreamSchedule {
+    @Resource
+    private RedisUtil redisUtil;
+    @Resource
+    private StreamService streamService;
+    private static final Logger logger = LogManager.getLogger(StreamSchedule.class);
+    /**
+     * 处理摄像头上传的视频
+     */
+    @Async
+    @Scheduled(cron = "30 1/3 * * * ?")
+    public void handleVideoStream() {
+        logger.info("StreamSchedule.handleStreamVideo start----------" );
+        String key = RedisKeyConstant.HANDLE_VIDEO_STREAM;
+        String requestId = UUID.randomUUID().toString();
+        boolean result = redisUtil.tryLock(key,requestId,10 * 60);
+        try {
+            if (result) {
+                logger.info("StreamSchedule.handleVideoStream start----------result=="+result );
+                streamService.transferVideo();
+            }
+        } 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);
+        }
+
+    }
+
+
+}

+ 61 - 0
src/main/java/com/iden/bms/service/StreamService.java

@@ -0,0 +1,61 @@
+package com.iden.bms.service;
+
+import com.iden.common.util.FileUtil;
+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 java.io.File;
+
+/**
+ * @author wyy
+ * @subject
+ * @creat 2023/2/18
+ */
+@Service
+public class StreamService {
+    @Value("${iden.root:#{null}}")
+    private String idenRoot;
+
+    @Value("${stream.root:#{null}}")
+    private String streamRoot;
+    private  final Logger logger = LogManager.getLogger(StreamService.class);
+
+    public void transferVideo(){
+        logger.info("StreamService.transferVideo-----------start");
+        //将视频从流媒体同步到schedule目录
+        File flowVideoDirFile = new File(streamRoot);//流媒体存放视频路径
+        if (flowVideoDirFile.isDirectory()) {
+            File[] flowCodeDirs = flowVideoDirFile.listFiles();
+            if (flowCodeDirs != null && flowCodeDirs.length > 0) {
+                for (File flowCodedir : flowCodeDirs) {
+                    if (flowCodedir.isDirectory()) {
+                        File[] flowVideoFiles = FileUtil.sortByName(flowCodedir.listFiles());
+                        if (flowVideoFiles != null && flowVideoFiles.length > 0) {
+                            for (File flowVideoFile : flowVideoFiles) {
+                                long beginLength = flowVideoFile.length();
+                                File targetVideoDir = new File(idenRoot+"data/origin/camera/video/"+flowCodedir.getName());//iden-schedule存放路径
+                                logger.info("StreamService.handleVideo ...flowCodedir.getName() == " + flowCodedir.getName());
+                                if (!targetVideoDir.exists()) {
+                                    targetVideoDir.mkdirs();
+                                }
+                                logger.info("targetVideoDir.getAbsolutePath()-------------"+targetVideoDir.getAbsolutePath());
+                                File targetVideoFile = new File(targetVideoDir,flowVideoFile.getName());
+                                if(beginLength!=flowVideoFile.length()){
+                                    continue;
+                                }else{
+                                    flowVideoFile.renameTo(targetVideoFile);//把视频文件移动到最终目录
+                                    logger.info("视频文件移动完毕----");
+                                }
+
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        logger.info("StreamService.transferVideo------ -----end");
+    }
+}
+

+ 2 - 0
src/main/java/com/iden/common/cache/RedisKeyConstant.java

@@ -18,6 +18,8 @@ public class RedisKeyConstant {
 
     public static final String HANDLE_CAMERA_IMAGE = "HANDLE:CAMERA_IMAGE";
     public static final String HANDLE_CAMERA_VIDEO = "HANDLE:CAMERA_VIDEO";
+    public static final String HANDLE_CAMERA_FTP = "HANDLE:CAMERA_FTP";
+    public static final String HANDLE_VIDEO_STREAM = "HANDLE:VIDEO_STREAM";
     public static final String HANDLE_KEYNOTE_WARNING = "HANDLE:KEYNOTE_WARNING";
     public static final String HANDLE_DAY_WARNING = "HANDLE:DAY_WARNING";
 

+ 3 - 2
src/main/resources/application-dev.properties

@@ -20,7 +20,7 @@ logging.level.com.face=info
 spring.redis.host=124.70.58.209
 spring.redis.port=7001
 spring.redis.database=0
-spring.redis.timeout=500
+spring.redis.timeout=5000
 spring.redis.password=106@qwe123
 ## redis jedis pool setting
 spring.redis.jedis.pool.max-active=20
@@ -33,7 +33,8 @@ spring.redis.jedis.pool.min-idle=5
 iden.root=/data/iden/
 #文件访问http前缀
 file.url=http://124.70.58.209:17778/
-
+#流媒体服务目录
+stream.root=/opt/streams/record/flv/
 ##是否初始化加载人脸识别库,是:1,不:0
 init.face.dataset=1
 

+ 2 - 1
src/main/resources/application-prod.properties

@@ -36,7 +36,8 @@ spring.redis.jedis.pool.min-idle=5
 iden.root=/data/iden/
 #图像访问http前缀
 file.url=http://124.70.58.209:17778/
-
+#流媒体服务目录
+stream.root=/opt/streams/record/flv/
 ##是否初始化加载人脸识别库,是:1,不:0
 init.face.dataset=1