Vincentqyw
fix: roma
c74a070
raw
history blame
2.13 kB
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 = "<f"
else:
data_type = ">f" # big-endian
data_string = fin.read()
data = np.fromstring(data_string, data_type)
shape = (height, width, 3) if color else (height, width)
data = np.reshape(data, shape)
data = np.flip(data, 0)
return data
def _parse_img(img_paths, idx, config):
img_path = img_paths[idx]
img = cv2.imread(img_path)[:, :, ::-1]
if config["resize"] > 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