introduced tracker id

This commit is contained in:
2024-07-19 14:00:31 +02:00
parent f118626ee7
commit 830b858265
+11 -8
View File
@@ -94,7 +94,8 @@ class CornerTrackerParams:
class CornerTrackerSettings: 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.mask_bb = _mask_bb
self.tracking_bb = _tracking_bb self.tracking_bb = _tracking_bb
self.matching_tpl_bb = [] self.matching_tpl_bb = []
@@ -108,7 +109,8 @@ class CornerTrackerSettings:
class CornerTracker: 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.params = _params
self.color = color self.color = color
self.name = name self.name = name
@@ -182,7 +184,7 @@ class CornerTracker:
def create_tracking(self, _image: np.array, _mask: np.array, tracking_bb: np.array): def create_tracking(self, _image: np.array, _mask: np.array, tracking_bb: np.array):
# Init search area # 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) tracking_mask = image_crop(_mask, tracking_bb)
CornerTracker.mask_apply(tracking_img, tracking_mask) CornerTracker.mask_apply(tracking_img, tracking_mask)
image_processed_local = CornerTracker.image_process(tracking_img) image_processed_local = CornerTracker.image_process(tracking_img)
@@ -227,7 +229,7 @@ class CornerTracker:
return True return True
def init_reference_frame(self, _image: np.array): def init_reference_frame(self, _image: np.array):
settings = CornerTrackerSettings() settings = CornerTrackerSettings(self.id)
# Draw mask # Draw mask
_mask = CornerTracker.mask_init(_image) _mask = CornerTracker.mask_init(_image)
@@ -416,8 +418,8 @@ if __name__ == '__main__':
ct_params = CornerTrackerParams().from_dict(prj['params']) ct_params = CornerTrackerParams().from_dict(prj['params'])
for tracker_settings in prj['trackers']: for tracker_settings in prj['trackers']:
print(tracker_settings) print(tracker_settings)
ct = CornerTracker(ct_params, colors[tracker_count], name=f"Tracker-{tracker_count}") ct = CornerTracker(tracker_settings['id'], ct_params, colors[tracker_count], name=f"Tracker-{tracker_settings['id']}")
ct.create_from_settings(select_window, CornerTrackerSettings().from_dict(tracker_settings)) ct.create_from_settings(select_window, CornerTrackerSettings(tracker_count).from_dict(tracker_settings))
tracker_list.append(ct) tracker_list.append(ct)
tracker_count += 1 tracker_count += 1
@@ -428,7 +430,7 @@ if __name__ == '__main__':
k = cv2.waitKey(-1) & 0xff k = cv2.waitKey(-1) & 0xff
while True: while True:
print(f"Add tracker #{tracker_count}") 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) settings = ct.init_reference_frame(select_window)
if settings is not None: if settings is not None:
prj['trackers'].append(settings.__dict__) 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) 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: for ct in tracker_list:
mean_distance = ct.process(image, image_anno) mean_distance = ct.process(image, image_anno)
ct.id
if mean_distance is not None: if mean_distance is not None:
scale = np.float32(ct_params.scale) scale = np.float32(ct_params.scale)
scaled_distance = (scale*mean_distance[0], scale*mean_distance[1]) scaled_distance = (scale*mean_distance[0], scale*mean_distance[1])
@@ -474,7 +477,7 @@ if __name__ == '__main__':
result_plot[i].append(scaled_distance) 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_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])) 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"{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})", 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) (25, 25 * (i + 1)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, ct.color, 1)