# -------------------------------------------------------- # Python Single Object Tracking Evaluation # Licensed under The MIT License [see LICENSE for details] # Written by Fangyi Zhang # @author fangyi.zhang@vipl.ict.ac.cn # @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]