Spaces:
Runtime error
Runtime error
| from pathlib import Path | |
| import numpy as np | |
| import rerun as rr | |
| import rerun.blueprint as rrb | |
| from einops import rearrange | |
| from jaxtyping import Bool, Float32, Float64, UInt8 | |
| from monopriors.depth_utils import clip_disparity, depth_edges_mask, depth_to_points | |
| from monopriors.relative_depth_models.depth_anything_v2 import ( | |
| RelativeDepthPrediction, | |
| ) | |
| def log_relative_pred( | |
| parent_log_path: Path, | |
| relative_pred: RelativeDepthPrediction, | |
| rgb_hw3: UInt8[np.ndarray, "h w 3"], | |
| seg_mask_hw: UInt8[np.ndarray, "h w"] | None = None, | |
| remove_flying_pixels: bool = True, | |
| jpeg_quality: int = 90, | |
| depth_edge_threshold: float = 1.1, | |
| ) -> None: | |
| cam_log_path: Path = parent_log_path / "camera" | |
| pinhole_path: Path = cam_log_path / "pinhole" | |
| # assume camera is at the origin | |
| cam_T_world_44: Float64[np.ndarray, "4 4"] = np.eye(4) | |
| rr.log( | |
| f"{cam_log_path}", | |
| rr.Transform3D( | |
| translation=cam_T_world_44[:3, 3], | |
| mat3x3=cam_T_world_44[:3, :3], | |
| from_parent=True, | |
| ), | |
| ) | |
| rr.log( | |
| f"{pinhole_path}", | |
| rr.Pinhole( | |
| image_from_camera=relative_pred.K_33, | |
| width=rgb_hw3.shape[1], | |
| height=rgb_hw3.shape[0], | |
| camera_xyz=rr.ViewCoordinates.RDF, | |
| ), | |
| ) | |
| rr.log(f"{pinhole_path}/image", rr.Image(rgb_hw3).compress(jpeg_quality=jpeg_quality)) | |
| depth_hw: Float32[np.ndarray, "h w"] = relative_pred.depth | |
| if remove_flying_pixels: | |
| edges_mask: Bool[np.ndarray, "h w"] = depth_edges_mask(depth_hw, threshold=depth_edge_threshold) | |
| rr.log( | |
| f"{pinhole_path}/edge_mask", | |
| rr.SegmentationImage(edges_mask.astype(np.uint8)), | |
| ) | |
| depth_hw: Float32[np.ndarray, "h w"] = depth_hw * ~edges_mask | |
| if seg_mask_hw is not None: | |
| rr.log( | |
| f"{pinhole_path}/segmentation", | |
| rr.SegmentationImage(seg_mask_hw), | |
| ) | |
| depth_hw: Float32[np.ndarray, "h w"] = depth_hw # * seg_mask_hw | |
| rr.log(f"{pinhole_path}/depth", rr.DepthImage(depth_hw)) | |
| # removes outliers from disparity (sometimes we can get weirdly large values) | |
| clipped_disparity: UInt8[np.ndarray, "h w"] = clip_disparity(relative_pred.disparity) | |
| # log to cam_log_path to avoid backprojecting disparity | |
| rr.log(f"{cam_log_path}/disparity", rr.DepthImage(clipped_disparity)) | |
| depth_1hw: Float32[np.ndarray, "1 h w"] = rearrange(depth_hw, "h w -> 1 h w") | |
| pts_3d: Float32[np.ndarray, "h w 3"] = depth_to_points(depth_1hw, relative_pred.K_33) | |
| rr.log( | |
| f"{parent_log_path}/point_cloud", | |
| rr.Points3D( | |
| positions=pts_3d.reshape(-1, 3), | |
| colors=rgb_hw3.reshape(-1, 3), | |
| ), | |
| ) | |
| def create_blueprint(parent_log_path: Path) -> rrb.Blueprint: | |
| cam_log_path: Path = parent_log_path / "camera" | |
| pinhole_path: Path = cam_log_path / "pinhole" | |
| contents: list = [ | |
| rrb.Vertical( | |
| rrb.Spatial2DView( | |
| origin=f"{pinhole_path}/image", | |
| ), | |
| rrb.Spatial2DView( | |
| origin=f"{pinhole_path}/segmentation", | |
| ), | |
| rrb.Spatial2DView( | |
| origin=f"{cam_log_path}/disparity", | |
| ), | |
| ), | |
| rrb.Spatial3DView(origin=f"{parent_log_path}"), | |
| ] | |
| blueprint = rrb.Blueprint( | |
| rrb.Horizontal(contents=contents, column_shares=[1, 3]), | |
| collapse_panels=True, | |
| ) | |
| return blueprint | |