generate borders
This commit is contained in:
@@ -30,7 +30,7 @@ from data.cloth3d_io import (
|
|||||||
from smpl.smpl_torch import SMPL
|
from smpl.smpl_torch import SMPL
|
||||||
# from custom_utils.custom_utils import _maskFaces
|
# from custom_utils.custom_utils import _maskFaces
|
||||||
|
|
||||||
device = 'cuda'
|
device = 'cpu'
|
||||||
smpl = SMPL(device, 'smpl')
|
smpl = SMPL(device, 'smpl')
|
||||||
|
|
||||||
|
|
||||||
@@ -429,9 +429,81 @@ def register(folder, frame):
|
|||||||
|
|
||||||
pass
|
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__":
|
if __name__ == "__main__":
|
||||||
folder = '/data-net/code/cloth3d/train'
|
# folder = '/data-net/code/cloth3d/train'
|
||||||
# folder = r'D:\Work\code\cloth3d\train'
|
folder = r'D:\Work\code\cloth3d\train'
|
||||||
# frames = [f'00761_{i}' for i in range(300)]
|
# frames = [f'00761_{i}' for i in range(300)]
|
||||||
# folder = r'Z:\Work\Huni\Barcelona\Dataset\cloth3d\train'
|
# folder = r'Z:\Work\Huni\Barcelona\Dataset\cloth3d\train'
|
||||||
frames = get_frames(folder, 'frames_all.txt')
|
frames = get_frames(folder, 'frames_all.txt')
|
||||||
@@ -456,6 +528,7 @@ if __name__ == "__main__":
|
|||||||
frame = '05060 1 Jumpsuit'
|
frame = '05060 1 Jumpsuit'
|
||||||
|
|
||||||
|
|
||||||
register(folder, frame)
|
# register(folder, frame)
|
||||||
|
get_boundaries(folder, frame)
|
||||||
break
|
break
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user