Spaces:
Runtime error
Runtime error
# -------------------------------------------------------- | |
# Python Single Object Tracking Evaluation | |
# Licensed under The MIT License [see LICENSE for details] | |
# Written by Fangyi Zhang | |
# @author [email protected] | |
# @project https://github.com/StrangerZhang/pysot-toolkit.git | |
# Revised for SiamMask by foolwood | |
# -------------------------------------------------------- | |
import os | |
import cv2 | |
from glob import glob | |
class Video(object): | |
def __init__(self, name, root, video_dir, init_rect, img_names, | |
gt_rect, attr): | |
self.name = name | |
self.video_dir = video_dir | |
self.init_rect = init_rect | |
self.gt_traj = gt_rect | |
self.attr = attr | |
self.pred_trajs = {} | |
self.img_names = [os.path.join(root, x) for x in img_names] | |
self.imgs = None | |
def load_tracker(self, path, tracker_names=None, store=True): | |
""" | |
Args: | |
path(str): path to result | |
tracker_name(list): name of tracker | |
""" | |
if not tracker_names: | |
tracker_names = [x.split('/')[-1] for x in glob(path) | |
if os.path.isdir(x)] | |
if isinstance(tracker_names, str): | |
tracker_names = [tracker_names] | |
for name in tracker_names: | |
traj_file = os.path.join(path, name, self.name+'.txt') | |
if os.path.exists(traj_file): | |
with open(traj_file, 'r') as f : | |
pred_traj = [list(map(float, x.strip().split(','))) | |
for x in f.readlines()] | |
if len(pred_traj) != len(self.gt_traj): | |
print(name, len(pred_traj), len(self.gt_traj), self.name) | |
if store: | |
self.pred_trajs[name] = pred_traj | |
else: | |
return pred_traj | |
else: | |
print(traj_file) | |
self.tracker_names = list(self.pred_trajs.keys()) | |
def load_img(self): | |
if self.imgs is None: | |
self.imgs = [cv2.imread(x) | |
for x in self.img_names] | |
self.width = self.imgs[0].shape[1] | |
self.height = self.imgs[0].shape[0] | |
def free_img(self): | |
self.imgs = None | |
def __len__(self): | |
return len(self.img_names) | |
def __getitem__(self, idx): | |
if self.imgs is None: | |
return cv2.imread(self.img_names[idx]), \ | |
self.gt_traj[idx] | |
else: | |
return self.imgs[idx], self.gt_traj[idx] | |
def __iter__(self): | |
for i in range(len(self.img_names)): | |
if self.imgs is not None: | |
yield self.imgs[i], self.gt_traj[i] | |
else: | |
yield cv2.imread(self.img_names[i]), \ | |
self.gt_traj[i] | |