From 7c7615b291b50a331aa874d4759eafdadd64236b Mon Sep 17 00:00:00 2001 From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com> Date: Sun, 15 Oct 2023 17:21:01 -0500 Subject: [PATCH] hysteresis constants for absolute zooming --- frigate/const.py | 4 ++-- frigate/ptz/autotrack.py | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/frigate/const.py b/frigate/const.py index 73465f355..025cd15c8 100644 --- a/frigate/const.py +++ b/frigate/const.py @@ -57,6 +57,6 @@ INSERT_MANY_RECORDINGS = "insert_many_recordings" AUTOTRACKING_MOTION_MIN_DISTANCE = 20 AUTOTRACKING_MOTION_MAX_POINTS = 500 AUTOTRACKING_MAX_MOVE_METRICS = 500 -AUTOTRACKING_ZOOM_OUT_HYSTERESIS = 1.1 -AUTOTRACKING_ZOOM_IN_HYSTERESIS = 0.9 +AUTOTRACKING_ZOOM_OUT_HYSTERESIS = 2.0 +AUTOTRACKING_ZOOM_IN_HYSTERESIS = 0.8 AUTOTRACKING_ZOOM_EDGE_THRESHOLD = 0.05 diff --git a/frigate/ptz/autotrack.py b/frigate/ptz/autotrack.py index e64768bec..0a54cba0f 100644 --- a/frigate/ptz/autotrack.py +++ b/frigate/ptz/autotrack.py @@ -648,12 +648,18 @@ class PtzAutoTracker: below_area_threshold = target_box < 0.05 # introduce some hysteresis to prevent a yo-yo zooming effect - zoom_out_hysteresis = target_box > ( - self.previous_target_box[camera] * AUTOTRACKING_ZOOM_OUT_HYSTERESIS - ) - zoom_in_hysteresis = target_box < ( - self.previous_target_box[camera] * AUTOTRACKING_ZOOM_IN_HYSTERESIS - ) + if camera_config.onvif.autotracking.zooming == ZoomingModeEnum.absolute: + zoom_out_hysteresis = target_box > ( + self.previous_target_box[camera] * AUTOTRACKING_ZOOM_OUT_HYSTERESIS + ) + zoom_in_hysteresis = target_box < ( + self.previous_target_box[camera] * AUTOTRACKING_ZOOM_IN_HYSTERESIS + ) + + # relative target boxes deadzone is much smaller + if camera_config.onvif.autotracking.zooming == ZoomingModeEnum.relative: + zoom_out_hysteresis = target_box > (self.previous_target_box[camera] * 1.1) + zoom_in_hysteresis = target_box < (self.previous_target_box[camera] * 0.9) at_max_zoom = self.ptz_metrics[camera]["ptz_zoom_level"].value == 1 at_min_zoom = self.ptz_metrics[camera]["ptz_zoom_level"].value == 0