generate borders
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user