oguzakif's picture
init repo
d4b77ac
raw
history blame contribute delete
No virus
5.04 kB
# --------------------------------------------------------
# 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']