A pesquisa de imagens permite pesquisar imagens semelhantes em um banco de dados de imagens. Ele funciona incorporando a consulta de pesquisa em um vetor de alta dimensão que representa o significado semântico da consulta, seguido pela pesquisa de similaridade em um índice personalizado predefinido usando ScaNN (Scalable Nearest Neighbors).
Ao contrário da classificação de imagem , expandir o número de itens que podem ser reconhecidos não requer o retreinamento de todo o modelo. Novos itens podem ser adicionados simplesmente reconstruindo o índice. Isso também permite trabalhar com bancos de dados de imagens maiores (mais de 100 mil itens).
Use a API ImageSearcher
da Biblioteca de Tarefas para implantar seu buscador de imagens personalizado em seus aplicativos móveis.
Principais recursos da API ImageSearcher
Recebe uma única imagem como entrada, executa extração de incorporação e pesquisa do vizinho mais próximo no índice.
Processamento de imagem de entrada, incluindo rotação, redimensionamento e conversão de espaço de cores.
Região de interesse da imagem de entrada.
Pré-requisitos
Antes de usar a API ImageSearcher
, um índice precisa ser criado com base no corpus personalizado de imagens para pesquisar. Isso pode ser feito usando a API Model Maker Searcher seguindo e adaptando o tutorial .
Para isso você vai precisar de:
- um modelo de incorporação de imagens TFLite, como mobilenet v3 . Veja mais modelos de incorporador pré-treinados (também conhecidos como modelos de vetor de recursos) da coleção Google Image Modules no TensorFlow Hub .
- seu corpus de imagens.
Após esta etapa, você deve ter um modelo de buscador TFLite autônomo (por exemplo, mobilenet_v3_searcher.tflite
), que é o modelo de incorporação de imagem original com o índice anexado aos metadados do modelo TFLite .
Executar inferência em Java
Etapa 1: importar a dependência do Gradle e outras configurações
Copie o arquivo de modelo .tflite
searcher para o diretório assets do módulo Android onde o modelo será executado. Especifique que o arquivo não deve ser compactado e adicione a biblioteca do TensorFlow Lite ao arquivo build.gradle
do módulo:
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'
}
Etapa 2: usando o modelo
// 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);
Veja o código fonte e o javadoc para mais opções de configuração do ImageSearcher
.
Executar inferência em 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();
Consulte o código-fonte para obter mais opções para configurar o ImageSearcher
.
Executar inferência em Python
Etapa 1: instale o pacote Pypi de suporte do TensorFlow Lite.
Você pode instalar o pacote Pypi do TensorFlow Lite Support usando o seguinte comando:
pip install tflite-support
Etapa 2: usando o modelo
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)
Consulte o código-fonte para obter mais opções para configurar o ImageSearcher
.
Resultados de exemplo
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
Experimente a ferramenta de demonstração CLI simples para ImageSearcher com seu próprio modelo e dados de teste.