Spaces:
Configuration error
Configuration error
| ''' | |
| Copyright 2017 Javier Romero, Dimitrios Tzionas, Michael J Black and the Max Planck Gesellschaft. All rights reserved. | |
| This software is provided for research purposes only. | |
| By using this software you agree to the terms of the MANO/SMPL+H Model license here http://mano.is.tue.mpg.de/license | |
| More information about MANO/SMPL+H is available at http://mano.is.tue.mpg.de. | |
| For comments or questions, please email us at: mano@tue.mpg.de | |
| About this file: | |
| ================ | |
| This file defines a wrapper for the loading functions of the MANO model. | |
| Modules included: | |
| - load_model: | |
| loads the MANO model from a given file location (i.e. a .pkl file location), | |
| or a dictionary object. | |
| ''' | |
| import numpy as np | |
| import mano.webuser.lbs as lbs | |
| from mano.webuser.posemapper import posemap | |
| import scipy.sparse as sp | |
| def ischumpy(x): | |
| return hasattr(x, 'dterms') | |
| def verts_decorated(trans, | |
| pose, | |
| v_template, | |
| J_regressor, | |
| weights, | |
| kintree_table, | |
| bs_style, | |
| f, | |
| bs_type=None, | |
| posedirs=None, | |
| betas=None, | |
| shapedirs=None, | |
| want_Jtr=False): | |
| for which in [ | |
| trans, pose, v_template, weights, posedirs, betas, shapedirs | |
| ]: | |
| if which is not None: | |
| assert ischumpy(which) | |
| v = v_template | |
| if shapedirs is not None: | |
| if betas is None: | |
| betas = np.zeros(shapedirs.shape[-1]) | |
| v_shaped = v + shapedirs.dot(betas) | |
| else: | |
| v_shaped = v | |
| if posedirs is not None: | |
| v_posed = v_shaped + posedirs.dot(posemap(bs_type)(pose)) | |
| else: | |
| v_posed = v_shaped | |
| v = v_posed | |
| if sp.issparse(J_regressor): | |
| J_tmpx = np.matmul(J_regressor, v_shaped[:, 0]) | |
| J_tmpy = np.matmul(J_regressor, v_shaped[:, 1]) | |
| J_tmpz = np.matmul(J_regressor, v_shaped[:, 2]) | |
| J = np.vstack((J_tmpx, J_tmpy, J_tmpz)).T | |
| else: | |
| assert (ischumpy(J)) | |
| assert (bs_style == 'lbs') | |
| result, Jtr = lbs.verts_core( | |
| pose, v, J, weights, kintree_table, want_Jtr=True, xp=np) | |
| tr = trans.reshape((1, 3)) | |
| result = result + tr | |
| Jtr = Jtr + tr | |
| result.trans = trans | |
| result.f = f | |
| result.pose = pose | |
| result.v_template = v_template | |
| result.J = J | |
| result.J_regressor = J_regressor | |
| result.weights = weights | |
| result.kintree_table = kintree_table | |
| result.bs_style = bs_style | |
| result.bs_type = bs_type | |
| if posedirs is not None: | |
| result.posedirs = posedirs | |
| result.v_posed = v_posed | |
| if shapedirs is not None: | |
| result.shapedirs = shapedirs | |
| result.betas = betas | |
| result.v_shaped = v_shaped | |
| if want_Jtr: | |
| result.J_transformed = Jtr | |
| return result | |
| def verts_core(pose, | |
| v, | |
| J, | |
| weights, | |
| kintree_table, | |
| bs_style, | |
| want_Jtr=False, | |
| xp=np): | |
| assert (bs_style == 'lbs') | |
| result = lbs.verts_core(pose, v, J, weights, kintree_table, want_Jtr, xp) | |
| return result |