import os import sys import time import cv2 import random import numpy as np import tensorflow as tf import cmapy as cm import plotly.graph_objects as go import plotly.express as ex from dataset import DatasetFactory, StaticDataset from custom_utils.custom_utils import batch_to_dict, UV2Mesh, _maskFaces from custom_utils.smpl import SMPL if __name__ == '__main__': os.environ["CUDA_VISIBLE_DEVICES"] = "6" uv2mesh = UV2Mesh() smpl = SMPL() F = np.load("custom_utils/smpl_faces.npy") factory = DatasetFactory() signature_dynamic = { 'id': (), 'pose_shape': (72 + 11,), # 'uv_posed': (3, 512, 256,), # 'uv_body_posed': (3, 512, 256,), 'mesh_body_posed': (14475, 3,), # 'mesh_posed_body_no_orient': (14475, 3,), 'mesh_posed': (14475, 3,), 'mesh_unposed': (14475, 3,), # 'uv_unposed': (3, 512, 256,), # 'uv_curvature': (512, 256), # 'mesh_curvature': (14475) } signature_static = { #'uv_static': (3, 512, 256,), # 'mesh_static': (14475, 3,), 'mesh_mask': (14475,), # 'uv_mask': (512, 256,), # 'uv_shaped_body': (3, 512, 256,), } dataset = factory.get_dataset(folder='/home/workspace/local-data/jumpsuit_test/train', batch_size=1, signature=signature_dynamic) static_dataset = StaticDataset(folder='/home/workspace/local-data/jumpsuit_test/train', signature=signature_static) uv_res = 256 for i, batch in enumerate(dataset): print(i) batch = static_dataset.expand_batch(batch_to_dict(batch, signature_dynamic)) mesh_unposed = np.squeeze(batch['mesh_unposed'].numpy()) mask = np.squeeze(batch['mesh_mask'].numpy()).astype(bool) pose, shape = batch['pose_shape'][:, :72].numpy(), batch['pose_shape'][:, 72:].numpy() mesh_reposed = smpl.run_garment(pose, shape, batch['mesh_unposed']).numpy()[0] mesh_posed = np.squeeze(batch['mesh_posed'].numpy()) mesh_body_posed = np.squeeze(batch['mesh_body_posed'].numpy()) mesh_posed_body_no_orient = np.squeeze(batch['mesh_posed_body_no_orient'].numpy()) # x = mesh_posed[mask, :] R = smpl.run_rodrigues(pose) # shape[:, -1] = 1 x = smpl.run(R, shape)[0][0] y = mesh_body_posed z = mesh_posed[mask, :] _, faces = _maskFaces(np.zeros((14475, 3), dtype=np.float32), F, mask) go.Figure(data=[ go.Mesh3d( # 8 vertices of a cube x=x[:,0], y=x[:,1], z=x[:,2], # i, j and k give the vertices of triangles i = F[:,0], j = F[:,1], k = F[:,2] ), go.Mesh3d( # 8 vertices of a cube x=y[:,0], y=y[:,1], z=y[:,2], # i, j and k give the vertices of triangles i = F[:,0], j = F[:,1], k = F[:,2] ), # go.Mesh3d( # # 8 vertices of a cube # x=z[:,0], # y=z[:,1], # z=z[:,2], # # i, j and k give the vertices of triangles # i = faces[:,0], # j = faces[:,1], # k = faces[:,2] # ), ]).show() pose_2 = pose.copy() pose_2[:, :3] = 0 R = smpl.run_rodrigues(pose_2) x = smpl.run(R, shape)[0][0] y = mesh_posed_body_no_orient _, faces = _maskFaces(np.zeros((14475, 3), dtype=np.float32), F, mask) go.Figure(data=[ go.Mesh3d( # 8 vertices of a cube x=x[:,0], y=x[:,1], z=x[:,2], # i, j and k give the vertices of triangles i = F[:,0], j = F[:,1], k = F[:,2] ), go.Mesh3d( # 8 vertices of a cube x=y[:,0], y=y[:,1], z=y[:,2], # i, j and k give the vertices of triangles i = F[:,0], j = F[:,1], k = F[:,2] )]).show() x = mesh_posed[mask, :] y = mesh_reposed[mask, :] _, faces = _maskFaces(np.zeros((14475, 3), dtype=np.float32), F, mask) go.Figure(data=[ go.Mesh3d( # 8 vertices of a cube x=x[:,0], y=x[:,1], z=x[:,2], # i, j and k give the vertices of triangles i = faces[:,0], j = faces[:,1], k = faces[:,2] ), go.Mesh3d( # 8 vertices of a cube x=y[:,0], y=y[:,1], z=y[:,2], # i, j and k give the vertices of triangles i = faces[:,0], j = faces[:,1], k = faces[:,2] )]).show() print()