Spaces:
Runtime error
Runtime error
| import os | |
| import numpy as np | |
| import trimesh | |
| from typing import List, Tuple | |
| from dust3r.utils.device import to_numpy | |
| from dust3r.viz import pts3d_to_trimesh, cat_meshes | |
| from config import DEFAULT_CONF_THRESHOLD | |
| def filter_background_points(scene, conf_threshold: float = DEFAULT_CONF_THRESHOLD): | |
| masks = scene.get_masks() | |
| confs = [c for c in scene.im_conf] | |
| for i, (mask, conf) in enumerate(zip(masks, confs)): | |
| conf_mask = conf > conf_threshold | |
| masks[i] = mask & conf_mask | |
| return scene | |
| def create_3d_output(outdir: str, imgs: List, pts3d: List, mask: List, | |
| focals: List, cams2world: List, as_pointcloud: bool = False) -> str: | |
| pts3d, imgs, focals, cams2world = map(to_numpy, [pts3d, imgs, focals, cams2world]) | |
| scene = trimesh.Scene() | |
| if as_pointcloud: | |
| pts = np.concatenate([p[m] for p, m in zip(pts3d, mask)]) | |
| col = np.concatenate([imgs[i][mask[i]] for i in range(len(imgs))]) | |
| geometry = trimesh.PointCloud(pts.reshape(-1, 3), colors=col.reshape(-1, 3)) | |
| else: | |
| meshes = [pts3d_to_trimesh(imgs[i], pts3d[i], mask[i]) for i in range(len(imgs))] | |
| geometry = trimesh.Trimesh(**cat_meshes(meshes)) | |
| centroid = geometry.centroid | |
| geometry.apply_translation(-centroid) | |
| scene.add_geometry(geometry) | |
| flip_correction = np.eye(4) | |
| flip_correction[1, 1] = -1 | |
| flip_correction[2, 2] = -1 | |
| scene.apply_transform(flip_correction) | |
| outfile = os.path.join(outdir, 'object.glb') | |
| scene.export(outfile) | |
| return outfile | |