Intégrer des outils de recherche d'images

La recherche d'images permet de trouver des images similaires dans une base de données d'images. Il fonctionne en intégrant la requête de recherche dans un vecteur de grande dimension représentant la signification sémantique de la requête, suivi d'une recherche de similarité dans un index personnalisé prédéfini à l'aide de ScaNN (Scalable Approximate Nearest Neighbor).

Contrairement à la classification d'images, l'augmentation du nombre d'éléments pouvant être reconnus ne nécessite pas de réentraîner l'intégralité du modèle. Pour ajouter des éléments, il suffit de reconstruire l'index. Cela permet également de travailler avec des bases de données d'images plus volumineuses (plus de 100 000 éléments).

Utilisez l'API Task Library ImageSearcher pour déployer votre outil de recherche d'images personnalisé dans vos applications mobiles.

Principales fonctionnalités de l'API ImageSearcher

  • Prend une seule image en entrée, extrait les embeddings et effectue une recherche des plus proches voisins dans l'index.

  • Traitement des images d'entrée, y compris la rotation, le redimensionnement et la conversion de l'espace colorimétrique.

  • Région d'intérêt de l'image d'entrée.

Prérequis

Avant d'utiliser l'API ImageSearcher, un index doit être créé en fonction du corpus d'images personnalisé dans lequel effectuer la recherche. Pour ce faire, vous pouvez utiliser l'API Model Maker Searcher en suivant et en adaptant le tutoriel.

Pour cela, vous aurez besoin des éléments suivants :

Après cette étape, vous devriez disposer d'un modèle de recherche TFLite autonome (par exemple, mobilenet_v3_searcher.tflite), qui est le modèle d'intégration d'images d'origine avec l'index associé aux métadonnées du modèle TFLite.

Exécuter une inférence en Java

Étape 1 : Importer la dépendance Gradle et d'autres paramètres

Copiez le fichier de modèle du moteur de recherche .tflite dans le répertoire des éléments du module Android dans lequel le modèle sera exécuté. Indiquez que le fichier ne doit pas être compressé et ajoutez la bibliothèque TensorFlow Lite au fichier build.gradle du module :

android {
    // Other settings

    // Specify tflite index file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

Étape 2 : Utiliser le modèle

// Initialization
ImageSearcherOptions options =
    ImageSearcherOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setSearcherOptions(
            SearcherOptions.builder().setL2Normalize(true).build())
        .build();
ImageSearcher imageSearcher =
    ImageSearcher.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<NearestNeighbor> results = imageSearcher.search(image);

Consultez le code source et le Javadoc pour découvrir d'autres options de configuration de ImageSearcher.

Exécuter une inférence en C++

// Initialization
ImageSearcherOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
options.mutable_embedding_options()->set_l2_normalize(true);
std::unique_ptr<ImageSearcher> image_searcher = ImageSearcher::CreateFromOptions(options).value();

// Create input frame_buffer from your inputs, `image_data` and `image_dimension`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer = CreateFromRgbRawBuffer(
      image_data, image_dimension);

// Run inference
const SearchResult result = image_searcher->Search(*frame_buffer).value();

Pour découvrir d'autres options de configuration de ImageSearcher, consultez le code source.

Exécuter l'inférence en Python

Étape 1 : Installez le package Pypi TensorFlow Lite Support.

Vous pouvez installer le package Pypi TensorFlow Lite Support à l'aide de la commande suivante :

pip install tflite-support

Étape 2 : Utiliser le modèle

from tflite_support.task import vision

# Initialization
image_searcher = vision.ImageSearcher.create_from_file(model_path)

# Run inference
image = vision.TensorImage.create_from_file(image_file)
result = image_searcher.search(image)

Pour découvrir d'autres options de configuration de ImageSearcher, consultez le code source.

Exemples de résultats

Results:
 Rank#0:
  metadata: burger
  distance: 0.13452
 Rank#1:
  metadata: car
  distance: 1.81935
 Rank#2:
  metadata: bird
  distance: 1.96617
 Rank#3:
  metadata: dog
  distance: 2.05610
 Rank#4:
  metadata: cat
  distance: 2.06347

Essayez l'outil de démonstration simple de l'interface de ligne de commande pour ImageSearcher avec votre propre modèle et vos propres données de test.