import torch import torchvision as tv import numpy as np import glob import os import random import cv2 from skimage import io from torch.utils.data import Dataset class LandmarkDataset(Dataset): def __init__(self, data_folder): super(LandmarkDataset, self).__init__() self.eids = sorted(os.listdir(data_folder)) self.images_folders = [os.path.join(data_folder, eid) for eid in self.eids] self.camera_ids = ['01', '02', '04', '05'] def get_item(self): landmarks = [] extrinsics = [] intrinsics = [] for images_folder in self.images_folders: landmarks_ = [] extrinsics_ = [] intrinsics_ = [] for v in range(len(self.camera_ids)): if os.path.exists(images_folder + '/landmarks_%s.npy' % self.camera_ids[v]): landmark = np.load(images_folder + '/landmarks_%s.npy' % self.camera_ids[v]) landmark = np.vstack([landmark[0:48], landmark[49:54], landmark[55:68]]) extrinsic = np.load(images_folder + '/camera_%s.npz' % self.camera_ids[v])['extrinsic'] intrinsic = np.load(images_folder + '/camera_%s.npz' % self.camera_ids[v])['intrinsic'] else: landmark = np.zeros([68, 3], dtype=np.float32) extrinsic = np.ones([3, 4], dtype=np.float32) intrinsic = np.ones([3, 3], dtype=np.float32) landmarks_.append(landmark) extrinsics_.append(extrinsic) intrinsics_.append(intrinsic) landmarks_ = np.stack(landmarks_) extrinsics_ = np.stack(extrinsics_) intrinsics_ = np.stack(intrinsics_) landmarks.append(landmarks_) extrinsics.append(extrinsics_) intrinsics.append(intrinsics_) landmarks = np.stack(landmarks) extrinsics = np.stack(extrinsics) intrinsics = np.stack(intrinsics) return landmarks, extrinsics, intrinsics, self.eids def __len__(self): return len(self.images_folders)