no shape preprocessing
This commit is contained in:
+77
-2
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user