import os, sys, torch, imageio, logging, importlib, argparse import cv2 import numpy as np import yaml try: import open3d as o3d except: o3d = None AMP_DTYPE = torch.float16 def set_logging_format(level=logging.INFO): importlib.reload(logging) FORMAT = '%(message)s' logging.basicConfig(level=level, format=FORMAT, datefmt='%m-%d|%H:%M:%S') def set_seed(random_seed): import torch,random np.random.seed(random_seed) random.seed(random_seed) torch.manual_seed(random_seed) torch.cuda.manual_seed_all(random_seed) torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False def toOpen3dCloud(points,colors=None,normals=None): cloud = o3d.geometry.PointCloud() cloud.points = o3d.utility.Vector3dVector(points.astype(np.float64)) if colors is not None: if colors.max()>1: colors = colors/255.0 cloud.colors = o3d.utility.Vector3dVector(colors.astype(np.float64)) if normals is not None: cloud.normals = o3d.utility.Vector3dVector(normals.astype(np.float64)) return cloud def depth2xyzmap(depth:np.ndarray, K, uvs:np.ndarray=None, zmin=0.1): invalid_mask = (depth thres is invalid """ disp = disp.copy() H,W = disp.shape[:2] invalid_mask = disp>=invalid_thres if (invalid_mask==0).sum()==0: other_output['min_val'] = None other_output['max_val'] = None return np.zeros((H,W,3)) if min_val is None: min_val = disp[invalid_mask==0].min() if max_val is None: max_val = disp[invalid_mask==0].max() other_output['min_val'] = min_val other_output['max_val'] = max_val vis = ((disp-min_val)/(max_val-min_val)).clip(0,1) * 255 if cmap is None: vis = cv2.applyColorMap(vis.clip(0, 255).astype(np.uint8), color_map)[...,::-1] else: vis = cmap(vis.astype(np.uint8))[...,:3]*255 if invalid_mask.any(): vis[invalid_mask] = 0 return vis.astype(np.uint8)