|
from pathlib import Path |
|
import logging |
|
import numpy as np |
|
from collections import defaultdict |
|
import pycolmap |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def parse_image_list(path, with_intrinsics=False): |
|
images = [] |
|
with open(path, "r") as f: |
|
for line in f: |
|
line = line.strip("\n") |
|
if len(line) == 0 or line[0] == "#": |
|
continue |
|
name, *data = line.split() |
|
if with_intrinsics: |
|
model, width, height, *params = data |
|
params = np.array(params, float) |
|
cam = pycolmap.Camera(model, int(width), int(height), params) |
|
images.append((name, cam)) |
|
else: |
|
images.append(name) |
|
|
|
assert len(images) > 0 |
|
logger.info(f"Imported {len(images)} images from {path.name}") |
|
return images |
|
|
|
|
|
def parse_image_lists(paths, with_intrinsics=False): |
|
images = [] |
|
files = list(Path(paths.parent).glob(paths.name)) |
|
assert len(files) > 0 |
|
for lfile in files: |
|
images += parse_image_list(lfile, with_intrinsics=with_intrinsics) |
|
return images |
|
|
|
|
|
def parse_retrieval(path): |
|
retrieval = defaultdict(list) |
|
with open(path, "r") as f: |
|
for p in f.read().rstrip("\n").split("\n"): |
|
if len(p) == 0: |
|
continue |
|
q, r = p.split() |
|
retrieval[q].append(r) |
|
return dict(retrieval) |
|
|
|
|
|
def names_to_pair(name0, name1, separator="/"): |
|
return separator.join((name0.replace("/", "-"), name1.replace("/", "-"))) |
|
|
|
|
|
def names_to_pair_old(name0, name1): |
|
return names_to_pair(name0, name1, separator="_") |
|
|