Bildersuchen einbinden

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:

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.