mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-09 15:05:26 +03:00
Compare commits
No commits in common. "b5c7f934b64ba7b379e00dd18aa482868bdbd75b" and "eb1fb8f984098deb8e992cfce18f5a11edc3e1aa" have entirely different histories.
b5c7f934b6
...
eb1fb8f984
@ -143,9 +143,6 @@ class FrigateApp:
|
|||||||
else:
|
else:
|
||||||
logger.debug(f"Skipping directory: {d}")
|
logger.debug(f"Skipping directory: {d}")
|
||||||
|
|
||||||
def init_debug_replay_manager(self) -> None:
|
|
||||||
self.replay_manager = DebugReplayManager()
|
|
||||||
|
|
||||||
def init_camera_metrics(self) -> None:
|
def init_camera_metrics(self) -> None:
|
||||||
# create camera_metrics
|
# create camera_metrics
|
||||||
for camera_name in self.config.cameras.keys():
|
for camera_name in self.config.cameras.keys():
|
||||||
@ -538,7 +535,8 @@ class FrigateApp:
|
|||||||
set_file_limit()
|
set_file_limit()
|
||||||
|
|
||||||
# Start frigate services.
|
# Start frigate services.
|
||||||
self.init_debug_replay_manager()
|
self.replay_manager = DebugReplayManager()
|
||||||
|
|
||||||
self.init_camera_metrics()
|
self.init_camera_metrics()
|
||||||
self.init_queues()
|
self.init_queues()
|
||||||
self.init_database()
|
self.init_database()
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import threading
|
|||||||
from multiprocessing.synchronize import Event as MpEvent
|
from multiprocessing.synchronize import Event as MpEvent
|
||||||
from wsgiref.simple_server import make_server
|
from wsgiref.simple_server import make_server
|
||||||
|
|
||||||
|
import cv2
|
||||||
from ws4py.server.wsgirefserver import (
|
from ws4py.server.wsgirefserver import (
|
||||||
WebSocketWSGIHandler,
|
WebSocketWSGIHandler,
|
||||||
WebSocketWSGIRequestHandler,
|
WebSocketWSGIRequestHandler,
|
||||||
@ -84,32 +85,6 @@ class OutputProcess(FrigateProcess):
|
|||||||
)
|
)
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
def is_debug_replay_camera(self, camera: str) -> bool:
|
|
||||||
return camera.startswith(REPLAY_CAMERA_PREFIX)
|
|
||||||
|
|
||||||
def add_camera(
|
|
||||||
self,
|
|
||||||
camera: str,
|
|
||||||
websocket_server: WSGIServer,
|
|
||||||
jsmpeg_cameras: dict[str, JsmpegCamera],
|
|
||||||
preview_recorders: dict[str, PreviewRecorder],
|
|
||||||
preview_write_times: dict[str, float],
|
|
||||||
birdseye: Birdseye | None,
|
|
||||||
) -> None:
|
|
||||||
camera_config = self.config.cameras[camera]
|
|
||||||
jsmpeg_cameras[camera] = JsmpegCamera(
|
|
||||||
camera_config, self.stop_event, websocket_server
|
|
||||||
)
|
|
||||||
preview_recorders[camera] = PreviewRecorder(camera_config)
|
|
||||||
preview_write_times[camera] = 0
|
|
||||||
|
|
||||||
if (
|
|
||||||
birdseye is not None
|
|
||||||
and self.config.birdseye.enabled
|
|
||||||
and camera_config.birdseye.enabled
|
|
||||||
):
|
|
||||||
birdseye.add_camera(camera)
|
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
self.pre_run_setup(self.config.logger)
|
self.pre_run_setup(self.config.logger)
|
||||||
|
|
||||||
@ -149,17 +124,15 @@ class OutputProcess(FrigateProcess):
|
|||||||
move_preview_frames("cache")
|
move_preview_frames("cache")
|
||||||
|
|
||||||
for camera, cam_config in self.config.cameras.items():
|
for camera, cam_config in self.config.cameras.items():
|
||||||
if not cam_config.enabled_in_config or self.is_debug_replay_camera(camera):
|
if not cam_config.enabled_in_config:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
self.add_camera(
|
jsmpeg_cameras[camera] = JsmpegCamera(
|
||||||
camera,
|
cam_config, self.stop_event, websocket_server
|
||||||
websocket_server,
|
|
||||||
jsmpeg_cameras,
|
|
||||||
preview_recorders,
|
|
||||||
preview_write_times,
|
|
||||||
birdseye,
|
|
||||||
)
|
)
|
||||||
|
if not camera.startswith(REPLAY_CAMERA_PREFIX):
|
||||||
|
preview_recorders[camera] = PreviewRecorder(cam_config)
|
||||||
|
preview_write_times[camera] = 0
|
||||||
|
|
||||||
if self.config.birdseye.enabled:
|
if self.config.birdseye.enabled:
|
||||||
birdseye = Birdseye(self.config, self.stop_event, websocket_server)
|
birdseye = Birdseye(self.config, self.stop_event, websocket_server)
|
||||||
@ -172,15 +145,19 @@ class OutputProcess(FrigateProcess):
|
|||||||
|
|
||||||
if CameraConfigUpdateEnum.add in updates:
|
if CameraConfigUpdateEnum.add in updates:
|
||||||
for camera in updates["add"]:
|
for camera in updates["add"]:
|
||||||
if not self.is_debug_replay_camera(camera):
|
camera_config = self.config.cameras[camera]
|
||||||
self.add_camera(
|
jsmpeg_cameras[camera] = JsmpegCamera(
|
||||||
camera,
|
camera_config, self.stop_event, websocket_server
|
||||||
websocket_server,
|
|
||||||
jsmpeg_cameras,
|
|
||||||
preview_recorders,
|
|
||||||
preview_write_times,
|
|
||||||
birdseye,
|
|
||||||
)
|
)
|
||||||
|
if not camera.startswith(REPLAY_CAMERA_PREFIX):
|
||||||
|
preview_recorders[camera] = PreviewRecorder(camera_config)
|
||||||
|
preview_write_times[camera] = 0
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.config.birdseye.enabled
|
||||||
|
and self.config.cameras[camera].birdseye.enabled
|
||||||
|
):
|
||||||
|
birdseye.add_camera(camera)
|
||||||
|
|
||||||
(topic, data) = detection_subscriber.check_for_update(timeout=1)
|
(topic, data) = detection_subscriber.check_for_update(timeout=1)
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.datetime.now().timestamp()
|
||||||
@ -207,7 +184,6 @@ class OutputProcess(FrigateProcess):
|
|||||||
if (
|
if (
|
||||||
camera not in self.config.cameras
|
camera not in self.config.cameras
|
||||||
or not self.config.cameras[camera].enabled
|
or not self.config.cameras[camera].enabled
|
||||||
or self.is_debug_replay_camera(camera)
|
|
||||||
):
|
):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -232,10 +208,22 @@ class OutputProcess(FrigateProcess):
|
|||||||
failed_frame_requests[camera] = 0
|
failed_frame_requests[camera] = 0
|
||||||
|
|
||||||
# send frames for low fps recording
|
# send frames for low fps recording
|
||||||
preview_recorders[camera].write_data(
|
preview_recorder = preview_recorders.get(camera)
|
||||||
|
|
||||||
|
if preview_recorder is not None:
|
||||||
|
try:
|
||||||
|
preview_recorder.write_data(
|
||||||
current_tracked_objects, motion_boxes, frame_time, frame
|
current_tracked_objects, motion_boxes, frame_time, frame
|
||||||
)
|
)
|
||||||
preview_write_times[camera] = frame_time
|
preview_write_times[camera] = frame_time
|
||||||
|
except cv2.error:
|
||||||
|
if camera.startswith(REPLAY_CAMERA_PREFIX):
|
||||||
|
logger.debug(
|
||||||
|
"Skipping preview frame write for replay camera %s",
|
||||||
|
camera,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
# send camera frame to ffmpeg process if websockets are connected
|
# send camera frame to ffmpeg process if websockets are connected
|
||||||
if any(
|
if any(
|
||||||
@ -253,6 +241,10 @@ class OutputProcess(FrigateProcess):
|
|||||||
for ws in websocket_server.manager
|
for ws in websocket_server.manager
|
||||||
)
|
)
|
||||||
):
|
):
|
||||||
|
if camera.startswith(REPLAY_CAMERA_PREFIX):
|
||||||
|
frame_manager.close(frame_name)
|
||||||
|
continue
|
||||||
|
|
||||||
birdseye.write_data(
|
birdseye.write_data(
|
||||||
camera,
|
camera,
|
||||||
current_tracked_objects,
|
current_tracked_objects,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user