La ricerca immagini consente di cercare immagini simili in un database di immagini. Funziona incorporando la query di ricerca in un vettore ad alta dimensione che rappresenta il significato semantico della query, seguito dalla ricerca di somiglianza in un indice personalizzato predefinito utilizzando ScaNN (Scalable Nearest Neighbors).
A differenza della classificazione delle immagini, l'espansione del numero di elementi che possono essere riconosciuti non richiede il riaddestramento dell'intero modello. È possibile aggiungere nuovi elementi semplicemente ricreando l'indice. Ciò consente anche di lavorare con database di immagini più grandi (oltre 100.000 elementi).
Utilizza l'API Task Library ImageSearcher per implementare il tuo strumento di ricerca di immagini personalizzato nelle tue app mobile.
Funzionalità principali dell'API ImageSearcher
Accetta una singola immagine come input, esegue l'estrazione dell'incorporamento e la ricerca del vicino più prossimo nell'indice.
Elaborazione dell'immagine di input, inclusi rotazione, ridimensionamento e conversione dello spazio colore.
Regione di interesse dell'immagine di input.
Prerequisiti
Prima di utilizzare l'API ImageSearcher, è necessario creare un indice basato sul
corpus personalizzato di immagini in cui eseguire la ricerca. Puoi farlo utilizzando l'API
Model Maker
Searcher
seguendo e adattando il tutorial.
Per farlo, ti serviranno:
- un modello di incorporamento di immagini TFLite come mobilenet
v3.
Scopri altri modelli di incorporamento preaddestrati (ovvero modelli di vettori delle caratteristiche) nella
raccolta di moduli di Google Images su Kaggle
Models.
- il tuo corpus di immagini.
Dopo questo passaggio, dovresti avere un modello di ricerca TFLite autonomo (ad es.
mobilenet_v3_searcher.tflite), ovvero il modello di incorporamento di immagini originale con
l'indice allegato ai metadati del modello
TFLite.
Esegui l'inferenza in Java
Passaggio 1: importa la dipendenza Gradle e altre impostazioni
Copia il file del modello di ricerca .tflite nella directory degli asset del modulo Android in cui verrà eseguito il modello. Specifica che il file non deve essere
compresso e aggiungi la libreria TensorFlow Lite al file build.gradle del modulo:
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
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.4'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}
Passaggio 2: utilizza il modello
// 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);
Per altre opzioni di configurazione di ImageSearcher, consulta il codice sorgente e
javadoc.
Esegui l'inferenza in 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();
Consulta il codice
sorgente
per altre opzioni di configurazione di ImageSearcher.
Esegui l'inferenza in Python
Passaggio 1: installa il pacchetto Pypi di TensorFlow Lite Support.
Puoi installare il pacchetto Pypi di TensorFlow Lite Support utilizzando il seguente comando:
pip install tflite-support
Passaggio 2: utilizza il modello
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)
Consulta il codice
sorgente
per altre opzioni di configurazione di ImageSearcher.
Risultati di esempio
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
Prova il semplice strumento demo CLI per ImageSearcher con il tuo modello e i tuoi dati di test.