mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-04-27 17:17:40 +03:00
Add dynamic toggling
This commit is contained in:
parent
caf35ec3f4
commit
671b59d363
@ -411,13 +411,21 @@ Topic to turn review detections for a camera on or off. Expected values are `ON`
|
||||
|
||||
Topic with current state of review detections for a camera. Published values are `ON` and `OFF`.
|
||||
|
||||
### `frigate/<camera_name>/genai/set`
|
||||
### `frigate/<camera_name>/object_descriptions/set`
|
||||
|
||||
Topic to turn generative AI for a camera on or off. Expected values are `ON` and `OFF`.
|
||||
Topic to turn generative AI object descriptions for a camera on or off. Expected values are `ON` and `OFF`.
|
||||
|
||||
### `frigate/<camera_name>/genai/state`
|
||||
### `frigate/<camera_name>/object_descriptions/state`
|
||||
|
||||
Topic with current state of generative AI for a camera. Published values are `ON` and `OFF`.
|
||||
Topic with current state of generative AI object descriptions for a camera. Published values are `ON` and `OFF`.
|
||||
|
||||
### `frigate/<camera_name>/review_descriptions/set`
|
||||
|
||||
Topic to turn generative AI review descriptions for a camera on or off. Expected values are `ON` and `OFF`.
|
||||
|
||||
### `frigate/<camera_name>/review_descriptions/state`
|
||||
|
||||
Topic with current state of generative AI review descriptions for a camera. Published values are `ON` and `OFF`.
|
||||
|
||||
### `frigate/<camera_name>/birdseye/set`
|
||||
|
||||
|
||||
@ -75,7 +75,8 @@ class Dispatcher:
|
||||
"birdseye_mode": self._on_birdseye_mode_command,
|
||||
"review_alerts": self._on_alerts_command,
|
||||
"review_detections": self._on_detections_command,
|
||||
"genai": self._on_genai_command,
|
||||
"object_descriptions": self._on_object_description_command,
|
||||
"review_descriptions": self._on_review_description_command,
|
||||
}
|
||||
self._global_settings_handlers: dict[str, Callable] = {
|
||||
"notifications": self._on_global_notification_command,
|
||||
@ -752,8 +753,8 @@ class Dispatcher:
|
||||
)
|
||||
self.publish(f"{camera_name}/review_detections/state", payload, retain=True)
|
||||
|
||||
def _on_genai_command(self, camera_name: str, payload: str) -> None:
|
||||
"""Callback for GenAI topic."""
|
||||
def _on_object_description_command(self, camera_name: str, payload: str) -> None:
|
||||
"""Callback for object description topic."""
|
||||
genai_settings = self.config.cameras[camera_name].objects.genai
|
||||
|
||||
if payload == "ON":
|
||||
@ -764,15 +765,40 @@ class Dispatcher:
|
||||
return
|
||||
|
||||
if not genai_settings.enabled:
|
||||
logger.info(f"Turning on GenAI for {camera_name}")
|
||||
logger.info(f"Turning on object descriptions for {camera_name}")
|
||||
genai_settings.enabled = True
|
||||
elif payload == "OFF":
|
||||
if genai_settings.enabled:
|
||||
logger.info(f"Turning off GenAI for {camera_name}")
|
||||
logger.info(f"Turning off object descriptions for {camera_name}")
|
||||
genai_settings.enabled = False
|
||||
|
||||
self.config_updater.publish_update(
|
||||
CameraConfigUpdateTopic(CameraConfigUpdateEnum.genai, camera_name),
|
||||
genai_settings,
|
||||
)
|
||||
self.publish(f"{camera_name}/genai/state", payload, retain=True)
|
||||
self.publish(f"{camera_name}/object_descriptions/state", payload, retain=True)
|
||||
|
||||
def _on_review_description_command(self, camera_name: str, payload: str) -> None:
|
||||
"""Callback for review description topic."""
|
||||
genai_settings = self.config.cameras[camera_name].review.genai
|
||||
|
||||
if payload == "ON":
|
||||
if not self.config.cameras[camera_name].review.genai.enabled_in_config:
|
||||
logger.error(
|
||||
"GenAI Alerts or Detections must be enabled in the config to be turned on via MQTT."
|
||||
)
|
||||
return
|
||||
|
||||
if not genai_settings.enabled:
|
||||
logger.info(f"Turning on review descriptions for {camera_name}")
|
||||
genai_settings.enabled = True
|
||||
elif payload == "OFF":
|
||||
if genai_settings.enabled:
|
||||
logger.info(f"Turning off review descriptions for {camera_name}")
|
||||
genai_settings.enabled = False
|
||||
|
||||
self.config_updater.publish_update(
|
||||
CameraConfigUpdateTopic(CameraConfigUpdateEnum.genai, camera_name),
|
||||
genai_settings,
|
||||
)
|
||||
self.publish(f"{camera_name}/review_descriptions/state", payload, retain=True)
|
||||
|
||||
@ -63,6 +63,10 @@ class DetectionsConfig(FrigateBaseModel):
|
||||
|
||||
|
||||
class GenAIReviewConfig(FrigateBaseModel):
|
||||
enabled: bool | None = Field(
|
||||
default=None,
|
||||
title="Internal field to represent if the review descriptions feature is enabled.",
|
||||
)
|
||||
alerts: bool = Field(default=False, title="Enable GenAI for alerts.")
|
||||
detections: bool = Field(default=False, title="Enable GenAI for detections.")
|
||||
debug_save_thumbnails: bool = Field(
|
||||
|
||||
@ -610,10 +610,13 @@ class FrigateConfig(FrigateBaseModel):
|
||||
camera_config.objects.genai.enabled_in_config = (
|
||||
camera_config.objects.genai.enabled
|
||||
)
|
||||
camera_config.review.genai.enabled_in_config = (
|
||||
camera_config.review.genai.enabled = (
|
||||
camera_config.review.genai.alerts
|
||||
or camera_config.review.genai.detections
|
||||
)
|
||||
camera_config.review.genai.enabled_in_config = (
|
||||
camera_config.review.genai.enabled
|
||||
)
|
||||
|
||||
# Add default filters
|
||||
object_keys = camera_config.objects.track
|
||||
|
||||
@ -46,6 +46,11 @@ class ReviewDescriptionProcessor(PostProcessorApi):
|
||||
if data_type != PostProcessDataEnum.review:
|
||||
return
|
||||
|
||||
camera = data["after"]["camera"]
|
||||
|
||||
if not self.config.cameras[camera].review.genai.enabled:
|
||||
return
|
||||
|
||||
id = data["after"]["id"]
|
||||
|
||||
if data["type"] == "new" or data["type"] == "update":
|
||||
@ -91,7 +96,6 @@ class ReviewDescriptionProcessor(PostProcessorApi):
|
||||
return
|
||||
|
||||
final_data = data["after"]
|
||||
camera = final_data["camera"]
|
||||
|
||||
if (
|
||||
final_data["severity"] == "alert"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user