mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-06 19:25:22 +03:00
don't enqueue lost object zoom if already at limit
This commit is contained in:
parent
f4b7057486
commit
6f2690b985
@ -188,12 +188,14 @@ class PtzAutoTracker:
|
|||||||
if cam.onvif.autotracking.enabled:
|
if cam.onvif.autotracking.enabled:
|
||||||
self._autotracker_setup(cam, camera_name)
|
self._autotracker_setup(cam, camera_name)
|
||||||
|
|
||||||
def _autotracker_setup(self, cam, camera_name):
|
def _autotracker_setup(self, camera_config, camera_name):
|
||||||
logger.debug(f"Autotracker init for cam: {camera_name}")
|
logger.debug(f"Autotracker init for cam: {camera_name}")
|
||||||
|
|
||||||
self.object_types[camera_name] = cam.onvif.autotracking.track
|
self.object_types[camera_name] = camera_config.onvif.autotracking.track
|
||||||
self.required_zones[camera_name] = cam.onvif.autotracking.required_zones
|
self.required_zones[
|
||||||
self.zoom_factor[camera_name] = cam.onvif.autotracking.zoom_factor
|
camera_name
|
||||||
|
] = camera_config.onvif.autotracking.required_zones
|
||||||
|
self.zoom_factor[camera_name] = camera_config.onvif.autotracking.zoom_factor
|
||||||
|
|
||||||
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
|
||||||
@ -209,13 +211,13 @@ class PtzAutoTracker:
|
|||||||
if not self.onvif.cams[camera_name]["init"]:
|
if not self.onvif.cams[camera_name]["init"]:
|
||||||
if not self.onvif._init_onvif(camera_name):
|
if not self.onvif._init_onvif(camera_name):
|
||||||
logger.warning(f"Unable to initialize onvif for {camera_name}")
|
logger.warning(f"Unable to initialize onvif for {camera_name}")
|
||||||
cam.onvif.autotracking.enabled = False
|
camera_config.onvif.autotracking.enabled = False
|
||||||
self.ptz_metrics[camera_name]["ptz_autotracker_enabled"].value = False
|
self.ptz_metrics[camera_name]["ptz_autotracker_enabled"].value = False
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
if "pt-r-fov" not in self.onvif.cams[camera_name]["features"]:
|
if "pt-r-fov" not in self.onvif.cams[camera_name]["features"]:
|
||||||
cam.onvif.autotracking.enabled = False
|
camera_config.onvif.autotracking.enabled = False
|
||||||
self.ptz_metrics[camera_name]["ptz_autotracker_enabled"].value = False
|
self.ptz_metrics[camera_name]["ptz_autotracker_enabled"].value = False
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Disabling autotracking for {camera_name}: FOV relative movement not supported"
|
f"Disabling autotracking for {camera_name}: FOV relative movement not supported"
|
||||||
@ -226,7 +228,7 @@ class PtzAutoTracker:
|
|||||||
movestatus_supported = self.onvif.get_service_capabilities(camera_name)
|
movestatus_supported = self.onvif.get_service_capabilities(camera_name)
|
||||||
|
|
||||||
if movestatus_supported is None or movestatus_supported.lower() != "true":
|
if movestatus_supported is None or movestatus_supported.lower() != "true":
|
||||||
cam.onvif.autotracking.enabled = False
|
camera_config.onvif.autotracking.enabled = False
|
||||||
self.ptz_metrics[camera_name]["ptz_autotracker_enabled"].value = False
|
self.ptz_metrics[camera_name]["ptz_autotracker_enabled"].value = False
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Disabling autotracking for {camera_name}: ONVIF MoveStatus not supported"
|
f"Disabling autotracking for {camera_name}: ONVIF MoveStatus not supported"
|
||||||
@ -245,13 +247,15 @@ class PtzAutoTracker:
|
|||||||
self.move_threads[camera_name].daemon = True
|
self.move_threads[camera_name].daemon = True
|
||||||
self.move_threads[camera_name].start()
|
self.move_threads[camera_name].start()
|
||||||
|
|
||||||
if cam.onvif.autotracking.movement_weights:
|
if camera_config.onvif.autotracking.movement_weights:
|
||||||
self.intercept[camera_name] = cam.onvif.autotracking.movement_weights[0]
|
self.intercept[
|
||||||
|
camera_name
|
||||||
|
] = camera_config.onvif.autotracking.movement_weights[0]
|
||||||
self.move_coefficients[
|
self.move_coefficients[
|
||||||
camera_name
|
camera_name
|
||||||
] = cam.onvif.autotracking.movement_weights[1:]
|
] = camera_config.onvif.autotracking.movement_weights[1:]
|
||||||
|
|
||||||
if cam.onvif.autotracking.calibrate_on_startup:
|
if camera_config.onvif.autotracking.calibrate_on_startup:
|
||||||
self._calibrate_camera(camera_name)
|
self._calibrate_camera(camera_name)
|
||||||
|
|
||||||
self.autotracker_init[camera_name] = True
|
self.autotracker_init[camera_name] = True
|
||||||
@ -724,8 +728,7 @@ class PtzAutoTracker:
|
|||||||
if camera_config.onvif.autotracking.movement_weights
|
if camera_config.onvif.autotracking.movement_weights
|
||||||
else obj.obj_data["box"],
|
else obj.obj_data["box"],
|
||||||
):
|
):
|
||||||
# if we want to zoom out less, this could be -(1 - zoom)
|
zoom = max(-zoom * (1 / self.zoom_factor[camera]), -1)
|
||||||
zoom = -zoom
|
|
||||||
|
|
||||||
return zoom
|
return zoom
|
||||||
|
|
||||||
@ -733,15 +736,17 @@ class PtzAutoTracker:
|
|||||||
# absolutely zoom if we've lost an object and are waiting for return to preset
|
# absolutely zoom if we've lost an object and are waiting for return to preset
|
||||||
camera_config = self.config.cameras[camera]
|
camera_config = self.config.cameras[camera]
|
||||||
if camera_config.onvif.autotracking.zooming != ZoomingModeEnum.disabled:
|
if camera_config.onvif.autotracking.zooming != ZoomingModeEnum.disabled:
|
||||||
if not self._should_zoom_in(
|
zoom_level = self.ptz_metrics[camera]["ptz_zoom_level"].value
|
||||||
|
if self._should_zoom_in(
|
||||||
camera,
|
camera,
|
||||||
obj,
|
obj,
|
||||||
obj.obj_data["box"],
|
obj.obj_data["box"],
|
||||||
):
|
):
|
||||||
zoom = self.ptz_metrics[camera]["ptz_zoom_level"].value - 0.1
|
zoom = min(1.0, zoom_level + 0.1)
|
||||||
else:
|
else:
|
||||||
zoom = self.ptz_metrics[camera]["ptz_zoom_level"].value + 0.1
|
zoom = max(0.0, zoom_level - 0.1)
|
||||||
|
|
||||||
|
if zoom_level != zoom:
|
||||||
self._enqueue_move(
|
self._enqueue_move(
|
||||||
camera,
|
camera,
|
||||||
self.ptz_metrics[camera]["ptz_frame_time"].value,
|
self.ptz_metrics[camera]["ptz_frame_time"].value,
|
||||||
@ -755,7 +760,7 @@ class PtzAutoTracker:
|
|||||||
|
|
||||||
if camera_config.onvif.autotracking.enabled:
|
if camera_config.onvif.autotracking.enabled:
|
||||||
if not self.autotracker_init[camera]:
|
if not self.autotracker_init[camera]:
|
||||||
self._autotracker_setup(self.config.cameras[camera], camera)
|
self._autotracker_setup(camera_config, camera)
|
||||||
|
|
||||||
if self.calibrating[camera]:
|
if self.calibrating[camera]:
|
||||||
logger.debug("Calibrating camera")
|
logger.debug("Calibrating camera")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user