|
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: |
|
data_type = "<f" |
|
else: |
|
data_type = ">f" |
|
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"] |
|
|
|
return kpts |
|
|