From 44813519a84ce30db94b950bbdfd1d52a8c6b4e6 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Fri, 16 Feb 2024 06:43:33 -0700 Subject: [PATCH] remove audio and feature metrics --- frigate/app.py | 13 +------------ frigate/comms/dispatcher.py | 25 ++++++++++++------------- frigate/events/audio.py | 18 ++++++++++++------ frigate/record/maintainer.py | 1 - frigate/types.py | 5 ----- 5 files changed, 25 insertions(+), 37 deletions(-) diff --git a/frigate/app.py b/frigate/app.py index 5dfb0c639..08ef99256 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -57,7 +57,7 @@ from frigate.record.record import manage_recordings from frigate.stats import StatsEmitter, stats_init from frigate.storage import StorageMaintainer from frigate.timeline import TimelineProcessor -from frigate.types import CameraMetricsTypes, FeatureMetricsTypes, PTZMetricsTypes +from frigate.types import CameraMetricsTypes, PTZMetricsTypes from frigate.util.object import get_camera_regions_grid from frigate.version import VERSION from frigate.video import capture_camera, track_camera @@ -76,7 +76,6 @@ class FrigateApp: self.log_queue: Queue = mp.Queue() self.plus_api = PlusApi() self.camera_metrics: dict[str, CameraMetricsTypes] = {} - 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]]]] = {} @@ -221,14 +220,6 @@ class FrigateApp: # from mypy 0.981 onwards } self.ptz_metrics[camera_name]["ptz_motor_stopped"].set() - self.feature_metrics[camera_name] = { - "audio_enabled": mp.Value( # type: ignore[typeddict-item] - # issue https://github.com/python/typeshed/issues/8799 - # from mypy 0.981 onwards - "i", - self.config.cameras[camera_name].audio.enabled, - ), - } def set_log_levels(self) -> None: logging.getLogger().setLevel(self.config.logger.default.value.upper()) @@ -411,7 +402,6 @@ class FrigateApp: self.inter_config_updater, self.onvif_controller, self.camera_metrics, - self.feature_metrics, self.ptz_metrics, comms, ) @@ -557,7 +547,6 @@ class FrigateApp: self.config, self.audio_recordings_info_queue, self.camera_metrics, - self.feature_metrics, ), ) audio_process.daemon = True diff --git a/frigate/comms/dispatcher.py b/frigate/comms/dispatcher.py index 1be925f61..f9b2fba33 100644 --- a/frigate/comms/dispatcher.py +++ b/frigate/comms/dispatcher.py @@ -9,7 +9,7 @@ from frigate.config import BirdseyeModeEnum, FrigateConfig from frigate.const import INSERT_MANY_RECORDINGS, INSERT_PREVIEW, REQUEST_REGION_GRID from frigate.models import Previews, Recordings from frigate.ptz.onvif import OnvifCommandEnum, OnvifController -from frigate.types import CameraMetricsTypes, FeatureMetricsTypes, PTZMetricsTypes +from frigate.types import CameraMetricsTypes, PTZMetricsTypes from frigate.util.object import get_camera_regions_grid from frigate.util.services import restart_frigate @@ -44,7 +44,6 @@ class Dispatcher: config_updater: ConfigPublisher, onvif: OnvifController, camera_metrics: dict[str, CameraMetricsTypes], - feature_metrics: dict[str, FeatureMetricsTypes], ptz_metrics: dict[str, PTZMetricsTypes], communicators: list[Communicator], ) -> None: @@ -52,7 +51,6 @@ class Dispatcher: self.config_updater = config_updater self.onvif = onvif self.camera_metrics = camera_metrics - self.feature_metrics = feature_metrics self.ptz_metrics = ptz_metrics self.comms = communicators @@ -252,13 +250,14 @@ class Dispatcher: if not audio_settings.enabled: logger.info(f"Turning on audio detection for {camera_name}") audio_settings.enabled = True - self.feature_metrics[camera_name]["audio_enabled"].value = True elif payload == "OFF": - if self.feature_metrics[camera_name]["audio_enabled"].value: + if audio_settings.enabled: logger.info(f"Turning off audio detection for {camera_name}") audio_settings.enabled = False - self.feature_metrics[camera_name]["audio_enabled"].value = False + self.config_updater.publish( + f"config/audio/{camera_name}", self.config.cameras[camera_name].audio + ) self.publish(f"{camera_name}/audio/state", payload, retain=True) def _on_recordings_command(self, camera_name: str, payload: str) -> None: @@ -275,14 +274,14 @@ class Dispatcher: if not record_settings.enabled: logger.info(f"Turning on recordings for {camera_name}") record_settings.enabled = True - self.feature_metrics[camera_name]["record_enabled"].value = True elif payload == "OFF": - if self.feature_metrics[camera_name]["record_enabled"].value: + if record_settings.enabled: logger.info(f"Turning off recordings for {camera_name}") record_settings.enabled = False - self.feature_metrics[camera_name]["record_enabled"].value = False - self.config_updater.publish(f"config/record/{camera_name}", self.config.cameras[camera_name].record) + self.config_updater.publish( + f"config/record/{camera_name}", self.config.cameras[camera_name].record + ) self.publish(f"{camera_name}/recordings/state", payload, retain=True) def _on_snapshots_command(self, camera_name: str, payload: str) -> None: @@ -349,8 +348,8 @@ class Dispatcher: logger.info(f"Setting birdseye mode for {camera_name} to {new_birdseye_mode}") # update the metric (need the mode converted to an int) - self.camera_metrics[camera_name][ - "birdseye_mode" - ].value = BirdseyeModeEnum.get_index(new_birdseye_mode) + self.camera_metrics[camera_name]["birdseye_mode"].value = ( + BirdseyeModeEnum.get_index(new_birdseye_mode) + ) self.publish(f"{camera_name}/birdseye_mode/state", payload, retain=True) diff --git a/frigate/events/audio.py b/frigate/events/audio.py index a28b00e68..27498e252 100644 --- a/frigate/events/audio.py +++ b/frigate/events/audio.py @@ -13,6 +13,7 @@ import numpy as np import requests from setproctitle import setproctitle +from frigate.comms.config_updater import ConfigSubscriber from frigate.comms.inter_process import InterProcessRequestor from frigate.config import CameraConfig, CameraInput, FfmpegConfig, FrigateConfig from frigate.const import ( @@ -26,7 +27,7 @@ from frigate.const import ( from frigate.ffmpeg_presets import parse_preset_input from frigate.log import LogPipe from frigate.object_detection import load_labels -from frigate.types import CameraMetricsTypes, FeatureMetricsTypes +from frigate.types import CameraMetricsTypes from frigate.util.builtin import get_ffmpeg_arg_list from frigate.util.services import listen from frigate.video import start_or_restart_ffmpeg, stop_ffmpeg @@ -69,7 +70,6 @@ def listen_to_audio( config: FrigateConfig, recordings_info_queue: mp.Queue, camera_metrics: dict[str, CameraMetricsTypes], - process_info: dict[str, FeatureMetricsTypes], ) -> None: stop_event = mp.Event() audio_threads: list[threading.Thread] = [] @@ -97,7 +97,6 @@ def listen_to_audio( camera, recordings_info_queue, camera_metrics, - process_info, stop_event, ) audio_threads.append(audio) @@ -170,7 +169,6 @@ class AudioEventMaintainer(threading.Thread): camera: CameraConfig, recordings_info_queue: mp.Queue, camera_metrics: dict[str, CameraMetricsTypes], - feature_metrics: dict[str, FeatureMetricsTypes], stop_event: mp.Event, ) -> None: threading.Thread.__init__(self) @@ -178,7 +176,6 @@ class AudioEventMaintainer(threading.Thread): self.config = camera self.recordings_info_queue = recordings_info_queue self.camera_metrics = camera_metrics - self.feature_metrics = feature_metrics self.detections: dict[dict[str, any]] = {} self.stop_event = stop_event self.detector = AudioTfl(stop_event, self.config.audio.num_threads) @@ -191,9 +188,10 @@ class AudioEventMaintainer(threading.Thread): # create communication for audio detections self.requestor = InterProcessRequestor() + self.config_subscriber = ConfigSubscriber(f"config/audio/{camera.name}") def detect_audio(self, audio) -> None: - if not self.feature_metrics[self.config.name]["audio_enabled"].value: + if not self.config.audio.enabled: return audio_as_float = audio.astype(np.float32) @@ -339,6 +337,14 @@ class AudioEventMaintainer(threading.Thread): self.start_or_restart_ffmpeg() while not self.stop_event.is_set(): + # check if there is an updated config + updated_topic, updated_audio_config = ( + self.config_subscriber.check_for_update() + ) + + if updated_topic: + self.config.audio = updated_audio_config + self.read_audio() stop_ffmpeg(self.audio_listener, self.logger) diff --git a/frigate/record/maintainer.py b/frigate/record/maintainer.py index e9049f6f1..d3a814b9b 100644 --- a/frigate/record/maintainer.py +++ b/frigate/record/maintainer.py @@ -29,7 +29,6 @@ from frigate.const import ( RECORD_DIR, ) from frigate.models import Event, Recordings -from frigate.types import FeatureMetricsTypes from frigate.util.image import area from frigate.util.services import get_video_properties diff --git a/frigate/types.py b/frigate/types.py index 4963b13db..38ea9b8c7 100644 --- a/frigate/types.py +++ b/frigate/types.py @@ -42,11 +42,6 @@ class PTZMetricsTypes(TypedDict): ptz_min_zoom: Synchronized -class FeatureMetricsTypes(TypedDict): - audio_enabled: Synchronized - record_enabled: Synchronized - - class StatsTrackingTypes(TypedDict): camera_metrics: dict[str, CameraMetricsTypes] detectors: dict[str, ObjectDetectProcess]