LiDAR-Perfect-Depth / code /ppd /data /hypersim.py
chenming-wu's picture
code
436b829 verified
from ppd.data.depth_estimation import Dataset as BaseDataset
from ppd.data.depth_estimation import *
import os
import json
from ppd.utils.logger import Log
class Dataset(BaseDataset):
def build_metas(self):
self.dataset_name = 'hypersim'
splits = json.load(open(self.cfg.split_path))
key_rgb = f"{self.cfg.split}_rgb_paths"
rgb_paths = splits[key_rgb]
key_dpt = f"{self.cfg.split}_dpt_paths"
dpt_paths = splits[key_dpt]
assert len(rgb_paths) == len(dpt_paths)
self.rgb_files = [os.path.join(self.cfg.data_root, rgb_path)
for rgb_path in rgb_paths]
self.depth_files = [os.path.join(
self.cfg.data_root, dpt_path) for dpt_path in dpt_paths]
def read_rgb_name(self, index):
return '__'.join(self.rgb_files[index].split('/')[-4:])
def read_depth(self, index, depth=None):
if not hasattr(self, 'depth_files'):
return None, None
Log.debug(index, self.depth_files[index])
start_time = time.time()
depth_path = self.depth_files[index]
depth = cv2.imread(depth_path, cv2.IMREAD_ANYCOLOR |
cv2.IMREAD_ANYDEPTH) / 1000.
end_time = time.time()
if end_time - start_time > 1:
Log.warn(
f'Long time to read {self.depth_files[index]}: {end_time - start_time}')
valid_mask = np.logical_and(
(depth > 0.1) & (depth < 65.0), ~np.isnan(depth)) & (~np.isinf(depth))
if valid_mask.sum() == 0:
Log.warn('No valid mask in the depth map of {}'.format(
self.depth_files[index]))
if valid_mask.sum() != 0 and np.isnan(depth).sum() != 0:
depth[np.isnan(depth)] = depth[valid_mask].max()
if valid_mask.sum() != 0 and np.isinf(depth).sum() != 0:
depth[np.isinf(depth)] = depth[valid_mask].max()
return depth, valid_mask.astype(np.uint8)