Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import torch | |
| import torchvision.ops.boxes as bops | |
| from demo_utils.configuration import MAX_DISTANCE | |
| def euclidean_distance(detection, tracked_object): | |
| return np.linalg.norm(detection.points - tracked_object.estimate) | |
| def iou_pytorch(detection, tracked_object): | |
| # Slower but simplier version of iou | |
| detection_points = np.concatenate([detection.points[0], detection.points[1]]) | |
| tracked_object_points = np.concatenate([tracked_object.estimate[0], tracked_object.estimate[1]]) | |
| box_a = torch.tensor([detection_points], dtype=torch.float) | |
| box_b = torch.tensor([tracked_object_points], dtype=torch.float) | |
| iou = bops.box_iou(box_a, box_b) | |
| # Since 0 <= IoU <= 1, we define 1/IoU as a distance. | |
| # Distance values will be in [1, inf) | |
| return np.float(1 / iou if iou else MAX_DISTANCE) | |
| def iou(detection, tracked_object): | |
| # Detection points will be box A | |
| # Tracked objects point will be box B. | |
| box_a = np.concatenate([detection.points[0], detection.points[1]]) | |
| box_b = np.concatenate([tracked_object.estimate[0], tracked_object.estimate[1]]) | |
| x_a = max(box_a[0], box_b[0]) | |
| y_a = max(box_a[1], box_b[1]) | |
| x_b = min(box_a[2], box_b[2]) | |
| y_b = min(box_a[3], box_b[3]) | |
| # Compute the area of intersection rectangle | |
| inter_area = max(0, x_b - x_a + 1) * max(0, y_b - y_a + 1) | |
| # Compute the area of both the prediction and tracker | |
| # rectangles | |
| box_a_area = (box_a[2] - box_a[0] + 1) * (box_a[3] - box_a[1] + 1) | |
| box_b_area = (box_b[2] - box_b[0] + 1) * (box_b[3] - box_b[1] + 1) | |
| # Compute the intersection over union by taking the intersection | |
| # area and dividing it by the sum of prediction + tracker | |
| # areas - the interesection area | |
| iou = inter_area / float(box_a_area + box_b_area - inter_area) | |
| # Since 0 <= IoU <= 1, we define 1/IoU as a distance. | |
| # Distance values will be in [1, inf) | |
| return 1 / iou if iou else (MAX_DISTANCE) | |