Spaces:
Runtime error
Runtime error
| import os | |
| os.environ['DISPLAY'] = ':0.0' | |
| os.environ['PYOPENGL_PLATFORM'] = 'osmesa' | |
| os.environ["MUJOCO_GL"] = "osmesa" | |
| from argparse import ArgumentParser | |
| import numpy as np | |
| import OpenGL.GL as gl | |
| import imageio | |
| import cv2 | |
| import random | |
| import torch | |
| import moviepy.editor as mp | |
| from scipy.spatial.transform import Rotation as RRR | |
| import mGPT.render.matplot.plot_3d_global as plot_3d | |
| from mGPT.render.pyrender.hybrik_loc2rot import HybrIKJointsToRotmat | |
| from mGPT.render.pyrender.smpl_render import SMPLRender | |
| if __name__ == '__main__': | |
| parser = ArgumentParser() | |
| parser.add_argument('--joints_path', type=str, help='Path to joints data') | |
| parser.add_argument('--method', type=str, help='Method for rendering') | |
| parser.add_argument('--output_mp4_path', type=str, help='Path to output MP4 file') | |
| parser.add_argument('--smpl_model_path', type=str, help='Path to SMPL model') | |
| args = parser.parse_args() | |
| joints_path = args.joints_path | |
| method = args.method | |
| output_mp4_path = args.output_mp4_path | |
| smpl_model_path = args.smpl_model_path | |
| data = np.load(joints_path) | |
| if method == 'slow': | |
| if len(data.shape) == 4: | |
| data = data[0] | |
| data = data - data[0, 0] | |
| pose_generator = HybrIKJointsToRotmat() | |
| pose = pose_generator(data) | |
| pose = np.concatenate([ | |
| pose, | |
| np.stack([np.stack([np.eye(3)] * pose.shape[0], 0)] * 2, 1) | |
| ], 1) | |
| shape = [768, 768] | |
| render = SMPLRender(smpl_model_path) | |
| r = RRR.from_rotvec(np.array([np.pi, 0.0, 0.0])) | |
| pose[:, 0] = np.matmul(r.as_matrix().reshape(1, 3, 3), pose[:, 0]) | |
| vid = [] | |
| aroot = data[:, 0] | |
| aroot[:, 1:] = -aroot[:, 1:] | |
| params = dict(pred_shape=np.zeros([1, 10]), | |
| pred_root=aroot, | |
| pred_pose=pose) | |
| render.init_renderer([shape[0], shape[1], 3], params) | |
| for i in range(data.shape[0]): | |
| renderImg = render.render(i) | |
| vid.append(renderImg) | |
| out = np.stack(vid, axis=0) | |
| output_gif_path = output_mp4_path[:-4] + '.gif' | |
| imageio.mimwrite(output_gif_path, out, duration=50) | |
| out_video = mp.VideoFileClip(output_gif_path) | |
| out_video.write_videofile(output_mp4_path) | |
| elif method == 'fast': | |
| output_gif_path = output_mp4_path[:-4] + '.gif' | |
| if len(data.shape) == 3: | |
| data = data[None] | |
| if isinstance(data, torch.Tensor): | |
| data = data.cpu().numpy() | |
| pose_vis = plot_3d.draw_to_batch(data, [''], [output_gif_path]) | |
| out_video = mp.VideoFileClip(output_gif_path) | |
| out_video.write_videofile(output_mp4_path) | |