Zintegruj wyszukiwarki obrazów

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wyszukiwanie obrazów umożliwia wyszukiwanie podobnych obrazów w bazie obrazów. Działa poprzez osadzenie zapytania wyszukiwania w wysokowymiarowym wektorze reprezentującym semantyczne znaczenie zapytania, a następnie wyszukiwanie podobieństwa w predefiniowanym, niestandardowym indeksie za pomocą ScanNN (Scalable Nearest Neighbors).

W przeciwieństwie do klasyfikacji obrazów rozszerzenie liczby elementów, które można rozpoznać, nie wymaga ponownego uczenia całego modelu. Nowe pozycje można dodawać po prostu odbudowując indeks. Umożliwia to również pracę z większymi (100k+ elementów) bazami danych obrazów.

Użyj interfejsu API ImageSearcher biblioteki zadań, aby wdrożyć swoją niestandardową wyszukiwarkę obrazów w swoich aplikacjach mobilnych.

Kluczowe cechy interfejsu API ImageSearcher

  • Pobiera pojedynczy obraz jako dane wejściowe, wykonuje ekstrakcję osadzania i wyszukiwanie najbliższego sąsiedztwa w indeksie.

  • Przetwarzanie obrazu wejściowego, w tym obracanie, zmiana rozmiaru i konwersja przestrzeni kolorów.

  • Obszar zainteresowania obrazu wejściowego.

Warunki wstępne

Przed użyciem interfejsu API ImageSearcher należy utworzyć indeks na podstawie niestandardowego korpusu obrazów do przeszukiwania. Można to osiągnąć za pomocą interfejsu API Model Maker Searcher , postępując zgodnie z samouczkiem i dostosowując go.

Do tego będziesz potrzebować:

Po tym kroku powinieneś mieć samodzielny model wyszukiwarki TFLite (np mobilenet_v3_searcher.tflite ), który jest oryginalnym modelem osadzania obrazu z indeksem dołączonym do metadanych modelu TFLite .

Uruchom wnioskowanie w Javie

Krok 1: Importuj zależność Gradle i inne ustawienia

Skopiuj plik modelu wyszukiwarki .tflite do katalogu asset modułu Android, w którym będzie uruchamiany model. Określ, że plik nie powinien być skompresowany, i dodaj bibliotekę TensorFlow Lite do pliku build.gradle modułu:

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'
}

Krok 2: Korzystanie z modelu

// 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);

Zobacz kod źródłowy i javadoc, aby uzyskać więcej opcji konfiguracji ImageSearcher .

Uruchom wnioskowanie w 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();

Zobacz kod źródłowy, aby uzyskać więcej opcji konfiguracji ImageSearcher .

Uruchom wnioskowanie w Pythonie

Krok 1: Zainstaluj pakiet TensorFlow Lite Support Pypi.

Możesz zainstalować pakiet TensorFlow Lite Support Pypi za pomocą następującego polecenia:

pip install tflite-support

Krok 2: Korzystanie z modelu

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)

Zobacz kod źródłowy, aby uzyskać więcej opcji konfiguracji ImageSearcher .

Przykładowe wyniki

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

Wypróbuj proste narzędzie demonstracyjne CLI dla ImageSearcher z własnym modelem i danymi testowymi.