add config options

This commit is contained in:
Josh Hawkins 2025-05-26 07:18:31 -05:00
parent ced8198f31
commit 2c29fb4e95
4 changed files with 40 additions and 3 deletions

View File

@ -19,6 +19,7 @@ from frigate.util.builtin import (
from ..base import FrigateBaseModel from ..base import FrigateBaseModel
from ..classification import ( from ..classification import (
AudioTranscriptionConfig,
CameraFaceRecognitionConfig, CameraFaceRecognitionConfig,
CameraLicensePlateRecognitionConfig, CameraLicensePlateRecognitionConfig,
) )
@ -56,6 +57,9 @@ class CameraConfig(FrigateBaseModel):
audio: AudioConfig = Field( audio: AudioConfig = Field(
default_factory=AudioConfig, title="Audio events configuration." default_factory=AudioConfig, title="Audio events configuration."
) )
audio_transcription: AudioTranscriptionConfig = Field(
default_factory=AudioTranscriptionConfig, title="Audio transcription config."
)
birdseye: BirdseyeCameraConfig = Field( birdseye: BirdseyeCameraConfig = Field(
default_factory=BirdseyeCameraConfig, title="Birdseye camera configuration." default_factory=BirdseyeCameraConfig, title="Birdseye camera configuration."
) )

View File

@ -12,6 +12,7 @@ class CameraConfigUpdateEnum(str, Enum):
"""Supported camera config update types.""" """Supported camera config update types."""
audio = "audio" audio = "audio"
audio_transcription = "audio_transcription"
birdseye = "birdseye" birdseye = "birdseye"
detect = "detect" detect = "detect"
enabled = "enabled" enabled = "enabled"
@ -74,6 +75,8 @@ class CameraConfigUpdateSubscriber:
if update_type == CameraConfigUpdateEnum.audio: if update_type == CameraConfigUpdateEnum.audio:
config.audio = updated_config config.audio = updated_config
if update_type == CameraConfigUpdateEnum.audio_transcription:
config.audio_transcription = updated_config
elif update_type == CameraConfigUpdateEnum.birdseye: elif update_type == CameraConfigUpdateEnum.birdseye:
config.birdseye = updated_config config.birdseye = updated_config
elif update_type == CameraConfigUpdateEnum.detect: elif update_type == CameraConfigUpdateEnum.detect:

View File

@ -19,11 +19,32 @@ class SemanticSearchModelEnum(str, Enum):
jinav2 = "jinav2" jinav2 = "jinav2"
class LPRDeviceEnum(str, Enum): class EnrichmentsDeviceEnum(str, Enum):
GPU = "GPU" GPU = "GPU"
CPU = "CPU" CPU = "CPU"
class AudioTranscriptionConfig(FrigateBaseModel):
enabled: bool = Field(default=False, title="Enable audio transcription.")
language: str = Field(
default="en",
title="Language abbreviation to use for audio event transcription/translation.",
)
device: Optional[EnrichmentsDeviceEnum] = Field(
default=EnrichmentsDeviceEnum.CPU,
title="The device used for license plate recognition.",
)
model_size: str = Field(
default="small", title="The size of the embeddings model used."
)
enabled_in_config: Optional[bool] = Field(
default=None, title="Keep track of original state of camera."
)
live_enabled: Optional[bool] = Field(
default=False, title="Enable live transcriptions."
)
class BirdClassificationConfig(FrigateBaseModel): class BirdClassificationConfig(FrigateBaseModel):
enabled: bool = Field(default=False, title="Enable bird classification.") enabled: bool = Field(default=False, title="Enable bird classification.")
threshold: float = Field( threshold: float = Field(
@ -144,8 +165,8 @@ class CameraFaceRecognitionConfig(FrigateBaseModel):
class LicensePlateRecognitionConfig(FrigateBaseModel): class LicensePlateRecognitionConfig(FrigateBaseModel):
enabled: bool = Field(default=False, title="Enable license plate recognition.") enabled: bool = Field(default=False, title="Enable license plate recognition.")
device: Optional[LPRDeviceEnum] = Field( device: Optional[EnrichmentsDeviceEnum] = Field(
default=LPRDeviceEnum.CPU, default=EnrichmentsDeviceEnum.CPU,
title="The device used for license plate recognition.", title="The device used for license plate recognition.",
) )
model_size: str = Field( model_size: str = Field(

View File

@ -54,6 +54,7 @@ from .camera.snapshots import SnapshotsConfig
from .camera.timestamp import TimestampStyleConfig from .camera.timestamp import TimestampStyleConfig
from .camera_group import CameraGroupConfig from .camera_group import CameraGroupConfig
from .classification import ( from .classification import (
AudioTranscriptionConfig,
ClassificationConfig, ClassificationConfig,
FaceRecognitionConfig, FaceRecognitionConfig,
LicensePlateRecognitionConfig, LicensePlateRecognitionConfig,
@ -419,6 +420,9 @@ class FrigateConfig(FrigateBaseModel):
) )
# Classification Config # Classification Config
audio_transcription: AudioTranscriptionConfig = Field(
default_factory=AudioTranscriptionConfig, title="Audio transcription config."
)
classification: ClassificationConfig = Field( classification: ClassificationConfig = Field(
default_factory=ClassificationConfig, title="Object classification config." default_factory=ClassificationConfig, title="Object classification config."
) )
@ -472,6 +476,7 @@ class FrigateConfig(FrigateBaseModel):
global_config = self.model_dump( global_config = self.model_dump(
include={ include={
"audio": ..., "audio": ...,
"audio_transcription": ...,
"birdseye": ..., "birdseye": ...,
"face_recognition": ..., "face_recognition": ...,
"lpr": ..., "lpr": ...,
@ -528,6 +533,7 @@ class FrigateConfig(FrigateBaseModel):
allowed_fields_map = { allowed_fields_map = {
"face_recognition": ["enabled", "min_area"], "face_recognition": ["enabled", "min_area"],
"lpr": ["enabled", "expire_time", "min_area", "enhancement"], "lpr": ["enabled", "expire_time", "min_area", "enhancement"],
"audio_transcription": ["enabled", "live_enabled"],
} }
for section in allowed_fields_map: for section in allowed_fields_map:
@ -609,6 +615,9 @@ class FrigateConfig(FrigateBaseModel):
# set config pre-value # set config pre-value
camera_config.enabled_in_config = camera_config.enabled camera_config.enabled_in_config = camera_config.enabled
camera_config.audio.enabled_in_config = camera_config.audio.enabled camera_config.audio.enabled_in_config = camera_config.audio.enabled
camera_config.audio_transcription.enabled_in_config = (
camera_config.audio_transcription.enabled
)
camera_config.record.enabled_in_config = camera_config.record.enabled camera_config.record.enabled_in_config = camera_config.record.enabled
camera_config.notifications.enabled_in_config = ( camera_config.notifications.enabled_in_config = (
camera_config.notifications.enabled camera_config.notifications.enabled