use original cloth3d functions
This commit is contained in:
+16
-6
@@ -18,6 +18,8 @@ from render import Render, DepthRenderer
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
|
||||
from superSMPL.IO import readPC2Frame, writePC2
|
||||
from utils.data_utils import Frame, read_frames_file, mask_faces
|
||||
from cloth3d.read import DataReader
|
||||
from cloth3d.util import quads2tris
|
||||
|
||||
|
||||
class Dataset(Dataset):
|
||||
@@ -27,30 +29,38 @@ class Dataset(Dataset):
|
||||
self.frames = read_frames_file(os.path.join(folder, frames_file))
|
||||
|
||||
self.render = DepthRenderer()
|
||||
self.deodr_render : Render = Render(max_depth=10)
|
||||
self.body_faces = np.load('custom_data/smpl_faces.npy')
|
||||
self.reader = DataReader(folder, 'superSMPL')
|
||||
|
||||
|
||||
def __len__(self):
|
||||
return len(self.frames)
|
||||
|
||||
|
||||
# TODO: make it work kwith two part outfits
|
||||
def __getitem__(self, idx):
|
||||
frame : Frame = self.frames[idx]
|
||||
path = os.path.join(self.folder, frame.id)
|
||||
mesh_posed = readPC2Frame(os.path.join(path, frame.garment + '_registered.pc16'), frame.frame_nr, True)
|
||||
# mesh_posed = readPC2Frame(os.path.join(path, frame.garment + '_registered.pc16'), frame.frame_nr, True)
|
||||
mesh_posed = self.reader.read_garment_vertices(frame.id, frame.garment, frame.frame_nr)
|
||||
|
||||
mask = np.load(os.path.join(path, frame.garment + '_mask.npy'))
|
||||
faces = mask_faces(self.body_faces, mask)
|
||||
body = readPC2Frame(os.path.join(path, 'Body_posed.pc16'), frame.frame_nr, True)
|
||||
# faces = quads2tris(self.reader.read_garment_topology(frame.id, frame.garment))
|
||||
# body = readPC2Frame(os.path.join(path, 'Body_posed.pc16'), frame.frame_nr, True)
|
||||
body, body_faces = self.reader.read_human(frame.id, frame.frame_nr)
|
||||
body_faces = quads2tris(body_faces)
|
||||
|
||||
info = sio.loadmat(os.path.join(path, 'info.mat'))
|
||||
info = self.reader.read_info(frame.id)
|
||||
combined = torch.Tensor(np.concatenate((body, mesh_posed[mask, :]))).to('cuda')
|
||||
combined_faces = torch.Tensor(np.concatenate((self.body_faces, faces + 14475))).to('cuda')
|
||||
combined_faces = torch.Tensor(np.concatenate((body_faces, faces + body.shape[0]))).to('cuda')
|
||||
|
||||
start = time.perf_counter()
|
||||
# depth_image = self.render.render(mesh_posed[mask, :], faces, info['camLoc'][0])[:,:,0]
|
||||
# depth_image = self.render.render(combined, combined_faces, info['camLoc'][0])[:,:,0]
|
||||
depth_image = self.render(combined, combined_faces, info['camLoc'][0])
|
||||
deodr_depth = self.deodr_render.render(cam=info['camLoc'].astype(np.float32), mesh=combined.cpu().numpy(), faces=combined_faces.cpu().numpy().astype(np.int32))
|
||||
depth_image = self.render(combined, combined_faces, info['camLoc'])
|
||||
t = time.perf_counter() - start
|
||||
print(t)
|
||||
|
||||
@@ -65,7 +75,7 @@ if __name__ == '__main__':
|
||||
|
||||
# dataset = Dataset('/home/workspace/local-data/train')
|
||||
dataset = Dataset('dataset/CLOTH3D/train')
|
||||
train_dataloader = DataLoader(dataset, batch_size=4, drop_last=True, shuffle=True)
|
||||
train_dataloader = DataLoader(dataset, batch_size=4, drop_last=True, shuffle=False)
|
||||
|
||||
for batch in train_dataloader:
|
||||
batch
|
||||
|
||||
+4
-3
@@ -150,9 +150,9 @@ class DepthRenderer(nn.Module):
|
||||
|
||||
def forward(self, verts, faces, cam):
|
||||
R, T = look_at_view_transform(2.7, 0, 0)
|
||||
cameras = FoVPerspectiveCameras(device='cuda', R=R, T=T)
|
||||
# cameras = FoVPerspectiveCameras(device='cuda', R=R, T=T)
|
||||
ext = extrinsic(cam)
|
||||
cameras = PerspectiveCameras(device='cuda', R=ext[None, :, :3], T=ext[None, :, 3], focal_length=50)
|
||||
cameras = PerspectiveCameras(device='cuda', R=ext[None, :, :3], T=ext[None, :, 3])
|
||||
|
||||
raster_settings = RasterizationSettings(
|
||||
image_size=512,
|
||||
@@ -165,7 +165,8 @@ class DepthRenderer(nn.Module):
|
||||
cameras=cameras,
|
||||
raster_settings=raster_settings
|
||||
)
|
||||
depth = rasterizer(Meshes(verts[None,:,:], faces[None,:,:])).zbuf[0,:,:,0]
|
||||
output = rasterizer(Meshes(verts[None,:,:], faces[None,:,:]))
|
||||
depth = output.zbuf[0,:,:,0]
|
||||
|
||||
mask = depth != -1
|
||||
# dmin = depth.min()
|
||||
|
||||
Reference in New Issue
Block a user