Spaces:
Running
Running
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__) | |