From 78d0277547eb56a08da3029b3b09c8027d2a02ba Mon Sep 17 00:00:00 2001 From: Hunor Laczko Date: Fri, 23 Jun 2023 00:43:15 +0200 Subject: [PATCH] generate borders --- data/registration_weights.py | 81 ++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 4 deletions(-) diff --git a/data/registration_weights.py b/data/registration_weights.py index 2cc2c37..61fe569 100644 --- a/data/registration_weights.py +++ b/data/registration_weights.py @@ -30,7 +30,7 @@ from data.cloth3d_io import ( from smpl.smpl_torch import SMPL # from custom_utils.custom_utils import _maskFaces -device = 'cuda' +device = 'cpu' smpl = SMPL(device, 'smpl') @@ -429,9 +429,81 @@ def register(folder, frame): pass + +def get_boundaries(folder, frame): + from pymeshfix import MeshFix + from scipy.spatial import KDTree + + id, frame_nr, garment = frame.split() + frame_nr = int(frame_nr) + registered_cloth = np.load('temp/registered_cloth.npy') + registered_faces = np.load('temp/registered_faces.npy') + registred_weights = np.load('temp/registered_weights.npy') + _, faces, _, _ = readOBJ(os.path.join(folder, id, garment + '.obj')) + faces = quads2tris(faces) + template = np.load('temp/mapping_cloth.npy') + + registered_meshfix = MeshFix(registered_cloth, registered_faces) + registered_holes = registered_meshfix.extract_holes() + + template_meshfix = MeshFix(template, faces) + template_holes = template_meshfix.extract_holes() + template_border = [] + for border in np.array(template_holes.points): + # find the index of the vertex in the original mesh + ind = np.argwhere(np.all(template == border, axis=1)) + template_border.extend(ind.ravel()) + + template_border_tree = KDTree(template[template_border]) + + registered_border = [] + for border in np.array(registered_holes.points): + q = template_border_tree.query(border) + if q[0] > 0.02: + continue + # find the index of the vertex in the original mesh + ind = np.argwhere(np.all(registered_cloth == border, axis=1)) + registered_border.extend(ind.ravel()) + + np.save('temp/registered_border.npy', registered_border) + np.save('temp/template_border.npy', template_border) + + # plot registered cloth and tempalte as scatterplots and add another two scatter plots for the two boundary sets + fig = go.Figure(data=[ + go.Scatter3d( + x=registered_cloth[:,0], y=registered_cloth[:,1], z=registered_cloth[:,2], + mode='markers', marker=dict(size=2, color='red')), + go.Scatter3d( + x=registered_cloth[registered_border,0], y=registered_cloth[registered_border,1], z=registered_cloth[registered_border,2], + mode='markers', marker=dict(size=4, color='green')), + ]) + fig.update_layout(scene = dict( + xaxis = dict(range=[-1,1],), + yaxis = dict(range=[-1,1],), + zaxis = dict(range=[-1,1],),),) + fig.update_layout(scene_aspectmode='cube') + fig.show() + + fig = go.Figure(data=[ + go.Scatter3d( + x=template[:,0], y=template[:,1], z=template[:,2], + mode='markers', marker=dict(size=2, color='blue')), + go.Scatter3d( + x=template[template_border,0], y=template[template_border,1], z=template[template_border,2], + mode='markers', marker=dict(size=4, color='green')), + ]) + fig.update_layout(scene = dict( + xaxis = dict(range=[-1,1],), + yaxis = dict(range=[-1,1],), + zaxis = dict(range=[-1,1],),),) + fig.update_layout(scene_aspectmode='cube') + fig.show() + + pass + if __name__ == "__main__": - folder = '/data-net/code/cloth3d/train' - # folder = r'D:\Work\code\cloth3d\train' + # folder = '/data-net/code/cloth3d/train' + folder = r'D:\Work\code\cloth3d\train' # frames = [f'00761_{i}' for i in range(300)] # folder = r'Z:\Work\Huni\Barcelona\Dataset\cloth3d\train' frames = get_frames(folder, 'frames_all.txt') @@ -456,6 +528,7 @@ if __name__ == "__main__": frame = '05060 1 Jumpsuit' - register(folder, frame) + # register(folder, frame) + get_boundaries(folder, frame) break pass