|
import numpy as np |
|
import trimesh |
|
import torch |
|
import os.path as osp |
|
import lib.smplx as smplx |
|
from lib.dataset.mesh_util import SMPLX |
|
|
|
smplx_container = SMPLX() |
|
|
|
smpl_npy = "./results/github/econ/obj/304e9c4798a8c3967de7c74c24ef2e38_smpl_00.npy" |
|
smplx_param = np.load(smpl_npy, allow_pickle=True).item() |
|
|
|
for key in smplx_param.keys(): |
|
smplx_param[key] = smplx_param[key].cpu().view(1, -1) |
|
|
|
|
|
smpl_model = smplx.create( |
|
smplx_container.model_dir, |
|
model_type="smplx", |
|
gender="neutral", |
|
age="adult", |
|
use_face_contour=False, |
|
use_pca=False, |
|
num_betas=200, |
|
num_expression_coeffs=50, |
|
ext='pkl') |
|
|
|
smpl_out = smpl_model( |
|
body_pose=smplx_param["body_pose"], |
|
global_orient=smplx_param["global_orient"], |
|
|
|
betas=smplx_param["betas"], |
|
expression=smplx_param["expression"], |
|
jaw_pose=smplx_param["jaw_pose"], |
|
left_hand_pose=smplx_param["left_hand_pose"], |
|
right_hand_pose=smplx_param["right_hand_pose"], |
|
return_verts=True, |
|
return_joint_transformation=True, |
|
return_vertex_transformation=True) |
|
|
|
smpl_verts = smpl_out.vertices.detach()[0] |
|
inv_mat = torch.inverse(smpl_out.vertex_transformation.detach()[0]) |
|
homo_coord = torch.ones_like(smpl_verts)[..., :1] |
|
smpl_verts = inv_mat @ torch.cat([smpl_verts, homo_coord], dim=1).unsqueeze(-1) |
|
smpl_verts = smpl_verts[:, :3, 0].cpu() |
|
|
|
trimesh.Trimesh(smpl_verts, smpl_model.faces).show() |
|
|