From 2a86d3e2e86854ac93464a1c10753c367d37111a Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Mon, 6 Jan 2020 20:36:38 -0600 Subject: [PATCH] add thread to write frames to disk --- frigate/objects.py | 4 +--- frigate/video.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/frigate/objects.py b/frigate/objects.py index d1202f6c8..6056fce31 100644 --- a/frigate/objects.py +++ b/frigate/objects.py @@ -246,9 +246,7 @@ class ObjectTracker(threading.Thread): while True: frame_time = self.camera.refined_frame_queue.get() self.match_and_update(self.camera.detected_objects[frame_time]) - # f = open(f"/debug/{str(frame_time)}.jpg", 'wb') - # f.write(self.camera.frame_with_objects(frame_time)) - # f.close() + self.camera.frame_tracked_queue.put(frame_time) def register(self, index, obj): id = f"{str(obj['frame_time'])}-{index}" diff --git a/frigate/video.py b/frigate/video.py index 4a546eb5f..95f02b3ed 100644 --- a/frigate/video.py +++ b/frigate/video.py @@ -107,6 +107,21 @@ class CameraCapture(threading.Thread): self.camera.fps.update() +class VideoWriter(threading.Thread): + def __init__(self, camera): + threading.Thread.__init__(self) + self.camera = camera + + def run(self): + prctl.set_name("VideoWriter") + while True: + frame_time = self.camera.frame_tracked_queue.get() + if len(self.camera.detected_objects[frame_time]) == 0: + continue + f = open(f"/debug/{self.camera.name}-{str(frame_time)}.jpg", 'wb') + f.write(self.camera.frame_with_objects(frame_time)) + f.close() + class Camera: def __init__(self, name, ffmpeg_config, global_objects_config, config, prepped_frame_queue, mqtt_client, mqtt_prefix): self.name = name @@ -122,6 +137,7 @@ class Camera: self.regions_in_process_lock = mp.Lock() self.finished_frame_queue = queue.Queue() self.refined_frame_queue = queue.Queue() + self.frame_tracked_queue = queue.Queue() self.ffmpeg = config.get('ffmpeg', {}) self.ffmpeg_input = get_ffmpeg_input(self.ffmpeg['input']) @@ -206,6 +222,10 @@ class Camera: self.object_tracker = ObjectTracker(self, 10) self.object_tracker.start() + # start a thread to write tracked frames to disk + self.video_writer = VideoWriter(self) + self.video_writer.start() + # start a thread to publish object scores mqtt_publisher = MqttObjectPublisher(self.mqtt_client, self.mqtt_topic_prefix, self.objects_parsed, self.detected_objects, self.best_frames) mqtt_publisher.start()