init commit of samurai
This commit is contained in:
75
lib/test/evaluation/itbdataset.py
Normal file
75
lib/test/evaluation/itbdataset.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import numpy as np
|
||||
from lib.test.evaluation.data import Sequence, BaseDataset, SequenceList
|
||||
from lib.test.utils.load_text import load_text
|
||||
import os
|
||||
|
||||
|
||||
class ITBDataset(BaseDataset):
|
||||
""" NUS-PRO dataset
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.base_path = self.env_settings.itb_path
|
||||
self.sequence_info_list = self._get_sequence_info_list(self.base_path)
|
||||
|
||||
def get_sequence_list(self):
|
||||
return SequenceList([self._construct_sequence(s) for s in self.sequence_info_list])
|
||||
|
||||
def _construct_sequence(self, sequence_info):
|
||||
sequence_path = sequence_info['path']
|
||||
nz = sequence_info['nz']
|
||||
ext = sequence_info['ext']
|
||||
start_frame = sequence_info['startFrame']
|
||||
end_frame = sequence_info['endFrame']
|
||||
|
||||
init_omit = 0
|
||||
if 'initOmit' in sequence_info:
|
||||
init_omit = sequence_info['initOmit']
|
||||
|
||||
frames = ['{base_path}/{sequence_path}/{frame:0{nz}}.{ext}'.format(base_path=self.base_path,
|
||||
sequence_path=sequence_path, frame=frame_num,
|
||||
nz=nz, ext=ext) for frame_num in
|
||||
range(start_frame + init_omit, end_frame + 1)]
|
||||
|
||||
anno_path = '{}/{}'.format(self.base_path, sequence_info['anno_path'])
|
||||
|
||||
# NOTE: NUS has some weird annos which panda cannot handle
|
||||
ground_truth_rect = load_text(str(anno_path), delimiter=(',', None), dtype=np.float64, backend='numpy')
|
||||
return Sequence(sequence_info['name'], frames, 'otb', ground_truth_rect[init_omit:, :],
|
||||
object_class=sequence_info['object_class'])
|
||||
|
||||
def __len__(self):
|
||||
return len(self.sequence_info_list)
|
||||
|
||||
def get_fileNames(self, rootdir):
|
||||
fs = []
|
||||
fs_all = []
|
||||
for root, dirs, files in os.walk(rootdir, topdown=True):
|
||||
files.sort()
|
||||
files.sort(key=len)
|
||||
if files is not None:
|
||||
for name in files:
|
||||
_, ending = os.path.splitext(name)
|
||||
if ending == ".jpg":
|
||||
_, root_ = os.path.split(root)
|
||||
fs.append(os.path.join(root_, name))
|
||||
fs_all.append(os.path.join(root, name))
|
||||
|
||||
return fs_all, fs
|
||||
|
||||
def _get_sequence_info_list(self, base_path):
|
||||
sequence_info_list = []
|
||||
for scene in os.listdir(base_path):
|
||||
if '.' in scene:
|
||||
continue
|
||||
videos = os.listdir(os.path.join(base_path, scene))
|
||||
for video in videos:
|
||||
_, fs = self.get_fileNames(os.path.join(base_path, scene, video))
|
||||
video_tmp = {"name": video, "path": scene + '/' + video, "startFrame": 1, "endFrame": len(fs),
|
||||
"nz": len(fs[0].split('/')[-1].split('.')[0]), "ext": "jpg",
|
||||
"anno_path": scene + '/' + video + "/groundtruth.txt",
|
||||
"object_class": "unknown"}
|
||||
sequence_info_list.append(video_tmp)
|
||||
|
||||
return sequence_info_list # sequence_info_list_50 #
|
||||
Reference in New Issue
Block a user