From 119c4a3bb06266c6ded079e8aa462fbb469ee062 Mon Sep 17 00:00:00 2001 From: Hunor Laczko Date: Fri, 30 Sep 2022 21:55:04 +0000 Subject: [PATCH] no shape preprocessing --- preprocessing.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/preprocessing.py b/preprocessing.py index 46c127a..f67de25 100644 --- a/preprocessing.py +++ b/preprocessing.py @@ -1,4 +1,6 @@ import os +os.environ["CUDA_VISIBLE_DEVICES"] = "1" + import sys import shutil import tqdm @@ -13,6 +15,10 @@ from custom_utils.smpl import SMPL import plotly.graph_objects as go + + + + def create_no_orient_body(folder): ids = os.listdir(folder) F = np.load("custom_utils/smpl_faces.npy") @@ -99,13 +105,82 @@ def create_no_orient_body(folder): +def create_no_shape_unposed(folder): + import tensorflow as tf + ids = os.listdir(folder) + + smpl = SMPL() + for id in tqdm.tqdm(ids): + garment_dir = os.path.join(folder, id) + if not os.path.isdir(garment_dir): + continue + + info = sio.loadmat(os.path.join(folder, id, 'info.mat')) + + shape = info['shape'] + gender = int(info['gender'][0,0] > 0) + garments = [f.replace('.pc16','') for f in os.listdir(garment_dir) if f.find('_') == -1 and f != 'info.mat' and not f.endswith('.obj')] + assert len (garments) == 1 + assert gender == info['gender'][0,0] + # if len (garments) != 1: + # continue + garment = garments[0] + mask = np.load(os.path.join(folder, id, garment + '_mask.npy')) + shape_offsets = tf.tensordot(shape.astype(np.float32), smpl.shapedirs[gender], axes=[[1], [2]]).numpy() + + os.makedirs(os.path.join(folder, id, 'mesh_unposed_no_shape'), exist_ok=True) + for i in range(info['poses'].shape[1]): + mesh_unposed = np.load(os.path.join(garment_dir, 'mesh_unposed', id + '_' + str(i) + '.npz')) + mesh_unposed = mesh_unposed['mesh_unposed'] + mesh_unposed[mask, :] = mesh_unposed[mask, :] - np.squeeze(shape_offsets)[smpl.to_keep, :][mask, :] + np.savez_compressed(os.path.join(folder, id, 'mesh_unposed_no_shape', id + '_' + str(i) + '.npz'), mesh_unposed_no_shape = mesh_unposed) + + + + +def check_if_skirt(folder): + ids = os.listdir(folder) + + for id in tqdm.tqdm(ids): + garment_dir = os.path.join(folder, id) + if not os.path.isdir(garment_dir): + continue + + garments = [f.replace('.pc16','') for f in os.listdir(garment_dir) if f.find('_') == -1 and f != 'info.mat' and not f.endswith('.obj')] + # assert len (garments) == 1 + # garment = garments[0] + + # assert garment != 'Skirt' + + assert "Skirt" not in garments + +def gather_ids(folder, file_name): + ids = os.listdir(folder) + + to_print = [] + + for id in tqdm.tqdm(ids): + garment_dir = os.path.join(folder, id) + if not os.path.isdir(garment_dir): + continue + + if len(id) == 5: + to_print.append(id) + + to_print.sort() + + with open(file_name, 'w') as f: + f.write('\n'.join(to_print)) + if __name__ == '__main__': - os.environ["CUDA_VISIBLE_DEVICES"] = "1" src_folder = '/home/workspace/data/dataset/train_skirt' # src_folder = r'D:\Work\Dataset\validation_2' dest_folder = '/home/workspace/data/dataset/validation' - create_no_orient_body('/home/workspace/data/dataset/train_100') + create_no_orient_body(src_folder) + # create_no_shape_unposed(src_folder) + # check_if_skirt(src_folder) + # gather_ids(src_folder, 'ids/test_non_skirt_ids.txt')