import os import numpy as np import h5py import cv2 class standard_reader: def __init__(self, config): self.raw_dir = config["rawdata_dir"] self.dataset = h5py.File(config["dataset_dir"], "r") self.num_kpt = config["num_kpt"] def run(self, index): K1, K2 = np.asarray(self.dataset["K1"][str(index)]), np.asarray( self.dataset["K2"][str(index)] ) R = np.asarray(self.dataset["R"][str(index)]) t = np.asarray(self.dataset["T"][str(index)]) t = t / np.sqrt((t**2).sum()) desc1, desc2 = ( self.dataset["desc1"][str(index)][()][: self.num_kpt], self.dataset["desc2"][str(index)][()][: self.num_kpt], ) x1, x2 = ( self.dataset["kpt1"][str(index)][()][: self.num_kpt], self.dataset["kpt2"][str(index)][()][: self.num_kpt], ) e, f = self.dataset["e"][str(index)][()], self.dataset["f"][str(index)][()] img1_path, img2_path = ( self.dataset["img_path1"][str(index)][()][0].decode(), self.dataset["img_path2"][str(index)][()][0].decode(), ) img1, img2 = cv2.imread(os.path.join(self.raw_dir, img1_path)), cv2.imread( os.path.join(self.raw_dir, img2_path) ) info = { "index": index, "K1": K1, "K2": K2, "R": R, "t": t, "x1": x1, "x2": x2, "desc1": desc1, "desc2": desc2, "img1": img1, "img2": img2, "e": e, "f": f, "r_gt": R, "t_gt": t, } return info def close(self): self.dataset.close() def __len__(self): return len(self.dataset["K1"])