Spaces:
Running
Running
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='_') | |