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 valutare la loro somiglianza semantica.

A differenza della ricerca di immagini , l'incorporamento di immagini consente di calcolare al volo la somiglianza tra le immagini invece di cercare in un indice predefinito creato da un corpus di immagini.

Utilizza l'API ImageEmbedder della libreria attività per distribuire l'incorporamento di immagini personalizzato nelle tue app mobili.

Funzionalità principali dell'API ImageEmbedder

  • Elaborazione delle immagini in ingresso, inclusa rotazione, ridimensionamento e conversione dello spazio colore.

  • Regione di interesse dell'immagine di input.

  • Funzione di utilità incorporata per calcolare la somiglianza del coseno tra i vettori delle caratteristiche.

Modelli di incorporamento di immagini supportati

È garantita la compatibilità dei seguenti modelli con l'API ImageEmbedder .

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 il codice sorgente per ulteriori opzioni per configurare ImageEmbedder .

Esegui l'inferenza in Python

Passaggio 1: installare il pacchetto Pypi di supporto TensorFlow Lite.

È possibile installare il pacchetto TensorFlow Lite Support Pypi utilizzando il seguente comando:

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 il codice sorgente per ulteriori opzioni per configurare ImageEmbedder .

Risultati di esempio

La somiglianza del coseno tra i vettori delle caratteristiche normalizzate restituisce un punteggio compreso tra -1 e 1. Più alto è meglio è, ovvero una somiglianza del coseno pari a 1 significa che i due vettori sono identici.

Cosine similarity: 0.954312

Prova il semplice strumento demo CLI per ImageEmbedder con il tuo modello e i dati di test.

Requisiti di compatibilità del modello

L'API ImageEmbedder prevede un modello TFLite con metadati del modello TFLite facoltativi ma fortemente consigliati.

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

  • Un tensore di immagine in 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 ingressi RGB ( channels devono essere 3).
    • se il tipo è kTfLiteFloat32, è necessario allegare NormalizationOptions ai metadati per la normalizzazione dell'input.
  • Almeno un tensore di uscita (kTfLiteUInt8/kTfLiteFloat32)

    • con N componenti corrispondenti alle N dimensioni del vettore di caratteristiche restituito per questo livello di output.
    • 2 o 4 dimensioni, ovvero [1 x N] o [1 x 1 x 1 x N] .