La ricerca di 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 per similarità in un indice personalizzato predefinito utilizzando ScanNN (Scalable Nearest Neighbors).
A differenza della classificazione delle immagini , l'espansione del numero di elementi riconoscibili non richiede la riqualificazione dell'intero modello. È possibile aggiungere nuovi elementi semplicemente ricostruendo l'indice. Ciò consente anche di lavorare con database di immagini più grandi (100.000 articoli).
Utilizza l'API ImageSearcher
della Libreria attività per distribuire il tuo cercatore di immagini personalizzato nelle tue app mobili.
Caratteristiche principali dell'API ImageSearcher
Prende una singola immagine come input, esegue l'estrazione dell'incorporamento e la ricerca del vicino più vicino nell'indice.
Elaborazione dell'immagine di input, inclusa 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. Ciò può essere ottenuto utilizzando l' API Model Maker Searcher seguendo e adattando il tutorial .
Per questo avrai bisogno di:
- un modello di incorporamento di immagini TFLite come mobilenet v3 . Visualizza altri modelli di incorporamento pre-addestrati (noti anche come modelli vettoriali di funzionalità) dalla raccolta di Google Image Modules su TensorFlow Hub .
- il tuo corpus di immagini
Dopo questo passaggio, dovresti avere un modello di ricerca TFLite autonomo (ad es. mobilenet_v3_searcher.tflite
), che è 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 da 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. Specificare che il file non deve essere compresso e aggiungere 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 (NNAPI is included)
implementation 'org.tensorflow:tensorflow-lite-task-vision:0.4.0'
// Import the GPU delegate plugin Library for GPU inference
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.0'
}
Passaggio 2: utilizzo del 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);
Vedere il codice sorgente e javadoc per ulteriori opzioni per configurare ImageSearcher
.
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();
Vedere il codice sorgente per ulteriori opzioni per configurare ImageSearcher
.
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 comando seguente:
pip install tflite-support
Passaggio 2: utilizzo del 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)
Vedere il codice sorgente per ulteriori opzioni per configurare 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 prova.