import os import sys import random import numpy as np import tables as tb import plotly.graph_objects as go import plotly.express as ex from plotly.subplots import make_subplots sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') from data.cloth3d_io import read_garment_mask, read_garment_template, read_posed_garment_frame, loadInfo, read_posed_body_frame, read_posed_body, read_posed_garment, read_curvatures, read_curvature_frame from custom_utils.custom_utils import _maskFaces def get_frames(folder, frames_file): frames = [] with open(os.path.join(folder, frames_file), 'r') as f: for line in f: frames.append(line.strip()) return frames def verify_uv(folder, frame): id, frame_nr, garment = frame.split() uv_static = np.load(os.path.join(folder, 'uv_static', f'{id}_{garment}.npz'))['uv_static'] uv_mask = np.load(os.path.join(folder, 'uv_mask', f'{id}_{garment}.npz'))['uv_mask'] uv_posed = np.load(os.path.join(folder, 'uv_posed' + orient_mod, f'{id}_{frame_nr}_{garment}.npz'))['uv_posed'] uv_body_posed = np.load(os.path.join(folder, 'uv_body_posed' + orient_mod, f'{id}_{frame_nr}_{garment}.npz'))['uv_body_posed'] uv_curvature = np.load(os.path.join(folder, 'uv_curvature', f'{id}_{frame_nr}_{garment}.npz'))['uv_curvature'] all_1 = np.concatenate([uv_static, uv_posed, uv_body_posed], axis=1) all_1 = (all_1 - all_1.min()) / (all_1.max() - all_1.min()) ex.imshow(all_1).show() ex.imshow(uv_mask).show() ex.imshow(uv_curvature).show() def verify_mesh(folder, frame): id, frame_nr, garment = frame.split() frame_nr = int(frame_nr) info = loadInfo(os.path.join(folder, id, 'info.mat')) mask = read_garment_mask(folder, id, garment) mesh_static = read_garment_template(folder, id, garment, mask)[mask,:] mesh_posed = read_posed_garment_frame(folder, id, garment, frame_nr, mask=mask, shape=info['shape'], pose=info['poses'][:,frame_nr], deorient=use_no_orient, unshape=no_shape)[mask,:] body_posed = read_posed_body_frame(folder, id, frame_nr, info['poses'], use_no_orient) mesh_curvature = read_curvature_frame(folder + '_extras', id, garment, frame_nr)[mask] fig = make_subplots(rows=1, cols=4, start_cell="top-left", specs = [ [{ 'type': 'scene' } for _ in range(4)] ]) F = np.load(f'custom_utils/smpl_faces{skirt_modifier}.npy').astype(np.int32) _, faces = _maskFaces(np.zeros((14475,3)), F, mask) fig.add_trace(go.Mesh3d( x=mesh_static[:,0], y=mesh_static[:,1], z=mesh_static[:,2], i = faces[:,0], j = faces[:,1], k = faces[:,2] ), row=1, col=1) fig.add_trace(go.Mesh3d( x=mesh_posed[:,0], y=mesh_posed[:,1], z=mesh_posed[:,2], i = faces[:,0], j = faces[:,1], k = faces[:,2] ), row=1, col=2) fig.add_trace(go.Mesh3d( x=body_posed[:,0], y=body_posed[:,1], z=body_posed[:,2], i = F[:,0], j = F[:,1], k = F[:,2], ), row=1, col=3) fig.add_trace(go.Mesh3d( x=mesh_posed[:,0], y=mesh_posed[:,1], z=mesh_posed[:,2], i = faces[:,0], j = faces[:,1], k = faces[:,2], vertexcolor=np.tile(mesh_curvature[:,None], (1,3)) * 40, ), row=1, col=4) fig.update_layout(scene_aspectmode='manual', scene_aspectratio=dict(x=1, y=1, z=1), scene2_aspectmode='manual', scene2_aspectratio=dict(x=1, y=1, z=1), scene3_aspectmode='manual', scene3_aspectratio=dict(x=1, y=1, z=1), scene4_aspectmode='manual', scene4_aspectratio=dict(x=1, y=1, z=1), ) helper = dict(xaxis = dict(nticks=4, range=[-1,1],), yaxis = dict(nticks=4, range=[-1,1],), zaxis = dict(nticks=4, range=[-1,1],),) fig.update_layout(scene = helper, scene2 = helper, scene3 = helper, scene4 = helper, ) fig.show() pass if __name__ == '__main__': folder = '/home/workspace/data/dataset/cloth3d/train' frames = get_frames(folder, 'frames_all.txt') root = '/'.join(folder.split('/')[:-1]) type = folder.split('/')[-1] # h5file_curv = tb.open_file(os.path.join(root, f'{type}_extras.h5'), mode='r') use_no_orient = False no_shape = False is_skirt = True skirt_modifier = '_skirt' if is_skirt else '' orient_mod = '_no_orient' if use_no_orient else '' shape_mod = '_no_shape' if no_shape else '' while True: frame = random.choice(frames) frame = '05936 0 Dress' verify_mesh(folder, frame) verify_uv(folder + '_extras', frame) pass