""" Utility functions for visualization """ from argparse import ArgumentParser, Namespace from distutils.util import strtobool import rerun as rr def log_data_to_rerun(image, depthmap, pose, intrinsics, base_name, mask=None): """ Log camera and image data to Rerun visualization tool. Parameters ---------- image : numpy.ndarray RGB image to be logged depthmap : numpy.ndarray Depth map corresponding to the image pose : numpy.ndarray 4x4 camera pose matrix with rotation (3x3) and translation (3x1) intrinsics : numpy.ndarray Camera intrinsic matrix base_name : str Base name for the logged entities in Rerun mask : numpy.ndarray, optional Optional segmentation mask for the depth image """ # Log camera info and loaded data height, width = image.shape[0], image.shape[1] rr.log( base_name, rr.Transform3D( translation=pose[:3, 3], mat3x3=pose[:3, :3], ), ) rr.log( f"{base_name}/pinhole", rr.Pinhole( image_from_camera=intrinsics, height=height, width=width, camera_xyz=rr.ViewCoordinates.RDF, ), ) rr.log( f"{base_name}/pinhole/rgb", rr.Image(image), ) rr.log( f"{base_name}/pinhole/depth", rr.DepthImage(depthmap), ) if mask is not None: rr.log( f"{base_name}/pinhole/depth_mask", rr.SegmentationImage(mask), ) def str2bool(v): return bool(strtobool(v)) def script_add_rerun_args(parser: ArgumentParser) -> None: """ Add common Rerun script arguments to `parser`. Change Log from https://github.com/rerun-io/rerun/blob/29eb8954b08e59ff96943dc0677f46f7ea4ea734/rerun_py/rerun_sdk/rerun/script_helpers.py#L65: - Added default portforwarding url for ease of use - Update parser types Parameters ---------- parser : ArgumentParser The parser to add arguments to. Returns ------- None """ parser.add_argument( "--headless", type=str2bool, nargs="?", const=True, default=True, help="Don't show GUI", ) parser.add_argument( "--connect", dest="connect", type=str2bool, nargs="?", const=True, default=True, help="Connect to an external viewer", ) parser.add_argument( "--serve", dest="serve", type=str2bool, nargs="?", const=True, default=False, help="Serve a web viewer (WARNING: experimental feature)", ) parser.add_argument( "--url", type=str, default="rerun+http://127.0.0.1:2004/proxy", help="Connect to this HTTP(S) URL", ) parser.add_argument( "--save", type=str, default=None, help="Save data to a .rrd file at this path" ) parser.add_argument( "-o", "--stdout", dest="stdout", action="store_true", help="Log data to standard output, to be piped into a Rerun Viewer", ) def init_rerun_args( headless=True, connect=True, serve=False, url="rerun+http://127.0.0.1:2004/proxy", save=None, stdout=False, ) -> Namespace: """ Initialize common Rerun script arguments. Parameters ---------- headless : bool, optional Don't show GUI, by default True connect : bool, optional Connect to an external viewer, by default True serve : bool, optional Serve a web viewer (WARNING: experimental feature), by default False url : str, optional Connect to this HTTP(S) URL, by default rerun+http://127.0.0.1:2004/proxy save : str, optional Save data to a .rrd file at this path, by default None stdout : bool, optional Log data to standard output, to be piped into a Rerun Viewer, by default False Returns ------- Namespace The parsed arguments. """ rerun_args = Namespace() rerun_args.headless = headless rerun_args.connect = connect rerun_args.serve = serve rerun_args.url = url rerun_args.save = save rerun_args.stdout = stdout return rerun_args