Spaces:
Build error
Build error
import imageio | |
import matplotlib | |
from ops.utils import * | |
from ops.gs.basic import * | |
from ops.trajs import _generate_trajectory | |
class Check(): | |
def __init__(self) -> None: | |
pass | |
def _visual_pcd(self,scene:Gaussian_Scene): | |
xyzs,rgbs = [],[] | |
for i,gf in enumerate(scene.gaussian_frames): | |
xyz = gf.xyz.detach().cpu().numpy() | |
rgb = torch.sigmoid(gf.rgb).detach().cpu().numpy() | |
opacity = gf.opacity.detach().squeeze().cpu().numpy() > 1e-5 | |
xyzs.append(xyz[opacity]) | |
rgbs.append(rgb[opacity]) | |
xyzs = np.concatenate(xyzs,axis=0) | |
rgbs = np.concatenate(rgbs,axis=0) | |
visual_pcd(xyzs,color=rgbs,normal=True) | |
def _render_video(self,scene:Gaussian_Scene,save_dir='./'): | |
# render 5times frames | |
nframes = len(scene.frames)*25 | |
video_trajs = _generate_trajectory(None,scene,nframes=nframes) | |
H,W,intrinsic = scene.frames[0].H,scene.frames[0].W,deepcopy(scene.frames[0].intrinsic) | |
if H<W: | |
if H>512: | |
ratio = 512/H | |
W,H = int(W*ratio),int(H*ratio) | |
intrinsic[0:2] = intrinsic[0:2]*ratio | |
else: | |
if W>512: | |
ratio = 512/W | |
W,H = int(W*ratio),int(H*ratio) | |
intrinsic[0:2] = intrinsic[0:2]*ratio | |
# render | |
rgbs,dpts = [],[] | |
print(f'[INFO] rendering final video with {nframes} frames...') | |
for pose in video_trajs: | |
frame = Frame(H=H,W=W, | |
intrinsic=intrinsic, | |
extrinsic=pose) | |
rgb,dpt,alpha = scene._render_RGBD(frame) | |
rgb = rgb.detach().float().cpu().numpy() | |
dpt = dpt.detach().float().cpu().numpy() | |
dpts.append(dpt) | |
rgbs.append((rgb * 255).astype(np.uint8)) | |
rgbs = np.stack(rgbs, axis=0) | |
dpts = np.stack(dpts, axis=0) | |
valid_dpts = dpts[dpts>0.] | |
_min = np.percentile(valid_dpts, 1) | |
_max = np.percentile(valid_dpts,99) | |
dpts = (dpts-_min) / (_max-_min) | |
dpts = dpts.clip(0,1) | |
cm = matplotlib.colormaps["plasma"] | |
dpts_color = cm(dpts,bytes=False)[...,0:3] | |
dpts_color = (dpts_color*255).astype(np.uint8) | |
imageio.mimwrite(f'{save_dir}video_rgb.mp4',rgbs,fps=20) | |
imageio.mimwrite(f'{save_dir}video_dpt.mp4',dpts_color,fps=20) | |