I2D-LocX / core /dataset.py
xubo3's picture
Upload I2D-LocX code and sample data
c6bd79b verified
Raw
History Blame Contribute Delete
4.44 kB
import os
import torch
import numpy as np
from easydict import EasyDict as edict
from .utils import is_path_exist, CameraIntrinsicParameters, EngineMode, Dataset_I2P, register_dataset
@register_dataset
class Dataset_Sample(Dataset_I2P):
def __init__(self, cfg: edict, engine_mode: EngineMode = EngineMode.TRAIN) -> None:
super(Dataset_Sample, self).__init__(cfg, engine_mode)
def process_sequence(self, sequence: str) -> None:
for timestamp in [0, 100, 200, 300]:
timestamp_formatted = f"{timestamp:06d}"
map_file_path = [
self._cfg["root_folder"],
sequence,
self._cfg["maps_folder"],
timestamp_formatted + ".h5",
]
img_file_path = [
self._cfg["root_folder"],
sequence,
self._cfg["imgs_folder"],
timestamp_formatted + ".png",
]
if not (is_path_exist(*map_file_path) and is_path_exist(*img_file_path)):
continue
self.all_files.append("/".join([sequence, timestamp_formatted]))
def get_test_RT(self) -> list:
test_RT = []
if self._engine_mode == EngineMode.TRAIN:
return test_RT
rad_factor = np.pi / 180.0
len_files = len(self.all_files)
data = [
[
i,
tx,
ty,
tz,
rx,
ry,
rz,
]
for i, (tx, ty, tz, rx, ry, rz) in enumerate(
zip(
np.random.uniform(
-self._cfg["max_t"], self._cfg["max_t"], len_files
),
np.random.uniform(
-self._cfg["max_t"], self._cfg["max_t"], len_files
),
np.random.uniform(
-self._cfg["max_t"], min(self._cfg["max_t"], 1.0), len_files
),
np.random.uniform(
-self._cfg["max_r"], self._cfg["max_r"], len_files
)
* rad_factor,
np.random.uniform(
-self._cfg["max_r"], self._cfg["max_r"], len_files
)
* rad_factor,
np.random.uniform(
-self._cfg["max_r"], self._cfg["max_r"], len_files
)
* rad_factor,
)
)
]
test_RT.extend(data)
assert len(test_RT) == len(
self.all_files
), f"Something wrong {len(test_RT)} != {len(self.all_files)}"
return test_RT
def get_camera_parameters(
self, path: str
) -> tuple[CameraIntrinsicParameters, torch.Tensor]:
sequence = int(path)
if sequence == 0:
camera_intrinsic_parameters = CameraIntrinsicParameters(
718.856, 718.856, 607.1928, 185.2157
)
elif sequence == 3:
camera_intrinsic_parameters = CameraIntrinsicParameters(
721.5377, 721.5377, 609.5593, 172.854
)
elif sequence in [5, 6, 7, 8, 9, 10]:
camera_intrinsic_parameters = CameraIntrinsicParameters(
707.0912, 707.0912, 601.8873, 183.1104
)
else:
raise TypeError("Sequence Not Available")
return camera_intrinsic_parameters, None
def get_point_cloud_path(self, idx) -> str:
item = self.all_files[idx]
sequence = str(item.split("/")[0])
timestamp = str(item.split("/")[1])
pointcloud_path = os.path.join(
self._cfg["root_folder"],
sequence,
self._cfg["maps_folder"],
timestamp + ".h5",
)
return pointcloud_path
def get_image_path(self, idx) -> str:
item = self.all_files[idx]
sequence = str(item.split("/")[0])
timestamp = str(item.split("/")[1])
image_path = os.path.join(
self._cfg["root_folder"],
sequence,
self._cfg["imgs_folder"],
timestamp + ".png",
)
return image_path
def get_camera_parameters_path(self, idx) -> str:
item = self.all_files[idx]
sequence = str(item.split("/")[0])
return sequence