optimizing curvature generation
This commit is contained in:
@@ -4,15 +4,15 @@ import os
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
folder = '/home/workspace/local-data/cape/train/male'
|
folder = '/home/workspace/local-data/train'
|
||||||
out_folder = '/home/workspace/local-data/cape_processed/train/male'
|
out_folder = '/home/workspace/local-data/train'
|
||||||
ids = os.listdir(folder)
|
ids = os.listdir(folder + '/mesh_posed')
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
step = 1
|
step = 15000
|
||||||
|
|
||||||
while count < len(ids):
|
while count < len(ids):
|
||||||
# os.system('nohup python MeshUtils/curvature_labels.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_train_' + str(count) + '_' + str(count+step) + ' > curv_train_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
|
# os.system('nohup python MeshUtils/curvature_labels.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_train_' + str(count) + '_' + str(count+step) + ' > curv_train_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
|
||||||
os.system('nohup python curvature_labels_cape.py -if ' + folder + ' -of ' + out_folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_gen_2_cape_train_male_' + str(count) + '_' + str(count+step) + ' > nohup/curv_gen_2_cape_train_male_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
|
os.system('nohup python curvature_labels.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + ' -n ' + 'curv_gen_50_train_nons_' + str(count) + '_' + str(count+step) + ' > nohup/curv_gen_50_train_nons_' + str(count) + '_' + str(count+step) + '.out' + ' 2>&1 &')
|
||||||
# os.system('python Data/convert_to_uv.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + '')
|
# os.system('python Data/convert_to_uv.py -f ' + folder + ' -s ' + str(count) + ' -e ' + str(count + step) + '')
|
||||||
count += step
|
count += step
|
||||||
|
|||||||
+56
-49
@@ -4,6 +4,7 @@ import tqdm
|
|||||||
import argparse
|
import argparse
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
|
import time
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import trimesh as tm
|
import trimesh as tm
|
||||||
import cmapy as cm
|
import cmapy as cm
|
||||||
@@ -40,6 +41,8 @@ def export_to_ply(mesh, file):
|
|||||||
output_file.close()
|
output_file.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_closest_n_points(verts, idx, n):
|
def get_closest_n_points(verts, idx, n):
|
||||||
dist = sp.spatial.distance.cdist(verts[idx, :], verts)
|
dist = sp.spatial.distance.cdist(verts[idx, :], verts)
|
||||||
dist[dist == 0] = 1e9
|
dist[dist == 0] = 1e9
|
||||||
@@ -80,35 +83,40 @@ def k_neighbours(k):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_dist(folder, neighbourhood):
|
||||||
|
out = dict()
|
||||||
|
frames = sorted(os.listdir(os.path.join(folder, 'mesh_posed')))[int(args.start):int(args.end)]
|
||||||
|
|
||||||
|
for frame in tqdm.tqdm(frames):
|
||||||
|
id = frame.split('_')[0]
|
||||||
|
if id in out.keys():
|
||||||
|
continue
|
||||||
|
|
||||||
|
mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
|
||||||
|
k_neighbors = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
|
||||||
|
out[id] = k_neighbors
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
def generate_curvatures(folder, neighbourhood):
|
def generate_curvatures(folder, neighbourhood):
|
||||||
|
|
||||||
ids = os.listdir(folder)[int(args.start):int(args.end)]
|
# ids = os.listdir(folder)[int(args.start):int(args.end)]
|
||||||
|
frames = sorted(os.listdir(os.path.join(folder, 'mesh_posed')))[int(args.start):int(args.end)]
|
||||||
|
os.makedirs(os.path.join(folder, f'mesh_curvature_raw_{neighbourhood}'), exist_ok=True)
|
||||||
|
|
||||||
curvatures_all = []
|
k_neighbors_cache = calculate_dist(folder, neighbourhood)
|
||||||
|
|
||||||
for id in tqdm.tqdm(ids):
|
for frame in tqdm.tqdm(frames):
|
||||||
garment_dir = os.path.join(folder, id)
|
|
||||||
|
|
||||||
if not os.path.isdir(garment_dir):
|
id = frame.split('_')[0]
|
||||||
continue
|
frame_nr = frame.split('_')[1].split('.')[0]
|
||||||
|
|
||||||
# if os.path.exists(garment_dir + '/curvature_25_raw.npy'):
|
|
||||||
# continue
|
|
||||||
|
|
||||||
curvatures_garment = []
|
|
||||||
|
|
||||||
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
|
|
||||||
if len (garments) != 1:
|
|
||||||
continue
|
|
||||||
garment = garments[0]
|
|
||||||
|
|
||||||
bodies = readPC2(os.path.join(folder, id, 'Body_posed.pc16'), True)['V']
|
# bodies = readPC2(os.path.join(folder, id, 'Body_posed.pc16'), True)['V']
|
||||||
offsetss = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V']
|
# offsetss = readPC2(os.path.join(folder, id, garment + '_registered.pc16'), True)['V']
|
||||||
mask = np.squeeze(sio.loadmat(os.path.join(garment_dir, garment + '_mask.mat'))['mask'].astype(bool))
|
mask = np.load(os.path.join(folder, 'mesh_mask', f'{id}.npy')).astype(bool)
|
||||||
|
faces = np.load(os.path.join(folder, 'faces', f'{id}.npy'))
|
||||||
|
v = np.load(os.path.join(folder, 'mesh_posed', f'{id}_{frame_nr}.npz'))['mesh_posed'][mask,:]
|
||||||
|
|
||||||
_, faces = _maskFaces(bodies[0, :, :], F, mask)
|
|
||||||
v = bodies[0, mask, :] + offsetss[0, mask, :]
|
|
||||||
m = tm.Trimesh(v, faces, process=False, validate=False)
|
m = tm.Trimesh(v, faces, process=False, validate=False)
|
||||||
|
|
||||||
outliers = np.array([len(v) for v in m.vertex_neighbors]) == 0
|
outliers = np.array([len(v) for v in m.vertex_neighbors]) == 0
|
||||||
@@ -117,30 +125,23 @@ def generate_curvatures(folder, neighbourhood):
|
|||||||
outliers_faces = np.concatenate((outliers[:, np.newaxis], outliers_n_neighbours), axis=-1)
|
outliers_faces = np.concatenate((outliers[:, np.newaxis], outliers_n_neighbours), axis=-1)
|
||||||
faces = np.concatenate((faces, outliers_faces), axis=0)
|
faces = np.concatenate((faces, outliers_faces), axis=0)
|
||||||
|
|
||||||
step = 0
|
verts = v
|
||||||
for body, offsets in zip(bodies, offsetss):
|
|
||||||
verts = body + offsets
|
|
||||||
verts = verts[mask, :]
|
|
||||||
|
|
||||||
m = tm.Trimesh(verts, faces, process=False, validate=False)
|
m = tm.Trimesh(verts, faces, process=False, validate=False)
|
||||||
export_to_ply(m, temp_file)
|
export_to_ply(m, temp_file)
|
||||||
|
|
||||||
cloud = PyntCloud.from_file(temp_file)
|
cloud = PyntCloud.from_file(temp_file)
|
||||||
# cloud.plot(mesh=True)
|
|
||||||
|
|
||||||
k_neighbors = np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
|
k_neighbors = k_neighbors_cache[id] # np.argsort(dist[mask, :][:, mask], axis=-1)[:, :neighbourhood] #cloud.get_neighbors(k=neighbourhood)
|
||||||
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
|
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
|
||||||
cloud.add_scalar_field("curvature", ev=ev)
|
cloud.add_scalar_field("curvature", ev=ev)
|
||||||
curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"])
|
curvature = np.array(cloud.points["curvature(" + str(neighbourhood+1) + ")"])
|
||||||
curvatures_garment.append(curvature)
|
out = np.zeros((14475), dtype=np.float32)
|
||||||
|
out[mask] = curvature
|
||||||
|
|
||||||
|
np.savez_compressed(os.path.join(folder, f'mesh_curvature_raw_{neighbourhood}', f'{id}_{frame_nr}.npz'), mesh_curvature_raw=out)
|
||||||
|
|
||||||
print(step)
|
return None
|
||||||
step += 1
|
|
||||||
|
|
||||||
# curvatures_all.append(np.array(curvatures_garment))
|
|
||||||
np.save(garment_dir + '/curvature_25_raw.npy', np.array(curvatures_garment))
|
|
||||||
|
|
||||||
return curvatures_all
|
|
||||||
|
|
||||||
|
|
||||||
def get_bins(values, nr_of_bins):
|
def get_bins(values, nr_of_bins):
|
||||||
@@ -282,21 +283,27 @@ def read_raw_curvatures(folder):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("-f", "--folder", help = "process the given folder", default=r'/home/workspace/data/dataset/test')
|
parser.add_argument("-f", "--folder", help = "process the given folder", default=r'/home/workspace/local-data/train')
|
||||||
parser.add_argument("-s", "--start", help = "start of range", default=0)
|
parser.add_argument("-s", "--start", help = "start of range", default=0)
|
||||||
parser.add_argument("-e", "--end", help = "end of range", default=1500)
|
parser.add_argument("-e", "--end", help = "end of range", default=10)
|
||||||
parser.add_argument("-n", "--name", help = "end of range", default="lhunor")
|
parser.add_argument("-n", "--name", help = "end of range", default="lhunor")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
F = np.load("FeatureLines/superSMPL/smpl_faces.npy")
|
is_skirt = False
|
||||||
|
skirt_modifier = '_skirt' if is_skirt else ''
|
||||||
|
F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32)
|
||||||
# k_neighbours(k=25)
|
# k_neighbours(k=25)
|
||||||
|
|
||||||
folder = args.folder
|
folder = args.folder
|
||||||
nr_of_labels = 6
|
nr_of_labels = 6
|
||||||
neighbourhood = 25
|
neighbourhood = 50
|
||||||
temp_file = 'temp/' + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.ply'
|
temp_file = '/home/workspace/local-data/temp/' + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.ply'
|
||||||
dist = np.load('MeshUtils/dijsktra.npy')
|
if not is_skirt:
|
||||||
# dist = np.load('MeshUtils/dijkstra_skirt.npy')
|
dist = np.load('custom_data/dijkstra.npy')
|
||||||
|
else:
|
||||||
|
dist = np.load('custom_data/dijkstra_skirt.npy')
|
||||||
|
|
||||||
|
print('SKIRT' if is_skirt else 'NOT SKIRT')
|
||||||
|
|
||||||
generate_curvatures(folder, neighbourhood)
|
generate_curvatures(folder, neighbourhood)
|
||||||
# curvatures = read_raw_curvatures(folder)
|
# curvatures = read_raw_curvatures(folder)
|
||||||
|
|||||||
Reference in New Issue
Block a user