|
import cv2 |
|
|
|
palette = (2 ** 11 - 1, 2 ** 15 - 1, 2 ** 20 - 1) |
|
|
|
|
|
def bbox_rel(*xyxy): |
|
"""" Calculates the relative bounding box from absolute pixel values. """ |
|
bbox_left = min([xyxy[0].item(), xyxy[2].item()]) |
|
bbox_top = min([xyxy[1].item(), xyxy[3].item()]) |
|
bbox_w = abs(xyxy[0].item() - xyxy[2].item()) |
|
bbox_h = abs(xyxy[1].item() - xyxy[3].item()) |
|
x_c = (bbox_left + bbox_w / 2) |
|
y_c = (bbox_top + bbox_h / 2) |
|
w = bbox_w |
|
h = bbox_h |
|
return x_c, y_c, w, h |
|
|
|
|
|
def compute_color_for_labels(label): |
|
""" |
|
Simple function that adds fixed color depending on the class |
|
""" |
|
color = [int((p * (label ** 2 - label + 1)) % 255) for p in palette] |
|
return tuple(color) |
|
|
|
|
|
def draw_boxes(img, bbox, identities=None, offset=(0, 0)): |
|
for i, box in enumerate(bbox): |
|
x1, y1, x2, y2 = [int(i) for i in box] |
|
x1 += offset[0] |
|
x2 += offset[0] |
|
y1 += offset[1] |
|
y2 += offset[1] |
|
|
|
id = int(identities[i]) if identities is not None else 0 |
|
color = compute_color_for_labels(id) |
|
label = '{}{:d}'.format("", id) |
|
t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2, 2)[0] |
|
cv2.rectangle(img, (x1, y1), (x2, y2), color, 3) |
|
cv2.rectangle( |
|
img, (x1, y1), (x1 + t_size[0] + 3, y1 + t_size[1] + 4), color, -1) |
|
cv2.putText(img, label, (x1, y1 + |
|
t_size[1] + 4), cv2.FONT_HERSHEY_PLAIN, 2, [255, 255, 255], 2) |
|
return img |
|
|
|
|