import os import re import cv2 import numpy as np from ..utils.common import Notify def read_list(list_path): """Read list.""" if list_path is None or not os.path.exists(list_path): print(Notify.FAIL, "Not exist", list_path, Notify.ENDC) exit(-1) content = open(list_path).read().splitlines() return content def load_pfm(pfm_path): with open(pfm_path, "rb") as fin: color = None width = None height = None scale = None data_type = None header = str(fin.readline().decode("UTF-8")).rstrip() if header == "PF": color = True elif header == "Pf": color = False else: raise Exception("Not a PFM file.") dim_match = re.match(r"^(\d+)\s(\d+)\s$", fin.readline().decode("UTF-8")) if dim_match: width, height = map(int, dim_match.groups()) else: raise Exception("Malformed PFM header.") scale = float((fin.readline().decode("UTF-8")).rstrip()) if scale < 0: # little-endian data_type = " 0: img = cv2.resize(img, (config["resize"], config["resize"])) return img def _parse_depth(depth_paths, idx, config): depth = load_pfm(depth_paths[idx]) if config["resize"] > 0: target_size = config["resize"] if config["input_type"] == "raw": depth = cv2.resize(depth, (int(target_size / 2), int(target_size / 2))) else: depth = cv2.resize(depth, (target_size, target_size)) return depth def _parse_kpts(kpts_paths, idx, config): kpts = np.load(kpts_paths[idx])["pts"] # output: [N, 2] (W first H last) return kpts