From c6f21527c1211bfe7347dd4ddd22bd4c9aa79add Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Tue, 28 Oct 2025 14:36:25 -0500 Subject: [PATCH] add backend trigger actions --- .../data_processing/post/semantic_trigger.py | 40 ++++++++++++++++++- frigate/embeddings/maintainer.py | 1 + 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/frigate/data_processing/post/semantic_trigger.py b/frigate/data_processing/post/semantic_trigger.py index db1aff751..40eed0c10 100644 --- a/frigate/data_processing/post/semantic_trigger.py +++ b/frigate/data_processing/post/semantic_trigger.py @@ -10,6 +10,10 @@ import cv2 import numpy as np from peewee import DoesNotExist +from frigate.comms.event_metadata_updater import ( + EventMetadataPublisher, + EventMetadataTypeEnum, +) from frigate.comms.inter_process import InterProcessRequestor from frigate.config import FrigateConfig from frigate.const import CONFIG_DIR @@ -34,6 +38,7 @@ class SemanticTriggerProcessor(PostProcessorApi): db: SqliteVecQueueDatabase, config: FrigateConfig, requestor: InterProcessRequestor, + sub_label_publisher: EventMetadataPublisher, metrics: DataProcessorMetrics, embeddings, ): @@ -41,6 +46,7 @@ class SemanticTriggerProcessor(PostProcessorApi): self.db = db self.embeddings = embeddings self.requestor = requestor + self.sub_label_publisher = sub_label_publisher self.trigger_embeddings: list[np.ndarray] = [] self.thumb_stats = ZScoreNormalization() @@ -184,14 +190,44 @@ class SemanticTriggerProcessor(PostProcessorApi): ), ) + friendly_name = ( + self.config.cameras[camera] + .semantic_search.triggers[trigger["name"]] + .friendly_name + ) + if ( self.config.cameras[camera] .semantic_search.triggers[trigger["name"]] .actions ): - # TODO: handle actions for the trigger + # handle actions for the trigger # notifications already handled by webpush - pass + if ( + "sub_label" + in self.config.cameras[camera] + .semantic_search.triggers[trigger["name"]] + .actions + ): + self.sub_label_publisher.publish( + (event_id, friendly_name, similarity), + EventMetadataTypeEnum.sub_label, + ) + if ( + "attribute" + in self.config.cameras[camera] + .semantic_search.triggers[trigger["name"]] + .actions + ): + self.sub_label_publisher.publish( + ( + event_id, + trigger["name"], + trigger["type"], + similarity, + ), + EventMetadataTypeEnum.attribute.value, + ) if WRITE_DEBUG_IMAGES: try: diff --git a/frigate/embeddings/maintainer.py b/frigate/embeddings/maintainer.py index fe04d8b17..10895d592 100644 --- a/frigate/embeddings/maintainer.py +++ b/frigate/embeddings/maintainer.py @@ -233,6 +233,7 @@ class EmbeddingMaintainer(threading.Thread): db, self.config, self.requestor, + self.event_metadata_publisher, metrics, self.embeddings, )