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:
- model umieszczania obrazów TFLite, taki jak mobilenet v3. Zobacz więcej wstępnie wytrenowanych modeli osadzonych (inaczej modele wektorów wektorowych cech) z Kolekcja modułów obrazu Google w modelach Kaggle.
- Twojego korpusu obrazów.
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.