generate borders

This commit is contained in:
2023-06-23 00:43:15 +02:00
parent 14ede865cf
commit 78d0277547
+77 -4
View File
@@ -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