def test_extractors_context_manager(): """ Unit test for context manager Extractors """ for characteristic in Characteristics: with Extractors(characteristic) as extractors: assert isinstance(extractors, Extractors)
def test_acceleration_discovery(monkeypatch): """ Unit test for acceleration_discovery staticmethod """ @staticmethod def mocked___init__(characteristics): """ Closure to mock __init__ behaviour """ del characteristics @staticmethod def mocked_acceleration_discovery(): """ Closure to mock acceleration_discovery behaviour """ return True monkeypatch.setattr( Extractors, '__init__', mocked___init__ ) monkeypatch.setattr( Extractors, 'acceleration_discovery', mocked_acceleration_discovery ) assert Extractors( Characteristics.LIGHTWEIGHT_REGULAR_PRECISION ).acceleration_discovery()
def test_network_instance(): """ Unit test for network instantiation """ for characteristic in Characteristics: with Extractors(characteristic) as extractor: assert extractor._infer_network()[1].name == extractor.network.name
def test_extract(): """ Unit test for extract method """ for characteristic in Characteristics: with Extractors(characteristic) as extractor: assert extractor.extract(abspath(TEST_LOCAL)).shape[0] == \ extractor.network.output_shape[1]
def test_preprocessor(): """ Unit test for preprocessor method """ for characteristic in Characteristics: with Extractors(characteristic) as extractor: assert extractor.preprocessor(abspath(TEST_LOCAL)).shape == \ (1, *extractor.image_input_shape, 3)
def index(self, uri, **kwargs): """ Performs image indexing. Parameters ---------- uri: str Directory or file, or http(s) location. **check_unique (optional): bool If, during the index process, imported images should have their unicity verified (to avoid duplicates). """ with Extractors( characteristics=self._characteristic) as extractor, Index( extractor.output_shape, data_dir=self._data_dir) as index: self._index_configuration('w', feature_size=extractor.output_shape) with concurrent.futures.ThreadPoolExecutor() as executor: futures = { executor.submit(self.image_database.insert, rank, uri_from_file): rank for rank, uri_from_file in enumerate( extractor.scan_images(uri)) } ranks = [] for future in extractor.progress( concurrent.futures.as_completed(futures), message='Importing images:'): ranks.append(futures[future]) for rank in extractor.progress(sorted(ranks), precise=True, message='Indexing images:'): features_tensor_name = self.image_database.\ mount_file_name( rank, 'npy' ) extractor.save_tensor( extractor.extract, self.image_database.mount_file_name(rank, 'jpg'), features_tensor_name) check_unique = kwargs.get('check_unique') if check_unique is None: check_unique = False index.append(extractor.load_tensor(features_tensor_name), check_unique=check_unique) os.remove(features_tensor_name)
def search(self, query, top=4): """ Executes the search for a created database Parameters ---------- query: str URI of a image to query top (optional)(default: 4): int How many results should be returned. """ with Extractors(characteristics=self._characteristic) as extractor: with Index(extractor.output_shape, data_dir=self._data_dir) as index: for result in index.search(extractor.extract(query), results=top): yield result
def test_append_check_unique(): """Unit test for method append, check unique case.""" with warnings.catch_warnings(record=True) as caught_warnings: warnings.simplefilter('always') with Extractors( Characteristics.LIGHTWEIGHT_REGULAR_PRECISION ) as extractor, \ Index(extractor.output_shape, volatile=True) as index: for image in extractor.scan(TEST_CHECK_UNIQUE): index.append( extractor.extract(image), check_unique=True ) assert len(caught_warnings) == 1 assert issubclass(caught_warnings[-1].category, UserWarning) assert str( caught_warnings[-1].message ) == 'Tensor being indexed already exists in the database ' + \ 'and the check for duplicates are on. Refusing to store ' + \ 'again this tensor.'
def test_unknown_network_instance(self): """Unit test for an unknown network characteristic.""" with self.assertRaises(UnknownCharacteristics): Extractors(UNKNOWN_CHARACTERISTICS)
def test_output_shape_property(): """Unit test for property output_shape.""" for characteristic in Characteristics: with Extractors(characteristic) as extractor: assert extractor.output_shape == extractor._features_output_shape