define-hf-demo / vidar /datasets /GenericDataset.py
Jiading Fang
add define
fc16538
# 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)
@staticmethod
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)