EasyMocap/apps/vis/vis_smpl.py

50 lines
1.9 KiB
Python
Raw Normal View History

2021-08-28 20:50:20 +08:00
'''
@ Date: 2021-07-19 20:37:16
@ Author: Qing Shuai
@ LastEditors: Qing Shuai
@ LastEditTime: 2021-08-28 20:42:44
@ FilePath: /EasyMocapRelease/apps/vis/vis_smpl.py
'''
from easymocap.config import Config, load_object
import open3d as o3d
from easymocap.visualize.o3dwrapper import Vector3dVector, create_mesh, create_coord
import numpy as np
def update_vis(vis, mesh, body_model, params):
vertices = body_model(return_verts=True, return_tensor=False, **params)[0]
mesh.vertices = Vector3dVector(vertices)
vis.update_geometry(model)
vis.poll_events()
vis.update_renderer()
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--cfg', type=str,
default='config/model/smpl_neutral.yml')
parser.add_argument('--key', type=str,
default='poses')
parser.add_argument('--num', type=int, default=50)
parser.add_argument('--debug', action='store_true')
args = parser.parse_args()
key = args.key
config = Config.load(args.cfg)
body_model = load_object(config.module, config.args)
params = body_model.init_params(1)
vertices = body_model(return_verts=True, return_tensor=False, **params)
joints = body_model(return_verts=False, return_smpl_joints=True, return_tensor=False, **params)
model = create_mesh(vertices=vertices[0], faces=body_model.faces)
vis = o3d.visualization.Visualizer()
vis.create_window(width=900, height=900)
vis.add_geometry(model)
params = body_model.init_params(1)
var_ranges = np.linspace(0, np.pi/2, args.num)
var_ranges = np.concatenate([-var_ranges, -var_ranges[::-1], var_ranges, var_ranges[::-1]])
for npose in range(54, params[key].shape[1]):
print('[Vis] {}: {}'.format(key, npose))
for i in range(var_ranges.shape[0]):
params[key][0, npose] = var_ranges[i]
update_vis(vis, model, body_model, params)
import ipdb; ipdb.set_trace()