From 7c82fae009c6b7f4546774fafcd633041b24b3cc Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Sat, 26 Oct 2024 12:14:21 -0600 Subject: [PATCH] Fix label check (#14610) * Create config for parsing object * Use in maintainer --- frigate/config/camera/objects.py | 19 ++++++++++++++++++- frigate/config/config.py | 9 ++------- frigate/embeddings/maintainer.py | 4 ++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/frigate/config/camera/objects.py b/frigate/config/camera/objects.py index 22cd92f1c..578f8e677 100644 --- a/frigate/config/camera/objects.py +++ b/frigate/config/camera/objects.py @@ -1,6 +1,6 @@ from typing import Any, Optional, Union -from pydantic import Field, field_serializer +from pydantic import Field, PrivateAttr, field_serializer from ..base import FrigateBaseModel @@ -53,3 +53,20 @@ class ObjectConfig(FrigateBaseModel): default_factory=dict, title="Object filters." ) mask: Union[str, list[str]] = Field(default="", title="Object mask.") + _all_objects: list[str] = PrivateAttr() + + @property + def all_objects(self) -> list[str]: + return self._all_objects + + def parse_all_objects(self, cameras): + if "_all_objects" in self: + return + + # get list of unique enabled labels for tracking + enabled_labels = set(self.track) + + for camera in cameras.values(): + enabled_labels.update(camera.objects.track) + + self._all_objects = list(enabled_labels) diff --git a/frigate/config/config.py b/frigate/config/config.py index 93458dec9..d43fb0381 100644 --- a/frigate/config/config.py +++ b/frigate/config/config.py @@ -595,13 +595,8 @@ class FrigateConfig(FrigateBaseModel): verify_autotrack_zones(camera_config) verify_motion_and_detect(camera_config) - # get list of unique enabled labels for tracking - enabled_labels = set(self.objects.track) - - for camera in self.cameras.values(): - enabled_labels.update(camera.objects.track) - - self.model.create_colormap(sorted(enabled_labels)) + self.objects.parse_all_objects(self.cameras) + self.model.create_colormap(sorted(self.objects.all_objects)) self.model.check_and_load_plus_model(self.plus_api) for key, detector in self.detectors.items(): diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index 4aa523501..00804c63f 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -65,7 +65,7 @@ class EmbeddingMaintainer(threading.Thread): # set face recognition conditions self.face_recognition_enabled = self.config.face_recognition.enabled - self.requires_face_detection = "face" not in self.config.model.all_attributes + self.requires_face_detection = "face" not in self.config.objects.all_objects self.detected_faces: dict[str, float] = {} # create communication for updating event descriptions @@ -77,7 +77,7 @@ class EmbeddingMaintainer(threading.Thread): # set license plate recognition conditions self.lpr_config = self.config.lpr self.requires_license_plate_detection = ( - "license_plate" not in self.config.model.all_attributes + "license_plate" not in self.config.objects.all_objects ) self.detected_license_plates: dict[str, dict[str, any]] = {}