mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-05 10:45:21 +03:00
Move queues per camera
This commit is contained in:
parent
56d074ec4e
commit
a5f407dba8
@ -5,6 +5,7 @@ import logging
|
|||||||
import queue
|
import queue
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
from functools import partial
|
||||||
from multiprocessing.synchronize import Event as MpEvent
|
from multiprocessing.synchronize import Event as MpEvent
|
||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
@ -112,10 +113,8 @@ class PtzAutoTracker:
|
|||||||
self.tracked_object_previous: dict[str, object] = {}
|
self.tracked_object_previous: dict[str, object] = {}
|
||||||
self.object_types = {}
|
self.object_types = {}
|
||||||
self.required_zones = {}
|
self.required_zones = {}
|
||||||
self.move_queue = queue.Queue()
|
self.move_queues = {}
|
||||||
self.move_thread = threading.Thread(target=self._process_move_queue)
|
self.move_threads = {}
|
||||||
self.move_thread.daemon = True # Set the thread as a daemon thread
|
|
||||||
self.move_thread.start()
|
|
||||||
|
|
||||||
# if cam is set to autotrack, onvif should be set up
|
# if cam is set to autotrack, onvif should be set up
|
||||||
for camera_name, cam in self.config.cameras.items():
|
for camera_name, cam in self.config.cameras.items():
|
||||||
@ -128,6 +127,8 @@ class PtzAutoTracker:
|
|||||||
self.tracked_object[camera_name] = None
|
self.tracked_object[camera_name] = None
|
||||||
self.tracked_object_previous[camera_name] = None
|
self.tracked_object_previous[camera_name] = None
|
||||||
|
|
||||||
|
self.move_queues[camera_name] = queue.Queue()
|
||||||
|
|
||||||
if not onvif.cams[camera_name]["init"]:
|
if not onvif.cams[camera_name]["init"]:
|
||||||
if not self.onvif._init_onvif(camera_name):
|
if not self.onvif._init_onvif(camera_name):
|
||||||
return
|
return
|
||||||
@ -140,24 +141,33 @@ class PtzAutoTracker:
|
|||||||
f"Disabling autotracking for {camera_name}: FOV relative movement not supported"
|
f"Disabling autotracking for {camera_name}: FOV relative movement not supported"
|
||||||
)
|
)
|
||||||
|
|
||||||
def _process_move_queue(self):
|
return
|
||||||
|
|
||||||
|
# movement thread per camera
|
||||||
|
self.move_threads[camera_name] = threading.Thread(
|
||||||
|
target=partial(self._process_move_queue, camera_name)
|
||||||
|
)
|
||||||
|
self.move_threads[camera_name].daemon = True
|
||||||
|
self.move_threads[camera_name].start()
|
||||||
|
|
||||||
|
def _process_move_queue(self, camera):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
if self.move_queue.qsize() > 1:
|
if self.move_queues[camera].qsize() > 1:
|
||||||
# Accumulate values since last moved
|
# Accumulate values since last moved
|
||||||
pan = 0
|
pan = 0
|
||||||
tilt = 0
|
tilt = 0
|
||||||
|
|
||||||
while not self.move_queue.empty():
|
while not self.move_queues[camera].empty():
|
||||||
camera, queued_pan, queued_tilt = self.move_queue.get()
|
queued_pan, queued_tilt = self.move_queues[camera].get()
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"queue pan: {queued_pan}, queue tilt: {queued_tilt}"
|
f"queue pan: {queued_pan}, queue tilt: {queued_tilt}"
|
||||||
)
|
)
|
||||||
pan += queued_pan
|
pan += queued_pan
|
||||||
tilt += queued_tilt
|
tilt += queued_tilt
|
||||||
else:
|
else:
|
||||||
move_data = self.move_queue.get()
|
move_data = self.move_queues[camera].get()
|
||||||
camera, pan, tilt = move_data
|
pan, tilt = move_data
|
||||||
logger.debug(f"removing pan: {pan}, removing tilt: {tilt}")
|
logger.debug(f"removing pan: {pan}, removing tilt: {tilt}")
|
||||||
|
|
||||||
logger.debug(f"final pan: {pan}, final tilt: {tilt}")
|
logger.debug(f"final pan: {pan}, final tilt: {tilt}")
|
||||||
@ -172,9 +182,9 @@ class PtzAutoTracker:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def enqueue_move(self, camera, pan, tilt):
|
def enqueue_move(self, camera, pan, tilt):
|
||||||
move_data = (camera, pan, tilt)
|
move_data = (pan, tilt)
|
||||||
logger.debug(f"enqueue pan: {pan}, enqueue tilt: {tilt}")
|
logger.debug(f"enqueue pan: {pan}, enqueue tilt: {tilt}")
|
||||||
self.move_queue.put(move_data)
|
self.move_queues[camera].put(move_data)
|
||||||
|
|
||||||
def _autotrack_move_ptz(self, camera, obj):
|
def _autotrack_move_ptz(self, camera, obj):
|
||||||
camera_config = self.config.cameras[camera]
|
camera_config = self.config.cameras[camera]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user