HungKhoi's picture
Init Upload
a818fda
Raw
History Blame Contribute Delete
2.5 kB
from typing import List, Dict
import cv2
import numpy as np
from models.engine.visualizer import BaseVisualizer
class Visualizer(BaseVisualizer):
def __init__(self, fps: int=-1, min_width: int=-1):
""" Visualizer class for visualization (track_results + count_results).
Args:
class_map_ids (Dict): class mapping dictionary to map model's class to original class. Eg {0: 1, 1: 0, 2: 2, 3: 3} mean we swap class ID between 0 and 1.
fps (int): FPS for output video. If fps = -1, it will have same fps as input video.
min_width (int): minimum width for output video (height will be scaled to keep aspect ratio as input video). If min_width = -1, it will have same resolution as input video.
"""
class_names = ['pedestrian']
super().__init__(class_names, fps, min_width)
def visualize(self, img: np.ndarray, dettrack_at_frame_id: List[Dict]=None, show_conf: bool=True):
""" Function to visualize (track_results + count_results) a frame.
Args:
img (np.ndarray): image need to be visualized.
dettrack_at_frame_id (List[Dict]): batch of track results which can be obtained from Tracker class.
show_conf (bool): Visualize confidence of track results or not.
"""
# Draw tracking
if (dettrack_at_frame_id):
boxes = dettrack_at_frame_id["boxes"]
# classes = dettrack_at_frame_id["labels"]
ids = dettrack_at_frame_id["ids"]
for bbox, id_ in zip(boxes, ids):
id_ = int(id_)
score = bbox[4]
color = self.get_color(id_)
label = f'{id_}' + (f' {score:.2f}' if (show_conf) else '')
tl, tf = 2, 1
c1, c2 = (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3]))
img = cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)
t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]
c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3
img = cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA)
img = cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA)
if (img.shape[0] != self.height or img.shape[1] != self.width):
img = cv2.resize(img, (self.width, self.height))
self.writer.write(img)
return img