예제 #1
0
def test_extractors_context_manager():
    """
    Unit test for context manager Extractors
    """
    for characteristic in Characteristics:
        with Extractors(characteristic) as extractors:
            assert isinstance(extractors, Extractors)
예제 #2
0
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()
예제 #3
0
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
예제 #4
0
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]
예제 #5
0
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)
예제 #6
0
    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)
예제 #7
0
    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
예제 #8
0
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.'
예제 #9
0
 def test_unknown_network_instance(self):
     """Unit test for an unknown network characteristic."""
     with self.assertRaises(UnknownCharacteristics):
         Extractors(UNKNOWN_CHARACTERISTICS)
예제 #10
0
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