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) | |