Files
reconstruction/data/preprocess.py
T

80 lines
2.9 KiB
Python

import os
import sys
import numpy as np
import scipy as sp
import scipy.io as sio
from tqdm import tqdm
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
from utils.data_utils import mask_faces, Frame
from superSMPL.IO import readPC2, writePC2
from cloth3d.util import loadInfo
def generate_faces(folder, frames):
frames = os.listdir(os.path.join(folder, 'mesh_mask'))
F = np.load('custom_data/smpl_faces.npy')
os.makedirs(os.path.join(folder, 'faces'), exist_ok=True)
for frame in tqdm(frames):
mask = np.load(os.path.join(folder, 'mesh_mask', frame))
faces = mask_faces(F, mask)
np.save(os.path.join(folder, 'faces', frame), faces)
def generate_frames_file(folder, file_name):
ids = os.listdir(folder)#[:1]
frames = []
for id in tqdm(ids):
garment_dir = os.path.join(folder, id)
if not os.path.isdir(garment_dir):
continue
garments = [f.replace('.obj','') for f in os.listdir(garment_dir) if f.endswith('.obj')]
info = loadInfo(os.path.join(garment_dir, 'info'))
garments_str = ' '.join(garments)
for i in range(info['poses'].shape[1]):
frames.append(Frame(id, i, garments_str))
with open(os.path.join(folder, file_name), 'w') as f:
for i, frame in enumerate(frames):
f.write(str(frame.id) + ' ' + str(frame.frame_nr) + ' ' + str(frame.garment) + '\n')
def genereated_registered_and_mask(folder, is_skirt = False):
ids = os.listdir(folder)
for id in tqdm(ids):
garment_dir = os.path.join(folder, id)
if not os.path.isdir(garment_dir):
continue
garments = [f.replace('.pc16','') for f in os.listdir(garment_dir) if f.find('_') == -1 and not f.endswith('.mat') and not f.endswith('.obj') and not f.startswith('Combined')]
assert len(garments) == 1
if os.path.exists(os.path.join(garment_dir, garments[0] + '_registered.pc16')):
continue
garment = garments[0]
verts = readPC2(os.path.join(garment_dir, garment + '.pc16'), True)['V']
map = sio.loadmat(os.path.join(garment_dir, garment + '_map.mat'))['map'].reshape((-1))
verts = verts[:, map, :] # ---------------> This is the garment after registration
raw_mask = sio.loadmat(os.path.join(garment_dir, garment + '_mask.mat'))['mask'].reshape((-1))
mask = raw_mask > 0
# boundaries = raw_mask == 2
writePC2(os.path.join(garment_dir, garment + '_registered.pc16'), verts, True)
np.save(os.path.join(garment_dir, garment + '_mask.npy'), mask)
if __name__ == '__main__':
# folder = '/home/workspace/local-data/train'
# folder = '/home/workspace/local-data/valid'
folder = '/home/workspace/data/dataset/cloth3d/train'
# generate_faces(folder)
# genereated_registered_and_mask(folder)
generate_frames_file(folder, 'frames_all.txt')