Spaces:
Runtime error
Runtime error
# TRI-VIDAR - Copyright 2022 Toyota Research Institute. All rights reserved. | |
import numpy as np | |
from vidar.datasets.BaseDataset import BaseDataset | |
from vidar.datasets.utils.FolderTree import FolderTree | |
from vidar.datasets.utils.misc import stack_sample | |
from vidar.utils.read import read_image | |
class GenericDataset(BaseDataset): | |
def __init__(self, tag=None, single_folder=False, split=None, extension='png', **kwargs): | |
""" | |
Generic dataset, used to load information from folders | |
Parameters | |
---------- | |
tag : String | |
Dataset tag | |
single_folder : Bool | |
Whether the dataset is a single folder | |
split : String | |
Dataset split | |
kwargs : Dict | |
Additional arguments | |
""" | |
super().__init__(**kwargs) | |
self.tag = 'generic' if tag is None else tag | |
if split is None or split == '': | |
split = ('', ) | |
self.rgb_tree = FolderTree( | |
self.path, context=self.context, sub_folders=split, | |
single_folder=single_folder, suffix=f'.{extension}') | |
def __len__(self): | |
"""Dataset length""" | |
return len(self.rgb_tree) | |
def get_intrinsics(rgb): | |
"""Return dummy intrinsics""" | |
return np.array([[rgb.size[0] / 2., 0., rgb.size[0] / 2.], | |
[0., rgb.size[1], rgb.size[1] / 2.], | |
[0., 0., 1.]]) | |
def __getitem__(self, idx): | |
"""Get dataset sample""" | |
samples = [] | |
for _ in self.cameras: | |
# Filename | |
filename = self.rgb_tree.get_item(idx) | |
# Base sample | |
sample = { | |
'idx': idx, | |
'tag': self.tag, | |
'filename': self.relative_path(filename), | |
'splitname': '%010d' % idx | |
} | |
# Image | |
sample['rgb'] = read_image(filename) | |
# Intrinsics | |
sample['intrinsics'] = { | |
0: self.get_intrinsics((sample['rgb'][0])) | |
} | |
# If with context | |
if self.with_context: | |
filename_context = self.rgb_tree.get_context(idx) | |
sample['rgb'].update(read_image(filename_context)) | |
# Stack sample | |
samples.append(sample) | |
# Transform data | |
if self.data_transform: | |
samples = self.data_transform(samples) | |
# Return stacked sample | |
return stack_sample(samples) | |