import os import sys from configs.config_abl_all import config os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] import tensorflow as tf gpus = tf.config.experimental.list_physical_devices('GPU') if gpus: try: # Currently, memory growth needs to be the same across GPUs for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) logical_gpus = tf.config.experimental.list_logical_devices('GPU') print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs") except RuntimeError as e: # Memory growth must be set before GPUs have been initialized print(e) import glob import time import argparse import wandb import tqdm import random import numpy as np import plotly.graph_objects as go import plotly.express as ex from PIL import Image from postprocessing import fix_collision if config['is_skirt']: from losses import edge_loss_skirt as edge_loss else: from losses import edge_loss from losses import collision_ratio, kl_loss #, concept_loss # from losses import collision_penalty as collision_penalty from losses import collision_loss as collision_penalty from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision from dataset import DatasetFactory, StaticDataset from custom_utils.smpl import SMPL from models.cvae_model import CVAE from custom_utils.supersmpl_io import writeOBJ if __name__ == '__main__': # init_wandb() parser = argparse.ArgumentParser(description='') parser.add_argument('--name', type=str) args = vars(parser.parse_args()) smpl = SMPL(use_one_hot=config['use_one_hot']) skirt_modifier = '_skirt' if config['is_skirt'] else '' folder = config['test_dir'] # str_split = config['name'].split('_') # test_idx = str_split.index('test') # checkpoint_name = '_'.join(str_split[:test_idx]) checkpoint_name = config['name'] F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32) output_folder = '/home/workspace/data/results/support' os.makedirs(output_folder + '/bodies', exist_ok=True) os.makedirs(output_folder + '/faces', exist_ok=True) config['signature_dynamic'] = { 'id': (), 'frame_nr': (), 'mesh_body_posed': (14475, 3,), } config['signature_static'] = { 'mesh_mask': (14475,), } factory = DatasetFactory() dataset_test = factory.get_dataset(folder=config['test_dir'], batch_size=config['batch_size'], signature=config['signature_dynamic'], resolutions=[config['resolution']], in_memory=False, do_repeat=False, use_one_hot=config['use_one_hot'], use_no_orient=config['remove_global_orientation']) static_dataset_test = StaticDataset(folder=config['test_dir'], signature=config['signature_static'], resolutions=[config['resolution']], in_memory=False) for batch in tqdm.tqdm(dataset_test): batch = static_dataset_test.expand_batch(batch_to_dict(batch, config['signature_dynamic'])) # mask = batch['mesh_mask'].numpy().astype(bool) body = batch['mesh_body_posed'].numpy() # _, faces = maskFacesBatch(np.zeros((body.shape[0],14475,3)), F, mask) for i in range(body.shape[0]): id, frame_nr = batch['id'][i].numpy().decode("utf-8"), batch['frame_nr'][i].numpy().decode("utf-8") writeOBJ(os.path.join(output_folder, 'bodies', id + '_' + frame_nr + '_body_no_orient.obj'), body[i], F) # np.save(os.path.join(output_folder, 'faces', id + '_' + frame_nr + '.npy'), faces[i].astype(np.int32))