Mit der Bildersuche können Sie in einer Bilddatenbank nach ähnlichen Bildern suchen. Dazu wird die Suchanfrage in einen hochdimensionalen Vektor eingebettet, der die semantische Bedeutung der Anfrage darstellt. Anschließend wird in einem vordefinierten benutzerdefinierten Index mit ScaNN (Scalable Nearest Neighbors) nach Ähnlichkeiten gesucht.
Im Gegensatz zur Bildklassifizierung ist es nicht erforderlich, das gesamte Modell neu zu trainieren, um die Anzahl der erkennbaren Elemente zu erhöhen. Neue Elemente können einfach durch erneutes Erstellen des Index hinzugefügt werden. So können Sie auch mit größeren Bilddatenbanken (über 100.000 Elemente) arbeiten.
Mit der Task Library-API ImageSearcher können Sie Ihre benutzerdefinierte Bildsuchfunktion in Ihren mobilen Apps bereitstellen.
Wichtige Funktionen der ImageSearcher API
Nimmt ein einzelnes Bild als Eingabe entgegen, führt die Extraktion von Einbettungen und die Suche nach dem nächsten Nachbarn im Index aus.
Verarbeitung von Eingabebildern, einschließlich Drehung, Größenänderung und Farbraumkonvertierung.
Der Bereich des Eingabebilds, der von Interesse ist.
Vorbereitung
Bevor Sie die ImageSearcher API verwenden können, muss ein Index auf Grundlage des benutzerdefinierten Bildkorpus erstellt werden, in dem gesucht werden soll. Dies kann mit der Model Maker Searcher API erreicht werden, indem Sie der Anleitung folgen und sie anpassen.
Dazu benötigen Sie:
- ein TFLite-Modell für die Bildeinbettung wie mobilenetv3.
Weitere vortrainierte Embedder-Modelle (auch Feature-Vektormodelle genannt) finden Sie in der Google Image Modules-Sammlung auf Kaggle Models.
- Ihrem Bildkorpus.
Nach diesem Schritt sollten Sie ein eigenständiges TFLite-Suchmodell haben (z. B. mobilenet_v3_searcher.tflite). Das ist das ursprüngliche Modell für das Einbetten von Bildern mit dem Index, der an die TFLite-Modellmetadaten angehängt ist.
Inferenz in Java ausführen
Schritt 1: Gradle-Abhängigkeit und andere Einstellungen importieren
Kopieren Sie die Datei .tflite des Suchmodells in das Assets-Verzeichnis des Android-Moduls, in dem das Modell ausgeführt wird. Geben Sie an, dass die Datei nicht komprimiert werden soll, und fügen Sie die TensorFlow Lite-Bibliothek der build.gradle-Datei des Moduls hinzu:
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'
}
Schritt 2: Modell verwenden
// 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);
Weitere Optionen zum Konfigurieren von ImageSearcher finden Sie im Quellcode und in der Javadoc.
Inferenz in C++ ausführen
// 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();
Weitere Optionen zum Konfigurieren von ImageSearcher finden Sie im Quellcode.
Inferenz in Python ausführen
Schritt 1: TensorFlow Lite Support-PyPI-Paket installieren
Sie können das TensorFlow Lite Support-PyPI-Paket mit dem folgenden Befehl installieren:
pip install tflite-support
Schritt 2: Modell verwenden
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)
Weitere Optionen zum Konfigurieren von ImageSearcher finden Sie im Quellcode.
Beispielergebnisse
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
Testen Sie das einfache CLI-Demotool für ImageSearcher mit Ihrem eigenen Modell und Ihren eigenen Testdaten.