Zintegruj wyszukiwarki obrazów

Wyszukiwanie obrazów umożliwia wyszukiwanie podobnych obrazów w bazie obrazów. Działa poprzez osadzenie wyszukiwanego hasła w wielowymiarowym wektorze reprezentującym semantyczne znaczenie zapytania, a następnie wyszukiwanie podobieństwa we wstępnie zdefiniowanym, niestandardowym indeksie przy użyciu ScaNN (Scalable Nearest Neighbours).

W przeciwieństwie do klasyfikacji obrazów , zwiększenie liczby elementów, które można rozpoznać, nie wymaga ponownego uczenia całego modelu. Nowe elementy można dodawać po prostu odbudowując indeks. Umożliwia to także pracę z większymi (ponad 100 tys. pozycji) bazami danych obrazów.

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

Najważniejsze cechy API ImageSearcher

  • Pobiera pojedynczy obraz jako dane wejściowe, przeprowadza wyodrębnianie osadzania i wyszukiwanie najbliższego sąsiada 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 zbudować indeks na podstawie niestandardowego korpusu obrazów, które mają być przeszukiwane. Można to osiągnąć za pomocą interfejsu API Model Maker Searcher, postępując zgodnie z tutorialem 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 osadzającym obraz z indeksem dołączonym do metadanych modelu TFLite .

Uruchom wnioskowanie w Javie

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

Skopiuj plik modelu wyszukiwarki .tflite do katalogu zasobów modułu Android, w którym model będzie uruchamiany. Określ, że plik nie powinien być kompresowany 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.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

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 Pypi obsługujący TensorFlow Lite.

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.