Integracja wyszukiwarek obrazów

Wyszukiwanie obrazów umożliwia wyszukiwanie podobnych obrazów w bazie danych obrazów. it polega na osadzeniu zapytania w wysokowymiarowym wektorze reprezentującym z semantycznym znaczeniem zapytania, a następnie wyszukiwanie podobieństw w wstępnie zdefiniowanego, niestandardowego indeksu za pomocą ScaNN (skalowalne najbliższe sąsiedzi).

W przeciwieństwie do klasyfikacja obrazów, Zwiększenie liczby rozpoznawanych przedmiotów nie wymaga ponownego trenowania dla całego modelu. Nowe elementy można dodawać, tworząc indeks. To także umożliwia pracę z większymi bazami danych obrazów (ponad 100 tys. elementów).

Wdrożenie niestandardowego narzędzia do wyszukiwania obrazów przy użyciu interfejsu Task Library API ImageSearcher do aplikacji mobilnych.

Najważniejsze funkcje interfejsu ImageSearcher API

  • Pobiera pojedynczy obraz jako dane wejściowe, przeprowadza wyodrębnianie wektora dystrybucyjnego oraz wyszukiwanie najbliższych sąsiadów w indeksie.

  • Przetwarzanie obrazu, w tym obrót, zmiana rozmiaru i przestrzeń kolorów konwersji.

  • Obszar zainteresowań obrazu wejściowego.

Wymagania wstępne

Zanim użyjesz interfejsu API ImageSearcher, musisz utworzyć indeks na podstawie niestandardowy korpus obrazów do przeszukania. Można to osiągnąć za pomocą Interfejs Model Maker Searcher API Stosując i dostosowując samouczek.

Potrzebujesz do tego:

Po wykonaniu tego kroku musisz mieć samodzielny model wyszukiwania TFLite (np. mobilenet_v3_searcher.tflite), czyli model umieszczania obrazów z oryginalnym obrazem, do indeksu dołączonego do Metadane modelu TFLite.

Uruchom wnioskowanie w Javie

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

Skopiuj plik modelu wyszukiwarki .tflite do katalogu zasobów Androida w którym będzie uruchomiony model. Określ, że plik nie powinien być skompresować i dodać bibliotekę TensorFlow Lite do modułu build.gradle plik:

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

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 poznać więcej opcji konfigurowania 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 konfigurowania ImageSearcher.

Uruchom wnioskowanie w Pythonie

Krok 1. Zainstaluj pakiet Pypi Support TensorFlow Lite.

Możesz zainstalować pakiet Pypi Support Pypi na TensorFlow Lite za pomocą: polecenie:

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 konfigurowania 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 prostą Narzędzie w wersji demonstracyjnej interfejsu wiersza poleceń dla ImageSearcher z własnym modelem i danymi testowymi.