Fix autotracking absolute zoom interpolation logic (#14139)

This commit is contained in:
Josh Hawkins 2024-10-03 08:40:27 -05:00 committed by GitHub
parent 0f2cff5078
commit b9e74ee9ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -406,19 +406,19 @@ class OnvifController:
# The onvif spec says this can report as +INF and -INF, so this may need to be modified # The onvif spec says this can report as +INF and -INF, so this may need to be modified
pan = numpy.interp( pan = numpy.interp(
pan, pan,
[-1, 1],
[ [
self.cams[camera_name]["relative_fov_range"]["XRange"]["Min"], self.cams[camera_name]["relative_fov_range"]["XRange"]["Min"],
self.cams[camera_name]["relative_fov_range"]["XRange"]["Max"], self.cams[camera_name]["relative_fov_range"]["XRange"]["Max"],
], ],
[-1, 1],
) )
tilt = numpy.interp( tilt = numpy.interp(
tilt, tilt,
[-1, 1],
[ [
self.cams[camera_name]["relative_fov_range"]["YRange"]["Min"], self.cams[camera_name]["relative_fov_range"]["YRange"]["Min"],
self.cams[camera_name]["relative_fov_range"]["YRange"]["Max"], self.cams[camera_name]["relative_fov_range"]["YRange"]["Max"],
], ],
[-1, 1],
) )
move_request.Speed = { move_request.Speed = {
@ -531,11 +531,11 @@ class OnvifController:
# function takes in 0 to 1 for zoom, interpolate to the values of the camera. # function takes in 0 to 1 for zoom, interpolate to the values of the camera.
zoom = numpy.interp( zoom = numpy.interp(
zoom, zoom,
[0, 1],
[ [
self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Min"], self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Min"],
self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Max"], self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Max"],
], ],
[0, 1],
) )
move_request.Speed = {"Zoom": speed} move_request.Speed = {"Zoom": speed}
@ -686,11 +686,11 @@ class OnvifController:
# store absolute zoom level as 0 to 1 interpolated from the values of the camera # store absolute zoom level as 0 to 1 interpolated from the values of the camera
self.ptz_metrics[camera_name].zoom_level.value = numpy.interp( self.ptz_metrics[camera_name].zoom_level.value = numpy.interp(
round(status.Position.Zoom.x, 2), round(status.Position.Zoom.x, 2),
[0, 1],
[ [
self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Min"], self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Min"],
self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Max"], self.cams[camera_name]["absolute_zoom_range"]["XRange"]["Max"],
], ],
[0, 1],
) )
logger.debug( logger.debug(
f"{camera_name}: Camera zoom level: {self.ptz_metrics[camera_name].zoom_level.value}" f"{camera_name}: Camera zoom level: {self.ptz_metrics[camera_name].zoom_level.value}"