Spaces:
Running
Running
import argparse | |
import collections.abc as collections | |
from pathlib import Path | |
from typing import List, Optional, Union | |
from . import logger | |
from .utils.io import list_h5_names | |
from .utils.parsers import parse_image_lists | |
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)): | |
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 | |
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)) | |
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__) | |