Vincentqyw
update: sync with hloc
4c88343
raw
history blame
1.69 kB
import logging
from collections import defaultdict
from pathlib import Path
import numpy as np
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=model, width=int(width), height=int(height), params=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="_")