Juartaurus's picture
Upload folder using huggingface_hub
1865436
import numpy as np
import colorsys
from .image_viewer import ImageViewer
def create_unique_color_float(tag, hue_step=0.41):
"""Create a unique RGB color code for a given track id (tag).
The color code is generated in HSV color space by moving along the
hue angle and gradually changing the saturation.
Parameters
----------
tag : int
The unique target identifying tag.
hue_step : float
Difference between two neighboring color codes in HSV space (more
specifically, the distance in hue channel).
Returns
-------
(float, float, float)
RGB color code in range [0, 1]
"""
h, v = (tag * hue_step) % 1, 1. - (int(tag * hue_step) % 4) / 5.
r, g, b = colorsys.hsv_to_rgb(h, 1., v)
return r, g, b
def create_unique_color_uchar(tag, hue_step=0.41):
"""Create a unique RGB color code for a given track id (tag).
The color code is generated in HSV color space by moving along the
hue angle and gradually changing the saturation.
Parameters
----------
tag : int
The unique target identifying tag.
hue_step : float
Difference between two neighboring color codes in HSV space (more
specifically, the distance in hue channel).
Returns
-------
(int, int, int)
RGB color code in range [0, 255]
"""
r, g, b = create_unique_color_float(tag, hue_step)
return int(255*r), int(255*g), int(255*b)
class NoVisualization(object):
"""
A dummy visualization object that loops through all frames in a given
sequence to update the tracker without performing any visualization.
"""
def __init__(self, seq_info):
self.frame_idx = seq_info["min_frame_idx"]
self.last_idx = seq_info["max_frame_idx"]
def set_image(self, image):
pass
def draw_groundtruth(self, track_ids, boxes):
pass
def draw_detections(self, detections):
pass
def draw_trackers(self, trackers):
pass
def run(self, frame_callback):
while self.frame_idx <= self.last_idx:
frame_callback(self, self.frame_idx)
self.frame_idx += 1
class Visualization(object):
"""
This class shows tracking output in an OpenCV image viewer.
"""
def __init__(self, seq_info, update_ms):
image_shape = seq_info["image_size"][::-1]
aspect_ratio = float(image_shape[1]) / image_shape[0]
image_shape = 1024, int(aspect_ratio * 1024)
self.viewer = ImageViewer(
update_ms, image_shape, "Figure %s" % seq_info["sequence_name"])
self.viewer.thickness = 2
self.frame_idx = seq_info["min_frame_idx"]
self.last_idx = seq_info["max_frame_idx"]
def run(self, frame_callback):
self.viewer.run(lambda: self._update_fun(frame_callback))
def _update_fun(self, frame_callback):
if self.frame_idx > self.last_idx:
return False # Terminate
frame_callback(self, self.frame_idx)
self.frame_idx += 1
return True
def set_image(self, image):
self.viewer.image = image
def draw_groundtruth(self, track_ids, boxes):
self.viewer.thickness = 2
for track_id, box in zip(track_ids, boxes):
self.viewer.color = create_unique_color_uchar(track_id)
self.viewer.rectangle(*box.astype(np.int), label=str(track_id))
def draw_detections(self, detections):
self.viewer.thickness = 2
self.viewer.color = 0, 0, 255
for i, detection in enumerate(detections):
self.viewer.rectangle(*detection.tlwh)
def draw_trackers(self, tracks):
self.viewer.thickness = 2
for track in tracks:
if not track.is_confirmed() or track.time_since_update > 0:
continue
self.viewer.color = create_unique_color_uchar(track.track_id)
self.viewer.rectangle(
*track.to_tlwh().astype(np.int), label=str(track.track_id))
# self.viewer.gaussian(track.mean[:2], track.covariance[:2, :2],
# label="%d" % track.track_id)
#