Spaces:
Runtime error
Runtime error
| import numpy as np | |
| from .materials import body_material | |
| # green | |
| # GT_SMPL = body_material(0.009, 0.214, 0.029) | |
| GT_SMPL = body_material(0.035, 0.415, 0.122) | |
| # blue | |
| # GEN_SMPL = body_material(0.022, 0.129, 0.439) | |
| # Blues => cmap(0.87) | |
| # GEN_SMPL = body_material(0.035, 0.322, 0.615) | |
| # Oranges => cmap(0.87) | |
| GEN_SMPL = body_material(0.658, 0.214, 0.0114) | |
| class Meshes: | |
| def __init__(self, data, *, gt, mode, faces_path, canonicalize, always_on_floor, oldrender=True, is_smplx=False, **kwargs): | |
| data = prepare_meshes(data, canonicalize=canonicalize, | |
| always_on_floor=always_on_floor, | |
| is_smplx=is_smplx) | |
| if isinstance(faces_path, str): | |
| self.faces = np.load(faces_path) | |
| else: | |
| self.faces = faces_path | |
| self.data = data | |
| self.mode = mode | |
| self.oldrender = oldrender | |
| self.N = len(data) | |
| self.trajectory = data[:, :, [0, 1]].mean(1) | |
| if gt: | |
| self.mat = GT_SMPL | |
| else: | |
| self.mat = GEN_SMPL | |
| def get_sequence_mat(self, frac): | |
| import matplotlib | |
| # cmap = matplotlib.cm.get_cmap('Blues') | |
| cmap = matplotlib.cm.get_cmap('Oranges') | |
| # begin = 0.60 | |
| # end = 0.90 | |
| begin = 0.50 | |
| end = 0.90 | |
| rgbcolor = cmap(begin + (end-begin)*frac) | |
| mat = body_material(*rgbcolor, oldrender=self.oldrender) | |
| return mat | |
| def get_root(self, index): | |
| return self.data[index].mean(0) | |
| def get_mean_root(self): | |
| return self.data.mean((0, 1)) | |
| def load_in_blender(self, index, mat): | |
| vertices = self.data[index] | |
| faces = self.faces | |
| name = f"{str(index).zfill(4)}" | |
| from .tools import load_numpy_vertices_into_blender | |
| load_numpy_vertices_into_blender(vertices, faces, name, mat) | |
| return name | |
| def __len__(self): | |
| return self.N | |
| def prepare_meshes(data, canonicalize=True, always_on_floor=False, is_smplx=False): | |
| if canonicalize: | |
| print("No canonicalization for now") | |
| # fitted mesh do not need fixing axis | |
| # fix axis | |
| if is_smplx: | |
| data[..., 1] = - data[..., 1] | |
| # data[..., 0] = - data[..., 0] | |
| # Swap axis (gravity=Z instead of Y) | |
| data = data[..., [2, 0, 1]] | |
| # Remove the floor | |
| data[..., 2] -= data[..., 2].min() | |
| # Put all the body on the floor | |
| if always_on_floor: | |
| data[..., 2] -= data[..., 2].min(1)[:, None] | |
| return data | |