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