| 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) |
|
|
|
|