| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import os.path as osp |
| | import argparse |
| | import pickle |
| |
|
| | import numpy as np |
| | import torch |
| | import open3d as o3d |
| |
|
| | import smplx |
| |
|
| |
|
| | def main(model_folder, corr_fname, ext='npz', |
| | head_color=(0.3, 0.3, 0.6), |
| | gender='neutral'): |
| |
|
| | head_idxs = np.load(corr_fname) |
| |
|
| | model = smplx.create(model_folder, model_type='smplx', |
| | gender=gender, |
| | ext=ext) |
| | betas = torch.zeros([1, 10], dtype=torch.float32) |
| | expression = torch.zeros([1, 10], dtype=torch.float32) |
| |
|
| | output = model(betas=betas, expression=expression, |
| | return_verts=True) |
| | vertices = output.vertices.detach().cpu().numpy().squeeze() |
| | joints = output.joints.detach().cpu().numpy().squeeze() |
| |
|
| | print('Vertices shape =', vertices.shape) |
| | print('Joints shape =', joints.shape) |
| |
|
| | mesh = o3d.geometry.TriangleMesh() |
| | mesh.vertices = o3d.utility.Vector3dVector(vertices) |
| | mesh.triangles = o3d.utility.Vector3iVector(model.faces) |
| | mesh.compute_vertex_normals() |
| |
|
| | colors = np.ones_like(vertices) * [0.3, 0.3, 0.3] |
| | colors[head_idxs] = head_color |
| |
|
| | mesh.vertex_colors = o3d.utility.Vector3dVector(colors) |
| |
|
| | o3d.visualization.draw_geometries([mesh]) |
| |
|
| |
|
| | if __name__ == '__main__': |
| | parser = argparse.ArgumentParser(description='SMPL-X Demo') |
| |
|
| | parser.add_argument('--model-folder', required=True, type=str, |
| | help='The path to the model folder') |
| | parser.add_argument('--corr-fname', required=True, type=str, |
| | dest='corr_fname', |
| | help='Filename with the head correspondences') |
| | parser.add_argument('--gender', type=str, default='neutral', |
| | help='The gender of the model') |
| | parser.add_argument('--ext', type=str, default='npz', |
| | help='Which extension to use for loading') |
| | parser.add_argument('--head', default='right', |
| | choices=['right', 'left'], |
| | type=str, help='Which head to plot') |
| | parser.add_argument('--head-color', type=float, nargs=3, dest='head_color', |
| | default=(0.3, 0.3, 0.6), |
| | help='Color for the head vertices') |
| |
|
| | args = parser.parse_args() |
| |
|
| | model_folder = osp.expanduser(osp.expandvars(args.model_folder)) |
| | corr_fname = args.corr_fname |
| | gender = args.gender |
| | ext = args.ext |
| | head = args.head |
| | head_color = args.head_color |
| |
|
| | main(model_folder, corr_fname, ext=ext, |
| | head_color=head_color, |
| | gender=gender |
| | ) |
| |
|