mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-06 11:15:21 +03:00
don't make small movements
This commit is contained in:
parent
0b598ce2dc
commit
a1531a0a6e
@ -240,10 +240,6 @@ class PtzAutoTracker:
|
|||||||
else:
|
else:
|
||||||
if zoom > 0:
|
if zoom > 0:
|
||||||
self.onvif._zoom_absolute(camera, zoom, 1)
|
self.onvif._zoom_absolute(camera, zoom, 1)
|
||||||
|
|
||||||
# on some cameras with cheaper motors it seems like small values can cause jerky movement
|
|
||||||
# TODO: double check, might not need this
|
|
||||||
if abs(pan) > 0.02 or abs(tilt) > 0.02:
|
|
||||||
self.onvif._move_relative(camera, pan, tilt, 0, 1)
|
self.onvif._move_relative(camera, pan, tilt, 0, 1)
|
||||||
else:
|
else:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
@ -264,6 +260,13 @@ class PtzAutoTracker:
|
|||||||
frame_time > self.ptz_metrics[camera]["ptz_start_time"].value
|
frame_time > self.ptz_metrics[camera]["ptz_start_time"].value
|
||||||
and frame_time > self.ptz_metrics[camera]["ptz_stop_time"].value
|
and frame_time > self.ptz_metrics[camera]["ptz_stop_time"].value
|
||||||
):
|
):
|
||||||
|
# don't make small movements
|
||||||
|
if abs(pan) < 0.02:
|
||||||
|
pan = 0
|
||||||
|
if abs(tilt) < 0.02:
|
||||||
|
tilt = 0
|
||||||
|
|
||||||
|
if pan != 0 or tilt != 0 or zoom != 0:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"enqueue pan: {pan}, enqueue tilt: {tilt}, enqueue zoom: {zoom}"
|
f"enqueue pan: {pan}, enqueue tilt: {tilt}, enqueue zoom: {zoom}"
|
||||||
)
|
)
|
||||||
@ -309,30 +312,34 @@ class PtzAutoTracker:
|
|||||||
camera_config.onvif.autotracking.zooming
|
camera_config.onvif.autotracking.zooming
|
||||||
and camera_config.onvif.autotracking.zoom_relative
|
and camera_config.onvif.autotracking.zoom_relative
|
||||||
):
|
):
|
||||||
|
# relative zooming concurrently with pan/tilt
|
||||||
zoom = obj.obj_data["area"] / (camera_width * camera_height)
|
zoom = obj.obj_data["area"] / (camera_width * camera_height)
|
||||||
|
|
||||||
# test if we need to zoom out
|
# test if we need to zoom out
|
||||||
if not self._should_zoom_in(obj, camera):
|
if not self._should_zoom_in(obj, camera):
|
||||||
zoom = -(1 - zoom)
|
zoom = -(1 - zoom)
|
||||||
|
|
||||||
self._enqueue_move(
|
# don't make small movements if area hasn't changed significantly
|
||||||
camera,
|
if (
|
||||||
obj.obj_data["frame_time"],
|
"area" in obj.previous
|
||||||
pan,
|
and abs(obj.obj_data["area"] - obj.previous["area"])
|
||||||
tilt,
|
/ obj.obj_data["area"]
|
||||||
zoom,
|
< 0.1
|
||||||
)
|
):
|
||||||
|
zoom = 0
|
||||||
else:
|
else:
|
||||||
self._enqueue_move(camera, obj.obj_data["frame_time"], pan, tilt, 0)
|
zoom = 0
|
||||||
|
|
||||||
def _autotrack_zoom_ptz(self, camera, obj):
|
self._enqueue_move(camera, obj.obj_data["frame_time"], pan, tilt, zoom)
|
||||||
|
|
||||||
|
def _autotrack_zoom_only(self, camera, obj):
|
||||||
camera_config = self.config.cameras[camera]
|
camera_config = self.config.cameras[camera]
|
||||||
|
|
||||||
|
# absolute zooming separately from pan/tilt
|
||||||
if (
|
if (
|
||||||
camera_config.onvif.autotracking.zooming
|
camera_config.onvif.autotracking.zooming
|
||||||
and not camera_config.onvif.autotracking.zoom_relative
|
and not camera_config.onvif.autotracking.zoom_relative
|
||||||
):
|
):
|
||||||
# absolute zooming
|
|
||||||
zoom_level = self.ptz_metrics[camera]["ptz_zoom_level"].value
|
zoom_level = self.ptz_metrics[camera]["ptz_zoom_level"].value
|
||||||
|
|
||||||
if 0 < zoom_level <= 1:
|
if 0 < zoom_level <= 1:
|
||||||
@ -420,8 +427,8 @@ class PtzAutoTracker:
|
|||||||
f"Autotrack: Existing object (do NOT move ptz): {obj.obj_data['id']} {obj.obj_data['box']} {obj.obj_data['frame_time']}"
|
f"Autotrack: Existing object (do NOT move ptz): {obj.obj_data['id']} {obj.obj_data['box']} {obj.obj_data['frame_time']}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# no need to move, but try zooming
|
# no need to move, but try absolute zooming
|
||||||
self._autotrack_zoom_ptz(camera, obj)
|
self._autotrack_zoom_only(camera, obj)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -431,8 +438,8 @@ class PtzAutoTracker:
|
|||||||
self.tracked_object_previous[camera] = copy.deepcopy(obj)
|
self.tracked_object_previous[camera] = copy.deepcopy(obj)
|
||||||
self._autotrack_move_ptz(camera, obj)
|
self._autotrack_move_ptz(camera, obj)
|
||||||
|
|
||||||
# try zooming too
|
# try absolute zooming too
|
||||||
self._autotrack_zoom_ptz(camera, obj)
|
self._autotrack_zoom_only(camera, obj)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user