| | import cv2 |
| | import numpy as np |
| |
|
| |
|
| | def vis_targets(video_clips, targets): |
| | """ |
| | video_clips: (Tensor) -> [B, C, T, H, W] |
| | targets: List[Dict] -> [{'boxes': (Tensor) [N, 4], |
| | 'labels': (Tensor) [N,]}, |
| | ...], |
| | """ |
| | batch_size = len(video_clips) |
| |
|
| | for batch_index in range(batch_size): |
| | video_clip = video_clips[batch_index] |
| | target = targets[batch_index] |
| |
|
| | key_frame = video_clip[:, :, -1, :, :] |
| | tgt_bboxes = target['boxes'] |
| | tgt_labels = target['labels'] |
| |
|
| | key_frame = convert_tensor_to_cv2img(key_frame) |
| | width, height = key_frame.shape[:-1] |
| |
|
| | for box, label in zip(tgt_bboxes, tgt_labels): |
| | x1, y1, x2, y2 = box |
| | label = int(label) |
| |
|
| | x1 *= width |
| | y1 *= height |
| | x2 *= width |
| | y2 *= height |
| |
|
| | |
| | cv2.rectangle(key_frame, |
| | (int(x1), int(y1)), |
| | (int(x2), int(y2)), |
| | (255, 0, 0), 2) |
| | cv2.imshow('groundtruth', key_frame) |
| | cv2.waitKey(0) |
| |
|
| |
|
| | def convert_tensor_to_cv2img(img_tensor): |
| | """ convert torch.Tensor to cv2 image """ |
| | |
| | img_tensor = img_tensor.permute(1, 2, 0).cpu().numpy() |
| | |
| | cv2_img = img_tensor.astype(np.uint8) |
| | |
| | cv2_img = cv2_img.copy()[..., (2, 1, 0)] |
| |
|
| | return cv2_img |
| |
|
| |
|
| | def plot_bbox_labels(img, bbox, label=None, cls_color=None, text_scale=0.4): |
| | x1, y1, x2, y2 = bbox |
| | x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) |
| | t_size = cv2.getTextSize(label, 0, fontScale=1, thickness=2)[0] |
| | |
| | cv2.rectangle(img, (x1, y1), (x2, y2), cls_color, 2) |
| | |
| | if label is not None: |
| | |
| | cv2.rectangle(img, (x1, y1-t_size[1]), (int(x1 + t_size[0] * text_scale), y1), cls_color, -1) |
| | |
| | cv2.putText(img, label, (int(x1), int(y1 - 5)), 0, text_scale, (0, 0, 0), 1, lineType=cv2.LINE_AA) |
| |
|
| | return img |
| |
|
| |
|
| | def vis_detection(frame, scores, labels, bboxes, vis_thresh, class_names, class_colors): |
| | ts = 0.4 |
| | for i, bbox in enumerate(bboxes): |
| | if scores[i] > vis_thresh: |
| | label = int(labels[i]) |
| | cls_color = class_colors[label] |
| | |
| | if len(class_names) > 1: |
| | mess = '%s: %.2f' % (class_names[label], scores[i]) |
| | else: |
| | cls_color = [255, 0, 0] |
| | mess = None |
| | |
| | frame = plot_bbox_labels(frame, bbox, mess, cls_color, text_scale=ts) |
| |
|
| | return frame |
| | |