Buckets:
| from pathlib import Path | |
| import mujoco | |
| import numpy as np | |
| from ..geometry import look_at_xyaxes | |
| from .scene import HandScene | |
| class ReconstructedScene(HandScene): | |
| def __init__( | |
| self, hands, camera, intrinsics, image_size, vertices, faces, uv, texture | |
| ): | |
| self.vertices = vertices | |
| self.faces = faces | |
| self.uv = uv | |
| self.texture = str(Path(texture).resolve()) | |
| super().__init__(hands, camera, intrinsics, image_size) | |
| def _compile(self): | |
| spec = mujoco.MjSpec() | |
| spec.visual.global_.offwidth, spec.visual.global_.offheight = (1920, 1080) | |
| spec.visual.headlight.ambient = [0.8, 0.8, 0.8] | |
| spec.visual.headlight.diffuse = [0.2, 0.2, 0.2] | |
| spec.add_texture( | |
| name="scene_rgb", type=mujoco.mjtTexture.mjTEXTURE_2D, file=self.texture | |
| ) | |
| material = spec.add_material(name="scene_rgb", texuniform=False, specular=0) | |
| material.textures[mujoco.mjtTextureRole.mjTEXROLE_RGB] = "scene_rgb" | |
| spec.add_mesh( | |
| name="scene_surface", | |
| uservert=self.vertices.ravel(), | |
| userface=self.faces.ravel(), | |
| usertexcoord=self.uv.ravel(), | |
| userfacetexcoord=self.faces.ravel(), | |
| ) | |
| spec.worldbody.add_geom( | |
| name="scene_surface", | |
| type=mujoco.mjtGeom.mjGEOM_MESH, | |
| meshname="scene_surface", | |
| material="scene_rgb", | |
| contype=0, | |
| conaffinity=0, | |
| ) | |
| spec.worldbody.add_geom( | |
| name="floor", | |
| type=mujoco.mjtGeom.mjGEOM_PLANE, | |
| size=[10, 10, 0.1], | |
| rgba=[0.2, 0.22, 0.26, 1], | |
| ) | |
| for rig in self.rigs: | |
| rig.attach(spec) | |
| mount = spec.worldbody.add_body(name="ego_mount", mocap=True) | |
| mount.add_camera(name="ego", fovy=self.fovy) | |
| eye, target = self._overview_view() | |
| spec.worldbody.add_camera( | |
| name="overview", pos=eye, xyaxes=look_at_xyaxes(eye, target), fovy=65 | |
| ) | |
| self.spec = spec | |
| return spec.compile() | |
| def render_ids(self, camera="ego", size=(518, 294)): | |
| with mujoco.Renderer(self.model, height=size[1], width=size[0]) as renderer: | |
| renderer.enable_segmentation_rendering() | |
| frames = [] | |
| for index in range(len(self)): | |
| self.set_frame(index) | |
| renderer.update_scene(self.data, camera=camera) | |
| segmentation = renderer.render() | |
| frames.append( | |
| np.where( | |
| segmentation[..., 1] == mujoco.mjtObj.mjOBJ_GEOM, | |
| segmentation[..., 0], | |
| -1, | |
| ) | |
| ) | |
| return np.stack(frames) | |
Xet Storage Details
- Size:
- 2.78 kB
- Xet hash:
- e8bea22a067bbcec21dfd5aa45fa0a1c1d1e4ed79e8a1f96363429501da8e7d3
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.