SMPLer-X / common /utils /smplx /examples /vis_mano_vertices.py
onescotch
add huggingface implementation
2de1f98
raw
history blame
3.52 kB
# -*- coding: utf-8 -*-
# Max-Planck-Gesellschaft zur Förderung der Wissenschaften e.V. (MPG) is
# holder of all proprietary rights on this computer program.
# You can only use this computer program if you have closed
# a license agreement with MPG or you get the right to use the computer
# program from someone who is authorized to grant you that right.
# Any use of the computer program without a valid license is prohibited and
# liable to prosecution.
#
# Copyright©2019 Max-Planck-Gesellschaft zur Förderung
# der Wissenschaften e.V. (MPG). acting on behalf of its Max Planck Institute
# for Intelligent Systems. All rights reserved.
#
# Contact: ps-license@tuebingen.mpg.de
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',
hand_color=(0.3, 0.3, 0.6),
gender='neutral', hand='right'):
with open(corr_fname, 'rb') as f:
idxs_data = pickle.load(f)
if hand == 'both':
hand_idxs = np.concatenate(
[idxs_data['left_hand'], idxs_data['right_hand']]
)
else:
hand_idxs = idxs_data[f'{hand}_hand']
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[hand_idxs] = hand_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 hand 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('--hand', default='right',
choices=['right', 'left', 'both'],
type=str, help='Which hand to plot')
parser.add_argument('--hand-color', type=float, nargs=3, dest='hand_color',
default=(0.3, 0.3, 0.6),
help='Color for the hand 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
hand = args.hand
hand_color = args.hand_color
main(model_folder, corr_fname, ext=ext,
hand_color=hand_color,
gender=gender, hand=hand
)