image-matching-webui / imcui /third_party /gim /hloc /pairs_from_exhaustive.py
Realcat's picture
update: major change
499e141
raw
history blame contribute delete
2.48 kB
import argparse
import collections.abc as collections
import os
from pathlib import Path
from typing import Optional, Union, List
from . import logger
from .utils.parsers import parse_image_lists
from .utils.io import list_h5_names
def main(
output: Path,
image_list: Optional[Union[Path, List[str]]] = None,
features: Optional[Path] = None,
ref_list: Optional[Union[Path, List[str]]] = None,
ref_features: Optional[Path] = None):
if image_list is not None:
if isinstance(image_list, (str, Path)):
if image_list.is_dir():
names_q = [x for x in os.listdir(str(image_list)) if x.endswith('.jpg') or x.endswith('.png')]
names_q.sort()
else:
names_q = parse_image_lists(image_list)
elif isinstance(image_list, collections.Iterable):
names_q = list(image_list)
else:
raise ValueError(f'Unknown type for image list: {image_list}')
elif features is not None:
names_q = list_h5_names(features)
else:
raise ValueError('Provide either a list of images or a feature file.')
self_matching = False
if ref_list is not None:
if isinstance(ref_list, (str, Path)):
names_ref = parse_image_lists(ref_list)
elif isinstance(image_list, collections.Iterable):
names_ref = list(ref_list)
else:
raise ValueError(
f'Unknown type for reference image list: {ref_list}')
elif ref_features is not None:
names_ref = list_h5_names(ref_features)
else:
self_matching = True
names_ref = names_q
pairs = []
for i, n1 in enumerate(names_q):
for j, n2 in enumerate(names_ref):
if self_matching and j <= i:
continue
# if j - i > 5:
# continue
pairs.append((n1, n2))
logger.info(f'Found {len(pairs)} pairs.')
with open(output, 'w') as f:
f.write('\n'.join(' '.join([i, j]) for i, j in pairs))
return pairs
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--output', required=True, type=Path)
parser.add_argument('--image_list', type=Path)
parser.add_argument('--features', type=Path)
parser.add_argument('--ref_list', type=Path)
parser.add_argument('--ref_features', type=Path)
args = parser.parse_args()
main(**args.__dict__)