mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Added audio sensors to camera metrics and API stats (#8109)
* Added audio sensor to camera metrics and API stats * Update types.py * Update app.py
This commit is contained in:
parent
e19c0668e7
commit
e32bd4ab15
@ -163,6 +163,8 @@ class FrigateApp:
|
|||||||
"frame_queue": mp.Queue(maxsize=2),
|
"frame_queue": mp.Queue(maxsize=2),
|
||||||
"capture_process": None,
|
"capture_process": None,
|
||||||
"process": None,
|
"process": None,
|
||||||
|
"audio_rms": mp.Value("d", 0.0), # type: ignore[typeddict-item]
|
||||||
|
"audio_dBFS": mp.Value("d", 0.0), # type: ignore[typeddict-item]
|
||||||
}
|
}
|
||||||
self.ptz_metrics[camera_name] = {
|
self.ptz_metrics[camera_name] = {
|
||||||
"ptz_autotracker_enabled": mp.Value( # type: ignore[typeddict-item]
|
"ptz_autotracker_enabled": mp.Value( # type: ignore[typeddict-item]
|
||||||
@ -500,6 +502,7 @@ class FrigateApp:
|
|||||||
args=(
|
args=(
|
||||||
self.config,
|
self.config,
|
||||||
self.audio_recordings_info_queue,
|
self.audio_recordings_info_queue,
|
||||||
|
self.camera_metrics,
|
||||||
self.feature_metrics,
|
self.feature_metrics,
|
||||||
self.inter_process_communicator,
|
self.inter_process_communicator,
|
||||||
),
|
),
|
||||||
|
@ -26,7 +26,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 FeatureMetricsTypes
|
from frigate.types import CameraMetricsTypes, FeatureMetricsTypes
|
||||||
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
|
||||||
@ -52,6 +52,7 @@ def get_ffmpeg_command(input_args: list[str], input_path: str) -> list[str]:
|
|||||||
def listen_to_audio(
|
def listen_to_audio(
|
||||||
config: FrigateConfig,
|
config: FrigateConfig,
|
||||||
recordings_info_queue: mp.Queue,
|
recordings_info_queue: mp.Queue,
|
||||||
|
camera_metrics: dict[str, CameraMetricsTypes],
|
||||||
process_info: dict[str, FeatureMetricsTypes],
|
process_info: dict[str, FeatureMetricsTypes],
|
||||||
inter_process_communicator: InterProcessCommunicator,
|
inter_process_communicator: InterProcessCommunicator,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -80,6 +81,7 @@ def listen_to_audio(
|
|||||||
audio = AudioEventMaintainer(
|
audio = AudioEventMaintainer(
|
||||||
camera,
|
camera,
|
||||||
recordings_info_queue,
|
recordings_info_queue,
|
||||||
|
camera_metrics,
|
||||||
process_info,
|
process_info,
|
||||||
stop_event,
|
stop_event,
|
||||||
inter_process_communicator,
|
inter_process_communicator,
|
||||||
@ -153,6 +155,7 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
self,
|
self,
|
||||||
camera: CameraConfig,
|
camera: CameraConfig,
|
||||||
recordings_info_queue: mp.Queue,
|
recordings_info_queue: mp.Queue,
|
||||||
|
camera_metrics: dict[str, CameraMetricsTypes],
|
||||||
feature_metrics: dict[str, FeatureMetricsTypes],
|
feature_metrics: dict[str, FeatureMetricsTypes],
|
||||||
stop_event: mp.Event,
|
stop_event: mp.Event,
|
||||||
inter_process_communicator: InterProcessCommunicator,
|
inter_process_communicator: InterProcessCommunicator,
|
||||||
@ -161,6 +164,7 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
self.name = f"{camera.name}_audio_event_processor"
|
self.name = f"{camera.name}_audio_event_processor"
|
||||||
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.feature_metrics = feature_metrics
|
self.feature_metrics = feature_metrics
|
||||||
self.inter_process_communicator = inter_process_communicator
|
self.inter_process_communicator = inter_process_communicator
|
||||||
self.detections: dict[dict[str, any]] = {}
|
self.detections: dict[dict[str, any]] = {}
|
||||||
@ -184,6 +188,9 @@ class AudioEventMaintainer(threading.Thread):
|
|||||||
audio_as_float = audio.astype(np.float32)
|
audio_as_float = audio.astype(np.float32)
|
||||||
rms, dBFS = self.calculate_audio_levels(audio_as_float)
|
rms, dBFS = self.calculate_audio_levels(audio_as_float)
|
||||||
|
|
||||||
|
self.camera_metrics[self.config.name]["audio_rms"].value = rms
|
||||||
|
self.camera_metrics[self.config.name]["audio_dBFS"].value = dBFS
|
||||||
|
|
||||||
# only run audio detection when volume is above min_volume
|
# only run audio detection when volume is above min_volume
|
||||||
if rms >= self.config.audio.min_volume:
|
if rms >= self.config.audio.min_volume:
|
||||||
# add audio info to recordings queue
|
# add audio info to recordings queue
|
||||||
|
@ -266,6 +266,8 @@ def stats_snapshot(
|
|||||||
"pid": pid,
|
"pid": pid,
|
||||||
"capture_pid": cpid,
|
"capture_pid": cpid,
|
||||||
"ffmpeg_pid": ffmpeg_pid,
|
"ffmpeg_pid": ffmpeg_pid,
|
||||||
|
"audio_rms": round(camera_stats["audio_rms"].value, 4),
|
||||||
|
"audio_dBFS": round(camera_stats["audio_dBFS"].value, 4),
|
||||||
}
|
}
|
||||||
|
|
||||||
stats["detectors"] = {}
|
stats["detectors"] = {}
|
||||||
|
@ -23,6 +23,8 @@ class CameraMetricsTypes(TypedDict):
|
|||||||
process_fps: Synchronized
|
process_fps: Synchronized
|
||||||
read_start: Synchronized
|
read_start: Synchronized
|
||||||
skipped_fps: Synchronized
|
skipped_fps: Synchronized
|
||||||
|
audio_rms: Synchronized
|
||||||
|
audio_dBFS: Synchronized
|
||||||
|
|
||||||
|
|
||||||
class PTZMetricsTypes(TypedDict):
|
class PTZMetricsTypes(TypedDict):
|
||||||
|
Loading…
Reference in New Issue
Block a user