Spaces:
Runtime error
Runtime error
| import os | |
| import glob | |
| import pickle | |
| from tqdm import trange | |
| import numpy as np | |
| import h5py | |
| from numpy.core.fromnumeric import reshape | |
| from .base_dumper import BaseDumper | |
| import sys | |
| ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")) | |
| sys.path.insert(0, ROOT_DIR) | |
| import utils | |
| class fmbench(BaseDumper): | |
| def get_seqs(self): | |
| data_dir = os.path.join(self.config["rawdata_dir"]) | |
| self.split_list = [] | |
| for seq in self.config["data_seq"]: | |
| cur_split_list = np.unique( | |
| np.loadtxt( | |
| os.path.join(data_dir, seq, "pairs_which_dataset.txt"), dtype=str | |
| ) | |
| ) | |
| self.split_list.append(cur_split_list) | |
| for split in cur_split_list: | |
| split_dir = os.path.join(data_dir, seq, split) | |
| dump_dir = os.path.join(self.config["feature_dump_dir"], seq, split) | |
| cur_img_seq = glob.glob(os.path.join(split_dir, "Images", "*.jpg")) | |
| cur_dump_seq = [ | |
| os.path.join(dump_dir, path.split("/")[-1]) | |
| + "_" | |
| + self.config["extractor"]["name"] | |
| + "_" | |
| + str(self.config["extractor"]["num_kpt"]) | |
| + ".hdf5" | |
| for path in cur_img_seq | |
| ] | |
| self.img_seq += cur_img_seq | |
| self.dump_seq += cur_dump_seq | |
| def format_dump_folder(self): | |
| if not os.path.exists(self.config["feature_dump_dir"]): | |
| os.mkdir(self.config["feature_dump_dir"]) | |
| for seq_index in range(len(self.config["data_seq"])): | |
| seq_dir = os.path.join( | |
| self.config["feature_dump_dir"], self.config["data_seq"][seq_index] | |
| ) | |
| if not os.path.exists(seq_dir): | |
| os.mkdir(seq_dir) | |
| for split in self.split_list[seq_index]: | |
| split_dir = os.path.join(seq_dir, split) | |
| if not os.path.exists(split_dir): | |
| os.mkdir(split_dir) | |
| def format_dump_data(self): | |
| print("Formatting data...") | |
| self.data = { | |
| "K1": [], | |
| "K2": [], | |
| "R": [], | |
| "T": [], | |
| "e": [], | |
| "f": [], | |
| "fea_path1": [], | |
| "fea_path2": [], | |
| "img_path1": [], | |
| "img_path2": [], | |
| } | |
| for seq_index in range(len(self.config["data_seq"])): | |
| seq = self.config["data_seq"][seq_index] | |
| print(seq) | |
| pair_list = np.loadtxt( | |
| os.path.join(self.config["rawdata_dir"], seq, "pairs_with_gt.txt"), | |
| dtype=float, | |
| ) | |
| which_split_list = np.loadtxt( | |
| os.path.join( | |
| self.config["rawdata_dir"], seq, "pairs_which_dataset.txt" | |
| ), | |
| dtype=str, | |
| ) | |
| for pair_index in trange(len(pair_list)): | |
| cur_pair = pair_list[pair_index] | |
| cur_split = which_split_list[pair_index] | |
| index1, index2 = int(cur_pair[0]), int(cur_pair[1]) | |
| # get intrinsic | |
| camera = np.loadtxt( | |
| os.path.join( | |
| self.config["rawdata_dir"], seq, cur_split, "Camera.txt" | |
| ), | |
| dtype=float, | |
| ) | |
| K1, K2 = camera[index1].reshape([3, 3]), camera[index2].reshape([3, 3]) | |
| # get pose | |
| pose = np.loadtxt( | |
| os.path.join( | |
| self.config["rawdata_dir"], seq, cur_split, "Poses.txt" | |
| ), | |
| dtype=float, | |
| ) | |
| pose1, pose2 = pose[index1].reshape([3, 4]), pose[index2].reshape( | |
| [3, 4] | |
| ) | |
| R1, R2, t1, t2 = ( | |
| pose1[:3, :3], | |
| pose2[:3, :3], | |
| pose1[:3, 3][:, np.newaxis], | |
| pose2[:3, 3][:, np.newaxis], | |
| ) | |
| dR = np.dot(R2, R1.T) | |
| dt = t2 - np.dot(dR, t1) | |
| dt /= np.sqrt(np.sum(dt**2)) | |
| e_gt_unnorm = np.reshape( | |
| np.matmul( | |
| np.reshape( | |
| utils.evaluation_utils.np_skew_symmetric( | |
| dt.astype("float64").reshape(1, 3) | |
| ), | |
| (3, 3), | |
| ), | |
| np.reshape(dR.astype("float64"), (3, 3)), | |
| ), | |
| (3, 3), | |
| ) | |
| e_gt = e_gt_unnorm / np.linalg.norm(e_gt_unnorm) | |
| f = cur_pair[2:].reshape([3, 3]) | |
| f_gt = f / np.linalg.norm(f) | |
| self.data["K1"].append(K1), self.data["K2"].append(K2) | |
| self.data["R"].append(dR), self.data["T"].append(dt) | |
| self.data["e"].append(e_gt), self.data["f"].append(f_gt) | |
| img_path1, img_path2 = os.path.join( | |
| seq, cur_split, "Images", str(index1).zfill(8) + ".jpg" | |
| ), os.path.join(seq, cur_split, "Images", str(index1).zfill(8) + ".jpg") | |
| fea_path1, fea_path2 = os.path.join( | |
| self.config["feature_dump_dir"], | |
| seq, | |
| cur_split, | |
| str(index1).zfill(8) | |
| + ".jpg" | |
| + "_" | |
| + self.config["extractor"]["name"] | |
| + "_" | |
| + str(self.config["extractor"]["num_kpt"]) | |
| + ".hdf5", | |
| ), os.path.join( | |
| self.config["feature_dump_dir"], | |
| seq, | |
| cur_split, | |
| str(index2).zfill(8) | |
| + ".jpg" | |
| + "_" | |
| + self.config["extractor"]["name"] | |
| + "_" | |
| + str(self.config["extractor"]["num_kpt"]) | |
| + ".hdf5", | |
| ) | |
| self.data["img_path1"].append(img_path1), self.data["img_path2"].append( | |
| img_path2 | |
| ) | |
| self.data["fea_path1"].append(fea_path1), self.data["fea_path2"].append( | |
| fea_path2 | |
| ) | |
| self.form_standard_dataset() | |