Merci de vous être connecté à Google I/O. Voir toutes les sessions à la demande Regarder à la demande

Intégrer des chercheurs d'images

La recherche d'images permet de rechercher 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, suivie d'une recherche de similarité dans un index personnalisé prédéfini à l'aide de ScaNN (Scalable Nearest Neighbors).

Contrairement à la classification d'images , l'augmentation du nombre d'éléments pouvant être reconnus ne nécessite pas de réentraîner l'ensemble du modèle. De nouveaux éléments peuvent être ajoutés en reconstruisant simplement l'index. Cela permet également de travailler avec des bases de données d'images plus importantes (plus de 100 000 éléments).

Utilisez l'API ImageSearcher de la bibliothèque de tâches pour déployer votre moteur de recherche d'images personnalisé dans vos applications mobiles.

Principales fonctionnalités de l'API ImageSearcher

  • Prend une seule image en entrée, effectue une extraction d'intégration et une recherche du plus proche voisin dans l'index.

  • Traitement de l'image 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.

Conditions préalables

Avant d'utiliser l'API ImageSearcher , un index doit être créé sur la base du corpus personnalisé d'images à rechercher. Ceci peut être réalisé à l'aide de l' API Model Maker Searcher en suivant et en adaptant le didacticiel .

Pour cela vous aurez besoin de :

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

Exécuter l'inférence en Java

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

Copiez le fichier de modèle de recherche .tflite dans le répertoire assets du module Android où le modèle sera exécuté. Spécifiez 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 (NNAPI is included)
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.0'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
}

Étape 2 : Utilisation du 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);

Voir le code source et javadoc pour plus d'options pour configurer le ImageSearcher .

Exécuter l'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();

Voir le code source pour plus d'options pour configurer ImageSearcher .

Exécuter l'inférence en Python

Étape 1 : Installez le package Pypi de prise en charge de TensorFlow Lite.

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

pip install tflite-support

Étape 2 : Utilisation du 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)

Voir le code source pour plus d'options pour configurer ImageSearcher .

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 CLI simple pour ImageSearcher avec votre propre modèle et vos données de test.