diff --git a/frigate/app.py b/frigate/app.py index 436a8b115..f89a0c12f 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -70,6 +70,7 @@ class FrigateApp: self.feature_metrics: dict[str, FeatureMetricsTypes] = {} self.ptz_metrics: dict[str, PTZMetricsTypes] = {} self.processes: dict[str, int] = {} + self.region_grids: dict[str, list[list[dict[str, int]]]] = {} def set_environment_vars(self) -> None: for key, value in self.config.environment_vars.items(): @@ -453,6 +454,10 @@ class FrigateApp: output_processor.start() logger.info(f"Output process started: {output_processor.pid}") + def init_historical_regions(self) -> None: + for camera in self.config.cameras.values(): + self.region_grids[camera.name] = get_camera_regions_grid(camera) + def start_camera_processors(self) -> None: for name, config in self.config.cameras.items(): if not self.config.cameras[name].enabled: @@ -472,6 +477,7 @@ class FrigateApp: self.detected_frames_queue, self.camera_metrics[name], self.ptz_metrics[name], + self.region_grids[name], ), ) camera_process.daemon = True @@ -612,6 +618,7 @@ class FrigateApp: self.start_detectors() self.start_video_output_processor() self.start_ptz_autotracker() + self.init_historical_regions() self.start_detected_frames_processor() self.start_camera_processors() self.start_camera_capture_processes() diff --git a/frigate/util/builtin.py b/frigate/util/builtin.py index b2be64734..dd2e3471f 100644 --- a/frigate/util/builtin.py +++ b/frigate/util/builtin.py @@ -266,5 +266,4 @@ def find_by_key(dictionary, target_key): def get_tomorrow_at_2() -> datetime.datetime: tomorrow = datetime.datetime.now() + datetime.timedelta(days=1) - tomorrow.replace(hour=2, minute=0, second=0) - return tomorrow + return tomorrow.replace(hour=2, minute=0, second=0) diff --git a/frigate/util/object.py b/frigate/util/object.py index ddfe4d276..b6496a5d0 100644 --- a/frigate/util/object.py +++ b/frigate/util/object.py @@ -52,6 +52,7 @@ def get_camera_regions_grid( .where(Event.start_time > last_update) ) valid_event_ids = [e["id"] for e in events.dicts()] + logger.debug(f"Found {len(valid_event_ids)} new events for {name}") # no new events, return as is if not valid_event_ids: @@ -71,6 +72,8 @@ def get_camera_regions_grid( .dicts() ) + logger.debug(f"Found {len(timeline)} new entries for {name}") + width = detect.width height = detect.height @@ -106,9 +109,6 @@ def get_camera_regions_grid( for x in range(GRID_SIZE): for y in range(GRID_SIZE): cell = grid[x][y] - logger.debug( - f"stats for cell {x * grid_coef * width},{y * grid_coef * height} -> {(x + 1) * grid_coef * width},{(y + 1) * grid_coef * height} :: {len(cell['sizes'])} objects" - ) if len(cell["sizes"]) == 0: continue diff --git a/frigate/video.py b/frigate/video.py index 298502592..0e61f87a1 100755 --- a/frigate/video.py +++ b/frigate/video.py @@ -32,7 +32,6 @@ from frigate.util.image import ( from frigate.util.object import ( box_inside, create_tensor_input, - get_camera_regions_grid, get_cluster_candidates, get_cluster_region, get_cluster_region_from_grid, @@ -383,6 +382,7 @@ def track_camera( detected_objects_queue, process_info, ptz_metrics, + region_grid, ): stop_event = mp.Event() @@ -423,8 +423,6 @@ def track_camera( frame_manager = SharedMemoryFrameManager() - region_grid = get_camera_regions_grid(config.name, config.detect) - process_frames( name, frame_queue, @@ -528,7 +526,7 @@ def process_frames( while not stop_event.is_set(): if datetime.datetime.now() > next_region_update: - region_grid = get_camera_regions_grid(camera_name, detect_config) + # TODO signal update next_region_update = get_tomorrow_at_2() try: