Spaces:
Runtime error
Runtime error
| # -------------------------------------------------------- | |
| # 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 json | |
| import numpy as np | |
| from glob import glob | |
| from tqdm import tqdm | |
| from .dataset import Dataset | |
| from .video import Video | |
| class VOTVideo(Video): | |
| """ | |
| Args: | |
| name: video name | |
| root: dataset root | |
| video_dir: video directory | |
| init_rect: init rectangle | |
| img_names: image names | |
| gt_rect: groundtruth rectangle | |
| camera_motion: camera motion tag | |
| illum_change: illum change tag | |
| motion_change: motion change tag | |
| size_change: size change | |
| occlusion: occlusion | |
| """ | |
| def __init__(self, name, root, video_dir, init_rect, img_names, gt_rect, | |
| camera_motion, illum_change, motion_change, size_change, occlusion, width, height): | |
| super(VOTVideo, self).__init__(name, root, video_dir, init_rect, img_names, gt_rect, None) | |
| self.tags= {'all': [1] * len(gt_rect)} | |
| self.tags['camera_motion'] = camera_motion | |
| self.tags['illum_change'] = illum_change | |
| self.tags['motion_change'] = motion_change | |
| self.tags['size_change'] = size_change | |
| self.tags['occlusion'] = occlusion | |
| self.width = width | |
| self.height = height | |
| # empty tag | |
| all_tag = [v for k, v in self.tags.items() if len(v) > 0 ] | |
| self.tags['empty'] = np.all(1 - np.array(all_tag), axis=1).astype(np.int32).tolist() | |
| self.tag_names = list(self.tags.keys()) | |
| def select_tag(self, tag, start=0, end=0): | |
| if tag == 'empty': | |
| return self.tags[tag] | |
| return self.tags[tag][start:end] | |
| 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_files = glob(os.path.join(path, name, 'baseline', self.name, '*0*.txt')) | |
| if len(traj_files) == 15: | |
| traj_files = traj_files | |
| else: | |
| traj_files = traj_files[0:1] | |
| pred_traj = [] | |
| for traj_file in traj_files: | |
| with open(traj_file, 'r') as f: | |
| traj = [list(map(float, x.strip().split(','))) | |
| for x in f.readlines()] | |
| pred_traj.append(traj) | |
| if store: | |
| self.pred_trajs[name] = pred_traj | |
| else: | |
| return pred_traj | |
| class VOTDataset(Dataset): | |
| """ | |
| Args: | |
| name: dataset name, should be 'VOT2018', 'VOT2016' | |
| dataset_root: dataset root | |
| load_img: wether to load all imgs | |
| """ | |
| def __init__(self, name, dataset_root): | |
| super(VOTDataset, self).__init__(name, dataset_root) | |
| try: | |
| with open(os.path.join(dataset_root, name+'.json'), 'r') as f: | |
| meta_data = json.load(f) | |
| except: | |
| download_str = '# download json file for eval toolkit\n'+\ | |
| 'cd $SiamMask/data\n'+\ | |
| 'wget http://www.robots.ox.ac.uk/~qwang/VOT2016.json\n'+\ | |
| 'wget http://www.robots.ox.ac.uk/~qwang/VOT2018.json' | |
| print(download_str) | |
| exit() | |
| # load videos | |
| pbar = tqdm(meta_data.keys(), desc='loading '+name, ncols=100) | |
| self.videos = {} | |
| for video in pbar: | |
| pbar.set_postfix_str(video) | |
| self.videos[video] = VOTVideo(video, | |
| dataset_root, | |
| meta_data[video]['video_dir'], | |
| meta_data[video]['init_rect'], | |
| meta_data[video]['img_names'], | |
| meta_data[video]['gt_rect'], | |
| meta_data[video]['camera_motion'], | |
| meta_data[video]['illum_change'], | |
| meta_data[video]['motion_change'], | |
| meta_data[video]['size_change'], | |
| meta_data[video]['occlusion'], | |
| meta_data[video]['width'], | |
| meta_data[video]['height']) | |
| self.tags = ['all', 'camera_motion', 'illum_change', 'motion_change', | |
| 'size_change', 'occlusion', 'empty'] | |