diff --git a/frigate/ptz/autotrack.py b/frigate/ptz/autotrack.py index 21b820a05..621fb1125 100644 --- a/frigate/ptz/autotrack.py +++ b/frigate/ptz/autotrack.py @@ -199,6 +199,8 @@ class PtzAutoTracker: return + self.onvif.get_camera_status(camera_name) + # movement thread per camera if not self.move_threads or not self.move_threads[camera_name]: self.move_threads[camera_name] = threading.Thread( @@ -279,7 +281,6 @@ class PtzAutoTracker: camera_config = self.config.cameras[camera] if camera_config.onvif.autotracking.zooming: - # frame width and height camera_width = camera_config.frame_shape[1] camera_height = camera_config.frame_shape[0] camera_area = camera_width * camera_height @@ -291,6 +292,7 @@ class PtzAutoTracker: # ensure zooming level is in range # if so, check if bounding box is 10% of an edge # if so, try zooming in, otherwise try zooming out + # should we make these configurable? edge_threshold = 0.1 area_threshold = 0.6 @@ -473,4 +475,11 @@ class PtzAutoTracker: autotracker_config.return_preset.lower(), ) self.ptz_metrics[camera]["ptz_reset"].set() + + # empty move queue + while not self.move_queues[camera].empty(): + self.move_queues[camera].get() + + # clear tracked object + self.tracked_object[camera] = None self.tracked_object_previous[camera] = None diff --git a/frigate/ptz/onvif.py b/frigate/ptz/onvif.py index 4e632b6a3..d2dd3dc6d 100644 --- a/frigate/ptz/onvif.py +++ b/frigate/ptz/onvif.py @@ -458,11 +458,18 @@ class OnvifController: self.ptz_metrics[camera_name]["ptz_stop_time"].value = 0 if self.config.cameras[camera_name].onvif.autotracking.zooming: - # interpolate the actual zoom level reported by the camera into the relative zoom range - self.ptz_metrics[camera_name][ - "ptz_zoom_level" - ].value = status.Position.Zoom.x - logger.debug(f"Camera zoom level: {status.Position.Zoom.x}") + # store zoom level as 0 to 1 interpolated from the values of the camera + self.ptz_metrics[camera_name]["ptz_zoom_level"].value = numpy.interp( + 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"]["Max"], + ], + ) + logger.debug( + f'Camera zoom level: {self.ptz_metrics[camera_name]["ptz_zoom_level"].value}' + ) return { "pan": status.Position.PanTilt.x,