Os incorporadores de imagens permitem incorporar imagens em um vetor de recursos de alta dimensão que representa o significado semântico de uma imagem, que pode ser comparado com o vetor de recursos de outras imagens para avaliar a similaridade semântica.
Ao contrário da pesquisa de imagens, o incorporador de imagens permite calcular a similaridade entre imagens em tempo real, em vez de pesquisar em um índice predefinido criado com base em um corpus de imagens.
Use a API Task Library ImageEmbedder para implantar seu incorporador de imagens personalizado
nos seus apps para dispositivos móveis.
Principais recursos da API ImageEmbedder
Processamento de imagens de entrada, incluindo rotação, redimensionamento e conversão de espaço de cores.
Região de interesse da imagem de entrada.
Função utilitária integrada para calcular a similaridade de cosseno entre vetores de recursos.
Modelos de incorporação de imagens compatíveis
Os modelos a seguir têm garantia de compatibilidade com a API ImageEmbedder.
Modelos de vetor de atributos da coleção de módulos de imagens do Google no Kaggle Models.
Modelos personalizados que atendem aos requisitos de compatibilidade de modelo.
Executar inferência em C++
// Initialization
ImageEmbedderOptions options:
options.mutable_model_file_with_metadata()->set_file_name(model_path);
options.set_l2_normalize(true);
std::unique_ptr<ImageEmbedder> image_embedder = ImageEmbedder::CreateFromOptions(options).value();
// Create input frame_buffer_1 and frame_buffer_2 from your inputs `image_data1`, `image_data2`, `image_dimension1` and `image_dimension2`.
// See more information here: tensorflow_lite_support/cc/task/vision/utils/frame_buffer_common_utils.h
std::unique_ptr<FrameBuffer> frame_buffer_1 = CreateFromRgbRawBuffer(
image_data1, image_dimension1);
std::unique_ptr<FrameBuffer> frame_buffer_2 = CreateFromRgbRawBuffer(
image_data2, image_dimension2);
// Run inference on two images.
const EmbeddingResult result_1 = image_embedder->Embed(*frame_buffer_1);
const EmbeddingResult result_2 = image_embedder->Embed(*frame_buffer_2);
// Compute cosine similarity.
double similarity = ImageEmbedder::CosineSimilarity(
result_1.embeddings[0].feature_vector(),
result_2.embeddings[0].feature_vector());
Consulte o código-fonte para mais opções de configuração do ImageEmbedder.
Executar inferência em Python
Etapa 1: instale o pacote Pypi de suporte do TensorFlow Lite.
Instale o pacote Pypi de suporte do TensorFlow Lite usando o seguinte comando:
pip install tflite-support
Etapa 2: usar o modelo
from tflite_support.task import vision
# Initialization.
image_embedder = vision.ImageEmbedder.create_from_file(model_path)
# Run inference on two images.
image_1 = vision.TensorImage.create_from_file('/path/to/image1.jpg')
result_1 = image_embedder.embed(image_1)
image_2 = vision.TensorImage.create_from_file('/path/to/image2.jpg')
result_2 = image_embedder.embed(image_2)
# Compute cosine similarity.
feature_vector_1 = result_1.embeddings[0].feature_vector
feature_vector_2 = result_2.embeddings[0].feature_vector
similarity = image_embedder.cosine_similarity(
result_1.embeddings[0].feature_vector, result_2.embeddings[0].feature_vector)
Consulte o código-fonte para mais opções de configuração do ImageEmbedder.
Resultados de exemplo
A semelhança de cossenos entre vetores de recursos normalizados retorna uma pontuação entre -1 e 1. Quanto maior, melhor. Uma semelhança de cossenos de 1 significa que os dois vetores são idênticos.
Cosine similarity: 0.954312
Teste a ferramenta simples de demonstração da CLI para ImageEmbedder com seu próprio modelo e dados de teste.
Requisitos de compatibilidade de modelo
A API ImageEmbedder espera um modelo do TFLite com metadados do modelo do TFLite opcionais, mas altamente recomendados.
Os modelos de incorporação de imagens compatíveis precisam atender aos seguintes requisitos:
Um tensor de imagem de entrada (kTfLiteUInt8/kTfLiteFloat32)
- entrada de imagem de tamanho
[batch x height x width x channels]. - A inferência em lote não é compatível (
batchprecisa ser 1). - Somente entradas RGB são aceitas (
channelsprecisa ser 3). - Se o tipo for kTfLiteFloat32, NormalizationOptions precisará ser anexado aos metadados para normalização de entrada.
- entrada de imagem de tamanho
Pelo menos um tensor de saída (kTfLiteUInt8/kTfLiteFloat32)
- com componentes
Ncorrespondentes às dimensõesNdo vetor de recursos retornado para essa camada de saída. - Duas ou quatro dimensões, ou seja,
[1 x N]ou[1 x 1 x 1 x N].
- com componentes