mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
c3b313a70d
* Initial audio classification model implementation * fix mypy * Keep audio labelmap local * Cleanup * Start adding config for audio * Add the detector * Add audio detection process keypoints * Build out base config * Load labelmap correctly * Fix config bugs * Start audio process * Fix startup issues * Try to cleanup restarting * Add ffmpeg input args * Get audio detection working * Save event to db * End events if not heard for 30 seconds * Use not heard config * Stop ffmpeg when shutting down * Fixes * End events correctly * Use api instead of event queue to save audio events * Get events working * Close threads when stop event is sent * remove unused * Only start audio process if at least one camera is enabled * Add const for float * Cleanup labelmap * Add audio icon in frontend * Add ability to toggle audio with mqtt * Set initial audio value * Fix audio enabling * Close logpipe * Isort * Formatting * Fix web tests * Fix web tests * Handle cases where args are a string * Remove log * Cleanup process close * Use correct field * Simplify if statement * Use var for localhost * Add audio detectors docs * Add restream docs to mention audio detection * Add full config docs * Fix links to other docs --------- Co-authored-by: Jason Hunter <hunterjm@gmail.com>
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
"""Run recording maintainer and cleanup."""
|
|
|
|
import logging
|
|
import multiprocessing as mp
|
|
import signal
|
|
import threading
|
|
from types import FrameType
|
|
from typing import Optional
|
|
|
|
from playhouse.sqliteq import SqliteQueueDatabase
|
|
from setproctitle import setproctitle
|
|
|
|
from frigate.config import FrigateConfig
|
|
from frigate.models import Event, Recordings, RecordingsToDelete, Timeline
|
|
from frigate.record.cleanup import RecordingCleanup
|
|
from frigate.record.maintainer import RecordingMaintainer
|
|
from frigate.types import FeatureMetricsTypes
|
|
from frigate.util import listen
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def manage_recordings(
|
|
config: FrigateConfig,
|
|
recordings_info_queue: mp.Queue,
|
|
process_info: dict[str, FeatureMetricsTypes],
|
|
) -> None:
|
|
stop_event = mp.Event()
|
|
|
|
def receiveSignal(signalNumber: int, frame: Optional[FrameType]) -> None:
|
|
stop_event.set()
|
|
|
|
signal.signal(signal.SIGTERM, receiveSignal)
|
|
signal.signal(signal.SIGINT, receiveSignal)
|
|
|
|
threading.current_thread().name = "process:recording_manager"
|
|
setproctitle("frigate.recording_manager")
|
|
listen()
|
|
|
|
db = SqliteQueueDatabase(
|
|
config.database.path,
|
|
pragmas={
|
|
"auto_vacuum": "FULL", # Does not defragment database
|
|
"cache_size": -512 * 1000, # 512MB of cache
|
|
"synchronous": "NORMAL", # Safe when using WAL https://www.sqlite.org/pragma.html#pragma_synchronous
|
|
},
|
|
timeout=60,
|
|
)
|
|
models = [Event, Recordings, Timeline, RecordingsToDelete]
|
|
db.bind(models)
|
|
|
|
maintainer = RecordingMaintainer(
|
|
config, recordings_info_queue, process_info, stop_event
|
|
)
|
|
maintainer.start()
|
|
|
|
cleanup = RecordingCleanup(config, stop_event)
|
|
cleanup.start()
|