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.
I modelli vettoriali di caratteristiche Raccolta moduli immagine di Google su modelli Kaggle.
Modelli personalizzati che soddisfano requisiti di compatibilità dei modelli.
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.
- input immagine di dimensioni
Almeno un tensore di output (kTfLiteUInt8/kTfLiteFloat32)
- con
N
componenti corrispondenti alle dimensioniN
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]
.
- con