recalc relative zoom value

This commit is contained in:
Josh Hawkins 2023-10-15 12:07:37 -05:00
parent 7868943dca
commit 2dd71a7d48
2 changed files with 28 additions and 27 deletions

View File

@ -57,6 +57,6 @@ INSERT_MANY_RECORDINGS = "insert_many_recordings"
AUTOTRACKING_MOTION_MIN_DISTANCE = 20 AUTOTRACKING_MOTION_MIN_DISTANCE = 20
AUTOTRACKING_MOTION_MAX_POINTS = 500 AUTOTRACKING_MOTION_MAX_POINTS = 500
AUTOTRACKING_MAX_MOVE_METRICS = 500 AUTOTRACKING_MAX_MOVE_METRICS = 500
AUTOTRACKING_ZOOM_OUT_HYSTERESIS = 2.2 AUTOTRACKING_ZOOM_OUT_HYSTERESIS = 1.1
AUTOTRACKING_ZOOM_IN_HYSTERESIS = 0.8 AUTOTRACKING_ZOOM_IN_HYSTERESIS = 0.9
AUTOTRACKING_ZOOM_EDGE_THRESHOLD = 0.02 AUTOTRACKING_ZOOM_EDGE_THRESHOLD = 0.05

View File

@ -630,9 +630,9 @@ class PtzAutoTracker:
below_distance_threshold = self._below_distance_threshold(camera, obj) below_distance_threshold = self._below_distance_threshold(camera, obj)
# ensure object isn't too big in frame # ensure object isn't too big in frame
below_dimension_threshold = (bb_right - bb_left) / camera_width < min( below_dimension_threshold = (bb_right - bb_left) / camera_width < 0.8 and (
self.zoom_factor[camera], 0.6 bb_bottom - bb_top
) and (bb_bottom - bb_top) / camera_height < min(self.zoom_factor[camera], 0.6) ) / camera_height < 0.8
# ensure object is not moving quickly # ensure object is not moving quickly
below_velocity_threshold = ( below_velocity_threshold = (
@ -703,7 +703,8 @@ class PtzAutoTracker:
zoom_in_hysteresis zoom_in_hysteresis
and away_from_edge and away_from_edge
and below_velocity_threshold and below_velocity_threshold
and (below_distance_threshold or below_dimension_threshold) and below_distance_threshold
and below_dimension_threshold
and not at_max_zoom and not at_max_zoom
): ):
return True return True
@ -817,26 +818,26 @@ class PtzAutoTracker:
# relative zooming concurrently with pan/tilt # relative zooming concurrently with pan/tilt
if camera_config.onvif.autotracking.zooming == ZoomingModeEnum.relative: if camera_config.onvif.autotracking.zooming == ZoomingModeEnum.relative:
if self.tracked_object_previous[camera] is None: if self.tracked_object_previous[camera] is None:
# start with a slightly altered box to encourage an initial zoom zoom = target_box ** self.zoom_factor[camera]
self.previous_target_box[camera] = target_box * ( else:
AUTOTRACKING_ZOOM_OUT_HYSTERESIS - 0.05 if (
) result := self._should_zoom_in(
camera,
if ( obj,
result := self._should_zoom_in( predicted_box
camera, if camera_config.onvif.autotracking.movement_weights
obj, else obj.obj_data["box"],
predicted_box )
if camera_config.onvif.autotracking.movement_weights ) is not None:
else obj.obj_data["box"], # zoom value
) zoom = (
) is not None: 2
# zoom in value * (
zoom = target_box ** (self.zoom_factor[camera] / 1.5) self.previous_target_box[camera]
/ (target_box + self.previous_target_box[camera])
if not result: )
# zoom out - 1
zoom = -(1 - zoom) if zoom != 0 else 0 )
logger.debug(f"{camera}: Zooming: {result} Zoom amount: {zoom}") logger.debug(f"{camera}: Zooming: {result} Zoom amount: {zoom}")