40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
def ready_arguments(fname_or_dict):
|
|
import numpy as np
|
|
import pickle
|
|
import chumpy as ch
|
|
from chumpy.ch import MatVecMult
|
|
from smpl.native.webuser.posemapper import posemap
|
|
|
|
if not isinstance(fname_or_dict, dict):
|
|
dd = pickle.load(open(fname_or_dict, 'rb'), encoding='latin1')
|
|
# dd = pickle.load(open(fname_or_dict, 'rb'))
|
|
else:
|
|
dd = fname_or_dict
|
|
|
|
want_shapemodel = 'shapedirs' in dd
|
|
nposeparms = dd['kintree_table'].shape[1] * 3
|
|
|
|
if 'trans' not in dd:
|
|
dd['trans'] = np.zeros(3)
|
|
if 'pose' not in dd:
|
|
dd['pose'] = np.zeros(nposeparms)
|
|
if 'shapedirs' in dd and 'betas' not in dd:
|
|
dd['betas'] = np.zeros(dd['shapedirs'].shape[-1])
|
|
|
|
for s in ['v_template', 'weights', 'posedirs', 'pose', 'trans', 'shapedirs', 'betas', 'J']:
|
|
if (s in dd) and not hasattr(dd[s], 'dterms'):
|
|
dd[s] = ch.array(dd[s])
|
|
|
|
if want_shapemodel:
|
|
dd['v_shaped'] = dd['shapedirs'].dot(dd['betas']) + dd['v_template']
|
|
v_shaped = dd['v_shaped']
|
|
J_tmpx = MatVecMult(dd['J_regressor'], v_shaped[:, 0])
|
|
J_tmpy = MatVecMult(dd['J_regressor'], v_shaped[:, 1])
|
|
J_tmpz = MatVecMult(dd['J_regressor'], v_shaped[:, 2])
|
|
dd['J'] = ch.vstack((J_tmpx, J_tmpy, J_tmpz)).T
|
|
dd['v_posed'] = v_shaped + dd['posedirs'].dot(posemap(dd['bs_type'])(dd['pose']))
|
|
else:
|
|
dd['v_posed'] = dd['v_template'] + dd['posedirs'].dot(posemap(dd['bs_type'])(dd['pose']))
|
|
|
|
return dd
|