diff --git a/ocv_corner_tracker.py b/ocv_corner_tracker.py index 8c24af5..7c9d406 100644 --- a/ocv_corner_tracker.py +++ b/ocv_corner_tracker.py @@ -94,7 +94,8 @@ class CornerTrackerParams: class CornerTrackerSettings: - def __init__(self, _mask_bb=None, _tracking_bb=None): + def __init__(self, _id: int, _mask_bb=None, _tracking_bb=None): + self.id = _id self.mask_bb = _mask_bb self.tracking_bb = _tracking_bb self.matching_tpl_bb = [] @@ -108,7 +109,8 @@ class CornerTrackerSettings: class CornerTracker: - def __init__(self, _params: CornerTrackerParams, color=(0, 255, 0), name: str = 'CornerTracker'): + def __init__(self, _id: int, _params: CornerTrackerParams, color=(0, 255, 0), name: str = 'CornerTracker'): + self.id = _id self.params = _params self.color = color self.name = name @@ -182,7 +184,7 @@ class CornerTracker: def create_tracking(self, _image: np.array, _mask: np.array, tracking_bb: np.array): # Init search area - tracking_img = image_crop(_image, tracking_bb) + tracking_img = image_crop(_image.copy(), tracking_bb) tracking_mask = image_crop(_mask, tracking_bb) CornerTracker.mask_apply(tracking_img, tracking_mask) image_processed_local = CornerTracker.image_process(tracking_img) @@ -227,7 +229,7 @@ class CornerTracker: return True def init_reference_frame(self, _image: np.array): - settings = CornerTrackerSettings() + settings = CornerTrackerSettings(self.id) # Draw mask _mask = CornerTracker.mask_init(_image) @@ -416,8 +418,8 @@ if __name__ == '__main__': ct_params = CornerTrackerParams().from_dict(prj['params']) for tracker_settings in prj['trackers']: print(tracker_settings) - ct = CornerTracker(ct_params, colors[tracker_count], name=f"Tracker-{tracker_count}") - ct.create_from_settings(select_window, CornerTrackerSettings().from_dict(tracker_settings)) + ct = CornerTracker(tracker_settings['id'], ct_params, colors[tracker_count], name=f"Tracker-{tracker_settings['id']}") + ct.create_from_settings(select_window, CornerTrackerSettings(tracker_count).from_dict(tracker_settings)) tracker_list.append(ct) tracker_count += 1 @@ -428,7 +430,7 @@ if __name__ == '__main__': k = cv2.waitKey(-1) & 0xff while True: print(f"Add tracker #{tracker_count}") - ct = CornerTracker(ct_params, colors[tracker_count], name=f"Tracker-{tracker_count}") + ct = CornerTracker(tracker_count, ct_params, colors[tracker_count], name=f"Tracker-{tracker_count}") settings = ct.init_reference_frame(select_window) if settings is not None: prj['trackers'].append(settings.__dict__) @@ -465,6 +467,7 @@ if __name__ == '__main__': cv2.rectangle(image_anno, (25, 0), (int(image_anno.shape[1]), 25*(1+len(tracker_list))), (0, 0, 0), -1) for ct in tracker_list: mean_distance = ct.process(image, image_anno) + ct.id if mean_distance is not None: scale = np.float32(ct_params.scale) scaled_distance = (scale*mean_distance[0], scale*mean_distance[1]) @@ -474,7 +477,7 @@ if __name__ == '__main__': result_plot[i].append(scaled_distance) dist_min[i] = (min(scaled_distance[0], dist_min[i][0]), min(scaled_distance[1], dist_min[i][1])) dist_max[i] = (max(scaled_distance[0], dist_max[i][0]), max(scaled_distance[1], dist_max[i][1])) - cv2.putText(image_anno, f"Distance [{i}] : ({scaled_distance[0]:+05.2f}, " + cv2.putText(image_anno, f"Distance [{ct.id}] : ({scaled_distance[0]:+05.2f}, " f"{scaled_distance[1]:+05.2f}), Min: ({dist_min[i][0]:+05.2f}, {dist_min[i][1]:+05.2f})," f" Max: ({dist_max[i][0]:+05.2f}, {dist_max[i][1]:+05.2f})", (25, 25 * (i + 1)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, ct.color, 1)