Integra gli incorporatori di immagini

Gli incorporatori di immagini consentono di incorporare immagini in un vettore di caratteristiche ad alta dimensionalità che rappresenta il significato semantico di un'immagine, che può quindi essere confrontato con il vettore di caratteristiche di altre immagini per valutarne la somiglianza semantica.

Al contrario di ricerca immagini, l'incorporamento di immagini consente di calcolare all'istante la somiglianza tra le immagini anziché cercare in un indice predefinito creato da un corpus di immagini.

Usa l'API ImageEmbedder della libreria di attività per eseguire il deployment dell'incorporamento di immagini personalizzato nelle tue app mobile.

Funzionalità chiave dell'API ImageEmbedder

  • Elaborazione dell'immagine di input, inclusi rotazione, ridimensionamento e spazio colore e conversione in blocco.

  • Regione di interesse dell'immagine di input.

  • Funzione di utilità integrata per calcolare somiglianza coseno tra vettori di caratteristiche.

Modelli di incorporamento di immagini supportati

La compatibilità dei seguenti modelli è garantita con ImageEmbedder tramite Google Cloud CLI o tramite l'API Compute Engine.

Esegui l'inferenza in 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());

Consulta le codice sorgente per altre opzioni di configurazione di ImageEmbedder.

Esegui l'inferenza in Python

Passaggio 1: installa il pacchetto Pypi di assistenza TensorFlow Lite

Puoi installare il pacchetto Pypi di assistenza TensorFlow Lite utilizzando quanto segue :

pip install tflite-support

Passaggio 2: utilizzo del modello

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)

Consulta le codice sorgente per altre opzioni di configurazione di ImageEmbedder.

Risultati di esempio

La somiglianza coseno tra vettori di caratteristiche normalizzati restituisce un punteggio compreso tra -1 e 1. Maggiore è meglio, cioè una somiglianza coseno di 1 significa che i due vettori sono identici.

Cosine similarity: 0.954312

Prova la semplice Strumento dimostrativo dell'interfaccia a riga di comando per ImageEmbedder con il tuo modello e dati di test.

Requisiti di compatibilità del modello

L'API ImageEmbedder prevede un modello TFLite con opzioni facoltative, ma consigliato Metadati del modello TFLite.

I modelli di incorporamento di immagini compatibili devono soddisfare i seguenti requisiti:

  • Un tensore di immagine di input (kTfLiteUInt8/kTfLiteFloat32)

    • input immagine di dimensioni [batch x height x width x channels].
    • l'inferenza batch non è supportata (batch deve essere 1).
    • sono supportati solo gli input RGB (è necessario che i valori channels siano 3).
    • se il tipo è kTfLiteFloat32, è necessario che le NormalizationOptions allegati ai metadati per la normalizzazione degli input.
  • Almeno un tensore di output (kTfLiteUInt8/kTfLiteFloat32)

    • con N componenti corrispondenti alle dimensioni N dell'oggetto restituito vettore di caratteristiche per questo livello di output.
    • Due o quattro dimensioni, ad esempio [1 x N] o [1 x 1 x 1 x N].