Intégrer des intégrateurs d'images

Les intégrateurs d'images permettent d'intégrer des images dans un vecteur de caractéristiques de grande dimension représentant la signification sémantique d'une image, qui peut ensuite être comparé au vecteur de caractéristiques d'autres images pour évaluer leur similarité sémantique.

Contrairement à la recherche d'images, l'outil d'intégration d'images permet de calculer la similarité entre les images à la volée au lieu de rechercher dans un index prédéfini créé à partir d'un corpus d'images.

Utilisez l'API Task Library ImageEmbedder pour déployer votre intégrateur d'images personnalisé dans vos applications mobiles.

Principales fonctionnalités de l'API ImageEmbedder

  • 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.

  • Fonction utilitaire intégrée permettant de calculer la similarité cosinus entre les vecteurs de caractéristiques.

Modèles d'intégration d'images compatibles

Les modèles suivants sont garantis d'être compatibles avec l'API ImageEmbedder.

Exécuter une inférence en C++

// Initialization
ImageEmbedderOptions options:
options.mutable_model_file_with_metadata()->set_file_name(model_path);
options.set_l2_normalize(true);
std::unique_ptr<ImageEmbedder> image_embedder = ImageEmbedder::CreateFromOptions(options).value();

// Create input frame_buffer_1 and frame_buffer_2 from your inputs `image_data1`, `image_data2`, `image_dimension1` and `image_dimension2`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer_1 = CreateFromRgbRawBuffer(
      image_data1, image_dimension1);
std::unique_ptr<FrameBuffer> frame_buffer_2 = CreateFromRgbRawBuffer(
      image_data2, image_dimension2);

// Run inference on two images.
const EmbeddingResult result_1 = image_embedder->Embed(*frame_buffer_1);
const EmbeddingResult result_2 = image_embedder->Embed(*frame_buffer_2);

// Compute cosine similarity.
double similarity = ImageEmbedder::CosineSimilarity(
    result_1.embeddings[0].feature_vector(),
    result_2.embeddings[0].feature_vector());

Pour découvrir d'autres options de configuration de ImageEmbedder, 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_embedder = vision.ImageEmbedder.create_from_file(model_path)

# Run inference on two images.
image_1 = vision.TensorImage.create_from_file('/path/to/image1.jpg')
result_1 = image_embedder.embed(image_1)
image_2 = vision.TensorImage.create_from_file('/path/to/image2.jpg')
result_2 = image_embedder.embed(image_2)

# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = image_embedder.cosine_similarity(
    result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)

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

Exemples de résultats

La similarité cosinus entre les vecteurs de caractéristiques normalisés renvoie un score compris entre -1 et 1. Plus la valeur est élevée, mieux c'est. Par exemple, une similarité cosinus de 1 signifie que les deux vecteurs sont identiques.

Cosine similarity: 0.954312

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

Exigences de compatibilité des modèles

L'API ImageEmbedder attend un modèle TFLite avec des métadonnées de modèle TFLite facultatives, mais fortement recommandées.

Les modèles d'intégration d'images compatibles doivent répondre aux exigences suivantes :

  • Tensor d'image d'entrée (kTfLiteUInt8/kTfLiteFloat32)

    • image d'entrée de taille [batch x height x width x channels].
    • L'inférence par lots n'est pas acceptée (batch doit être défini sur 1).
    • Seules les entrées RVB sont acceptées (channels doit être égal à 3).
    • Si le type est kTfLiteFloat32, des options de normalisation doivent être associées aux métadonnées pour la normalisation des entrées.
  • Au moins un Tensor de sortie (kTfLiteUInt8/kTfLiteFloat32)

    • avec N composants correspondant aux N dimensions du vecteur de caractéristiques renvoyé pour cette couche de sortie.
    • Deux ou quatre dimensions, c'est-à-dire [1 x N] ou [1 x 1 x 1 x N].