Spaces:
Running
Running
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 | |