mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-09 04:35:25 +03:00
remove audio and feature metrics
This commit is contained in:
parent
e3dc23a520
commit
6374b06c3f
@ -57,7 +57,7 @@ from frigate.record.record import manage_recordings
|
|||||||
from frigate.stats import StatsEmitter, stats_init
|
from frigate.stats import StatsEmitter, stats_init
|
||||||
from frigate.storage import StorageMaintainer
|
from frigate.storage import StorageMaintainer
|
||||||
from frigate.timeline import TimelineProcessor
|
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.util.object import get_camera_regions_grid
|
||||||
from frigate.version import VERSION
|
from frigate.version import VERSION
|
||||||
from frigate.video import capture_camera, track_camera
|
from frigate.video import capture_camera, track_camera
|
||||||
@ -76,7 +76,6 @@ class FrigateApp:
|
|||||||
self.log_queue: Queue = mp.Queue()
|
self.log_queue: Queue = mp.Queue()
|
||||||
self.plus_api = PlusApi()
|
self.plus_api = PlusApi()
|
||||||
self.camera_metrics: dict[str, CameraMetricsTypes] = {}
|
self.camera_metrics: dict[str, CameraMetricsTypes] = {}
|
||||||
self.feature_metrics: dict[str, FeatureMetricsTypes] = {}
|
|
||||||
self.ptz_metrics: dict[str, PTZMetricsTypes] = {}
|
self.ptz_metrics: dict[str, PTZMetricsTypes] = {}
|
||||||
self.processes: dict[str, int] = {}
|
self.processes: dict[str, int] = {}
|
||||||
self.region_grids: dict[str, list[list[dict[str, int]]]] = {}
|
self.region_grids: dict[str, list[list[dict[str, int]]]] = {}
|
||||||
@ -221,14 +220,6 @@ class FrigateApp:
|
|||||||
# from mypy 0.981 onwards
|
# from mypy 0.981 onwards
|
||||||
}
|
}
|
||||||
self.ptz_metrics[camera_name]["ptz_motor_stopped"].set()
|
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:
|
def set_log_levels(self) -> None:
|
||||||
logging.getLogger().setLevel(self.config.logger.default.value.upper())
|
logging.getLogger().setLevel(self.config.logger.default.value.upper())
|
||||||
@ -411,7 +402,6 @@ class FrigateApp:
|
|||||||
self.inter_config_updater,
|
self.inter_config_updater,
|
||||||
self.onvif_controller,
|
self.onvif_controller,
|
||||||
self.camera_metrics,
|
self.camera_metrics,
|
||||||
self.feature_metrics,
|
|
||||||
self.ptz_metrics,
|
self.ptz_metrics,
|
||||||
comms,
|
comms,
|
||||||
)
|
)
|
||||||
@ -557,7 +547,6 @@ class FrigateApp:
|
|||||||
self.config,
|
self.config,
|
||||||
self.audio_recordings_info_queue,
|
self.audio_recordings_info_queue,
|
||||||
self.camera_metrics,
|
self.camera_metrics,
|
||||||
self.feature_metrics,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
audio_process.daemon = True
|
audio_process.daemon = True
|
||||||
|
|||||||
@ -9,7 +9,7 @@ from frigate.config import BirdseyeModeEnum, FrigateConfig
|
|||||||
from frigate.const import INSERT_MANY_RECORDINGS, INSERT_PREVIEW, REQUEST_REGION_GRID
|
from frigate.const import INSERT_MANY_RECORDINGS, INSERT_PREVIEW, REQUEST_REGION_GRID
|
||||||
from frigate.models import Previews, Recordings
|
from frigate.models import Previews, Recordings
|
||||||
from frigate.ptz.onvif import OnvifCommandEnum, OnvifController
|
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.object import get_camera_regions_grid
|
||||||
from frigate.util.services import restart_frigate
|
from frigate.util.services import restart_frigate
|
||||||
|
|
||||||
@ -44,7 +44,6 @@ class Dispatcher:
|
|||||||
config_updater: ConfigPublisher,
|
config_updater: ConfigPublisher,
|
||||||
onvif: OnvifController,
|
onvif: OnvifController,
|
||||||
camera_metrics: dict[str, CameraMetricsTypes],
|
camera_metrics: dict[str, CameraMetricsTypes],
|
||||||
feature_metrics: dict[str, FeatureMetricsTypes],
|
|
||||||
ptz_metrics: dict[str, PTZMetricsTypes],
|
ptz_metrics: dict[str, PTZMetricsTypes],
|
||||||
communicators: list[Communicator],
|
communicators: list[Communicator],
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -52,7 +51,6 @@ class Dispatcher:
|
|||||||
self.config_updater = config_updater
|
self.config_updater = config_updater
|
||||||
self.onvif = onvif
|
self.onvif = onvif
|
||||||
self.camera_metrics = camera_metrics
|
self.camera_metrics = camera_metrics
|
||||||
self.feature_metrics = feature_metrics
|
|
||||||
self.ptz_metrics = ptz_metrics
|
self.ptz_metrics = ptz_metrics
|
||||||
self.comms = communicators
|
self.comms = communicators
|
||||||
|
|
||||||
@ -252,13 +250,14 @@ class Dispatcher:
|
|||||||
if not audio_settings.enabled:
|
if not audio_settings.enabled:
|
||||||
logger.info(f"Turning on audio detection for {camera_name}")
|
logger.info(f"Turning on audio detection for {camera_name}")
|
||||||
audio_settings.enabled = True
|
audio_settings.enabled = True
|
||||||
self.feature_metrics[camera_name]["audio_enabled"].value = True
|
|
||||||
elif payload == "OFF":
|
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}")
|
logger.info(f"Turning off audio detection for {camera_name}")
|
||||||
audio_settings.enabled = False
|
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)
|
self.publish(f"{camera_name}/audio/state", payload, retain=True)
|
||||||
|
|
||||||
def _on_recordings_command(self, camera_name: str, payload: str) -> None:
|
def _on_recordings_command(self, camera_name: str, payload: str) -> None:
|
||||||
@ -275,14 +274,14 @@ class Dispatcher:
|
|||||||
if not record_settings.enabled:
|
if not record_settings.enabled:
|
||||||
logger.info(f"Turning on recordings for {camera_name}")
|
logger.info(f"Turning on recordings for {camera_name}")
|
||||||
record_settings.enabled = True
|
record_settings.enabled = True
|
||||||
self.feature_metrics[camera_name]["record_enabled"].value = True
|
|
||||||
elif payload == "OFF":
|
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}")
|
logger.info(f"Turning off recordings for {camera_name}")
|
||||||
record_settings.enabled = False
|
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)
|
self.publish(f"{camera_name}/recordings/state", payload, retain=True)
|
||||||
|
|
||||||
def _on_snapshots_command(self, camera_name: str, payload: str) -> None:
|
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}")
|
logger.info(f"Setting birdseye mode for {camera_name} to {new_birdseye_mode}")
|
||||||
|
|
||||||
# update the metric (need the mode converted to an int)
|
# update the metric (need the mode converted to an int)
|
||||||
self.camera_metrics[camera_name][
|
self.camera_metrics[camera_name]["birdseye_mode"].value = (
|
||||||
"birdseye_mode"
|
BirdseyeModeEnum.get_index(new_birdseye_mode)
|
||||||
].value = BirdseyeModeEnum.get_index(new_birdseye_mode)
|
)
|
||||||
|
|
||||||
self.publish(f"{camera_name}/birdseye_mode/state", payload, retain=True)
|
self.publish(f"{camera_name}/birdseye_mode/state", payload, retain=True)
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import numpy as np
|
|||||||
import requests
|
import requests
|
||||||
from setproctitle import setproctitle
|
from setproctitle import setproctitle
|
||||||
|
|
||||||
|
from frigate.comms.config_updater import ConfigSubscriber
|
||||||
from frigate.comms.inter_process import InterProcessRequestor
|
from frigate.comms.inter_process import InterProcessRequestor
|
||||||
from frigate.config import CameraConfig, CameraInput, FfmpegConfig, FrigateConfig
|
from frigate.config import CameraConfig, CameraInput, FfmpegConfig, FrigateConfig
|
||||||
from frigate.const import (
|
from frigate.const import (
|
||||||
@ -26,7 +27,7 @@ from frigate.const import (
|
|||||||
from frigate.ffmpeg_presets import parse_preset_input
|
from frigate.ffmpeg_presets import parse_preset_input
|
||||||
from frigate.log import LogPipe
|
from frigate.log import LogPipe
|
||||||
from frigate.object_detection import load_labels
|
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.builtin import get_ffmpeg_arg_list
|
||||||
from frigate.util.services import listen
|
from frigate.util.services import listen
|
||||||
from frigate.video import start_or_restart_ffmpeg, stop_ffmpeg
|
from frigate.video import start_or_restart_ffmpeg, stop_ffmpeg
|
||||||
@ -69,7 +70,6 @@ def listen_to_audio(
|
|||||||
config: FrigateConfig,
|
config: FrigateConfig,
|
||||||
recordings_info_queue: mp.Queue,
|
recordings_info_queue: mp.Queue,
|
||||||
camera_metrics: dict[str, CameraMetricsTypes],
|
camera_metrics: dict[str, CameraMetricsTypes],
|
||||||
process_info: dict[str, FeatureMetricsTypes],
|
|
||||||
) -> None:
|
) -> None:
|
||||||
stop_event = mp.Event()
|
stop_event = mp.Event()
|
||||||
audio_threads: list[threading.Thread] = []
|
audio_threads: list[threading.Thread] = []
|
||||||
@ -97,7 +97,6 @@ def listen_to_audio(
|
|||||||
camera,
|
camera,
|
||||||
recordings_info_queue,
|
recordings_info_queue,
|
||||||
camera_metrics,
|
camera_metrics,
|
||||||
process_info,
|
|
||||||
stop_event,
|
stop_event,
|
||||||
)
|
)
|
||||||
audio_threads.append(audio)
|
audio_threads.append(audio)
|
||||||
@ -170,7 +169,6 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
camera: CameraConfig,
|
camera: CameraConfig,
|
||||||
recordings_info_queue: mp.Queue,
|
recordings_info_queue: mp.Queue,
|
||||||
camera_metrics: dict[str, CameraMetricsTypes],
|
camera_metrics: dict[str, CameraMetricsTypes],
|
||||||
feature_metrics: dict[str, FeatureMetricsTypes],
|
|
||||||
stop_event: mp.Event,
|
stop_event: mp.Event,
|
||||||
) -> None:
|
) -> None:
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
@ -178,7 +176,6 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
self.config = camera
|
self.config = camera
|
||||||
self.recordings_info_queue = recordings_info_queue
|
self.recordings_info_queue = recordings_info_queue
|
||||||
self.camera_metrics = camera_metrics
|
self.camera_metrics = camera_metrics
|
||||||
self.feature_metrics = feature_metrics
|
|
||||||
self.detections: dict[dict[str, any]] = {}
|
self.detections: dict[dict[str, any]] = {}
|
||||||
self.stop_event = stop_event
|
self.stop_event = stop_event
|
||||||
self.detector = AudioTfl(stop_event, self.config.audio.num_threads)
|
self.detector = AudioTfl(stop_event, self.config.audio.num_threads)
|
||||||
@ -191,9 +188,10 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
|
|
||||||
# create communication for audio detections
|
# create communication for audio detections
|
||||||
self.requestor = InterProcessRequestor()
|
self.requestor = InterProcessRequestor()
|
||||||
|
self.config_subscriber = ConfigSubscriber(f"config/audio/{camera.name}")
|
||||||
|
|
||||||
def detect_audio(self, audio) -> None:
|
def detect_audio(self, audio) -> None:
|
||||||
if not self.feature_metrics[self.config.name]["audio_enabled"].value:
|
if not self.config.audio.enabled:
|
||||||
return
|
return
|
||||||
|
|
||||||
audio_as_float = audio.astype(np.float32)
|
audio_as_float = audio.astype(np.float32)
|
||||||
@ -339,6 +337,14 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
self.start_or_restart_ffmpeg()
|
self.start_or_restart_ffmpeg()
|
||||||
|
|
||||||
while not self.stop_event.is_set():
|
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()
|
self.read_audio()
|
||||||
|
|
||||||
stop_ffmpeg(self.audio_listener, self.logger)
|
stop_ffmpeg(self.audio_listener, self.logger)
|
||||||
|
|||||||
@ -29,7 +29,6 @@ from frigate.const import (
|
|||||||
RECORD_DIR,
|
RECORD_DIR,
|
||||||
)
|
)
|
||||||
from frigate.models import Event, Recordings
|
from frigate.models import Event, Recordings
|
||||||
from frigate.types import FeatureMetricsTypes
|
|
||||||
from frigate.util.image import area
|
from frigate.util.image import area
|
||||||
from frigate.util.services import get_video_properties
|
from frigate.util.services import get_video_properties
|
||||||
|
|
||||||
|
|||||||
@ -42,11 +42,6 @@ class PTZMetricsTypes(TypedDict):
|
|||||||
ptz_min_zoom: Synchronized
|
ptz_min_zoom: Synchronized
|
||||||
|
|
||||||
|
|
||||||
class FeatureMetricsTypes(TypedDict):
|
|
||||||
audio_enabled: Synchronized
|
|
||||||
record_enabled: Synchronized
|
|
||||||
|
|
||||||
|
|
||||||
class StatsTrackingTypes(TypedDict):
|
class StatsTrackingTypes(TypedDict):
|
||||||
camera_metrics: dict[str, CameraMetricsTypes]
|
camera_metrics: dict[str, CameraMetricsTypes]
|
||||||
detectors: dict[str, ObjectDetectProcess]
|
detectors: dict[str, ObjectDetectProcess]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user