mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-09 04:35:25 +03:00
Create main manager for review segments
This commit is contained in:
parent
db73ce4f8d
commit
6b551ca073
@ -45,6 +45,7 @@ from frigate.models import (
|
|||||||
Recordings,
|
Recordings,
|
||||||
RecordingsToDelete,
|
RecordingsToDelete,
|
||||||
Regions,
|
Regions,
|
||||||
|
ReviewSegment,
|
||||||
Timeline,
|
Timeline,
|
||||||
)
|
)
|
||||||
from frigate.object_detection import ObjectDetectProcess
|
from frigate.object_detection import ObjectDetectProcess
|
||||||
@ -55,6 +56,7 @@ from frigate.ptz.autotrack import PtzAutoTrackerThread
|
|||||||
from frigate.ptz.onvif import OnvifController
|
from frigate.ptz.onvif import OnvifController
|
||||||
from frigate.record.cleanup import RecordingCleanup
|
from frigate.record.cleanup import RecordingCleanup
|
||||||
from frigate.record.record import manage_recordings
|
from frigate.record.record import manage_recordings
|
||||||
|
from frigate.review.review import manage_review_segments
|
||||||
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
|
||||||
@ -283,6 +285,18 @@ class FrigateApp:
|
|||||||
self.processes["recording"] = recording_process.pid or 0
|
self.processes["recording"] = recording_process.pid or 0
|
||||||
logger.info(f"Recording process started: {recording_process.pid}")
|
logger.info(f"Recording process started: {recording_process.pid}")
|
||||||
|
|
||||||
|
def init_review_segment_manager(self) -> None:
|
||||||
|
review_segment_process = mp.Process(
|
||||||
|
target=manage_review_segments,
|
||||||
|
name="review_segment_manager",
|
||||||
|
args=(self.config,),
|
||||||
|
)
|
||||||
|
review_segment_process.daemon = True
|
||||||
|
self.review_segment_process = review_segment_process
|
||||||
|
review_segment_process.start()
|
||||||
|
self.processes["review_segment"] = review_segment_process.pid or 0
|
||||||
|
logger.info(f"Recording process started: {review_segment_process.pid}")
|
||||||
|
|
||||||
def bind_database(self) -> None:
|
def bind_database(self) -> None:
|
||||||
"""Bind db to the main process."""
|
"""Bind db to the main process."""
|
||||||
# NOTE: all db accessing processes need to be created before the db can be bound to the main process
|
# NOTE: all db accessing processes need to be created before the db can be bound to the main process
|
||||||
@ -297,7 +311,15 @@ class FrigateApp:
|
|||||||
60, 10 * len([c for c in self.config.cameras.values() if c.enabled])
|
60, 10 * len([c for c in self.config.cameras.values() if c.enabled])
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
models = [Event, Recordings, RecordingsToDelete, Previews, Regions, Timeline]
|
models = [
|
||||||
|
Event,
|
||||||
|
Previews,
|
||||||
|
Recordings,
|
||||||
|
RecordingsToDelete,
|
||||||
|
Regions,
|
||||||
|
ReviewSegment,
|
||||||
|
Timeline,
|
||||||
|
]
|
||||||
self.db.bind(models)
|
self.db.bind(models)
|
||||||
|
|
||||||
def init_stats(self) -> None:
|
def init_stats(self) -> None:
|
||||||
@ -608,6 +630,7 @@ class FrigateApp:
|
|||||||
self.init_database()
|
self.init_database()
|
||||||
self.init_onvif()
|
self.init_onvif()
|
||||||
self.init_recording_manager()
|
self.init_recording_manager()
|
||||||
|
self.init_review_segment_manager()
|
||||||
self.init_go2rtc()
|
self.init_go2rtc()
|
||||||
self.bind_database()
|
self.bind_database()
|
||||||
self.init_inter_process_communicator()
|
self.init_inter_process_communicator()
|
||||||
|
|||||||
0
frigate/review/__init__.py
Normal file
0
frigate/review/__init__.py
Normal file
28
frigate/review/maintainer.py
Normal file
28
frigate/review/maintainer.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
"""Maintain review segments in db."""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import threading
|
||||||
|
from multiprocessing.synchronize import Event as MpEvent
|
||||||
|
|
||||||
|
from frigate.comms.config_updater import ConfigSubscriber
|
||||||
|
from frigate.comms.detections_updater import DetectionSubscriber, DetectionTypeEnum
|
||||||
|
from frigate.comms.inter_process import InterProcessRequestor
|
||||||
|
from frigate.config import FrigateConfig
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class ReviewSegmentMaintainer(threading.Thread):
|
||||||
|
"""Maintain review segments."""
|
||||||
|
|
||||||
|
def __init__(self, config: FrigateConfig, stop_event: MpEvent):
|
||||||
|
threading.Thread.__init__(self)
|
||||||
|
self.name = "review_segment_maintainer"
|
||||||
|
self.config = config
|
||||||
|
|
||||||
|
# create communication for review segments
|
||||||
|
self.requestor = InterProcessRequestor()
|
||||||
|
self.config_subscriber = ConfigSubscriber("config/record/")
|
||||||
|
self.detection_subscriber = DetectionSubscriber(DetectionTypeEnum.all)
|
||||||
|
|
||||||
|
self.stop_event = stop_event
|
||||||
36
frigate/review/review.py
Normal file
36
frigate/review/review.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
"""Run recording maintainer and cleanup."""
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import multiprocessing as mp
|
||||||
|
import signal
|
||||||
|
import threading
|
||||||
|
from types import FrameType
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from setproctitle import setproctitle
|
||||||
|
|
||||||
|
from frigate.config import FrigateConfig
|
||||||
|
from frigate.review.maintainer import ReviewSegmentMaintainer
|
||||||
|
from frigate.util.services import listen
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def manage_review_segments(config: FrigateConfig) -> 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:review_segment_manager"
|
||||||
|
setproctitle("frigate.review_segment_manager")
|
||||||
|
listen()
|
||||||
|
|
||||||
|
maintainer = ReviewSegmentMaintainer(
|
||||||
|
config,
|
||||||
|
stop_event,
|
||||||
|
)
|
||||||
|
maintainer.start()
|
||||||
Loading…
Reference in New Issue
Block a user