Spaces:
Running on Zero
Running on Zero
| import os | |
| import numpy as np | |
| from .geometry import camera_geometry, collect_points | |
| _CAMERA_COLORS = np.array( | |
| [ | |
| [239, 68, 68, 255], | |
| [14, 165, 233, 255], | |
| [34, 197, 94, 255], | |
| [245, 158, 11, 255], | |
| ], | |
| dtype=np.uint8, | |
| ) | |
| def _camera_mesh(center, corners, color): | |
| import trimesh | |
| vertices = np.vstack([center[None], corners]).astype(np.float32) | |
| faces = np.array( | |
| [ | |
| [0, 1, 2], | |
| [0, 2, 3], | |
| [0, 3, 4], | |
| [0, 4, 1], | |
| [1, 2, 3], | |
| [1, 3, 4], | |
| ], | |
| dtype=np.int64, | |
| ) | |
| mesh = trimesh.Trimesh(vertices=vertices, faces=faces, process=False) | |
| mesh.visual.face_colors = np.tile(color[None], (faces.shape[0], 1)) | |
| return mesh | |
| def export_glb( | |
| session_dir: str, | |
| branch: str, | |
| display_mode: str, | |
| frame_index: int, | |
| mask_sky: bool, | |
| show_cameras: bool, | |
| camera_scale: float, | |
| max_points: int, | |
| ) -> str: | |
| import trimesh | |
| points, colors, _ = collect_points( | |
| session_dir=session_dir, | |
| branch=branch, | |
| display_mode=display_mode, | |
| frame_index=frame_index, | |
| mask_sky=mask_sky, | |
| max_points=max_points, | |
| seed=13, | |
| ) | |
| if len(points) == 0: | |
| raise ValueError("No valid points to export") | |
| scene = trimesh.Scene() | |
| scene.add_geometry(trimesh.PointCloud(vertices=points, colors=colors)) | |
| if show_cameras: | |
| _, frustums, _ = camera_geometry( | |
| session_dir=session_dir, | |
| display_mode=display_mode, | |
| frame_index=frame_index, | |
| camera_scale_ratio=camera_scale, | |
| points_hint=points, | |
| ) | |
| for idx, (center, corners) in enumerate(frustums): | |
| scene.add_geometry( | |
| _camera_mesh(center, corners, _CAMERA_COLORS[idx % len(_CAMERA_COLORS)]) | |
| ) | |
| export_dir = os.path.join(session_dir, "exports") | |
| os.makedirs(export_dir, exist_ok=True) | |
| branch_slug = branch.lower().replace(" + ", "_").replace(" ", "_") | |
| mode_slug = display_mode.replace(" ", "_").lower() | |
| filename = f"{branch_slug}_{mode_slug}_{frame_index:04d}_sky{int(mask_sky)}_cam{int(show_cameras)}.glb" | |
| path = os.path.join(export_dir, filename) | |
| scene.export(path) | |
| return path | |