Integra incorporaciones de imágenes

Las incorporaciones de imágenes permiten incorporar imágenes en un vector de atributos de alta dimensión que representan el significado semántico de una imagen, que luego se puede comparar con el vector de atributos de otras imágenes para evaluar su similitud semántica.

A diferencia de búsqueda con imágenes, la incorporación de imágenes permite calcular la similitud entre imágenes sobre la marcha en lugar de buscar en un índice predefinido creado a partir de un corpus de imágenes.

Usa la API de ImageEmbedder de la Biblioteca de tareas para implementar tu incorporación de imágenes personalizada en tus aplicaciones móviles.

Funciones clave de la API de ImageEmbedder

  • Procesamiento de imágenes de entrada, incluidos la rotación, el cambio de tamaño y el espacio de color conversión.

  • Región de interés de la imagen de entrada.

  • Es una función de utilidad incorporada para calcular similitud coseno entre vectores de atributos.

Modelos de incorporaciones de imágenes compatibles

Se garantiza la compatibilidad de los siguientes modelos con ImageEmbedder en la API de Cloud.

Ejecuta inferencias en 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());

Consulta la código fuente si quieres obtener más opciones para configurar ImageEmbedder.

Ejecuta la inferencia en Python

Paso 1: Instala el paquete Pypi de asistencia de TensorFlow Lite

Puedes instalar el paquete de compatibilidad con Pypi de TensorFlow Lite con el siguiente comando: :

pip install tflite-support

Paso 2: Usa el 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)

Consulta la código fuente si quieres obtener más opciones para configurar ImageEmbedder.

Resultados de ejemplo

La similitud coseno entre los vectores de atributos normalizados devuelve una puntuación entre -1 y 1. Cuanto mayor sea mejor, es decir, una similitud coseno de 1 significa que los dos vectores son idénticos.

Cosine similarity: 0.954312

Prueba lo sencillo Herramienta de demostración de la CLI para ImageEmbedder con tu propio modelo y datos de prueba.

Requisitos de compatibilidad del modelo

La API de ImageEmbedder espera un modelo de TFLite con un modelo opcional, pero recomendado Metadatos del modelo de TFLite.

Los modelos de incorporaciones de imágenes compatibles deben cumplir con los siguientes requisitos:

  • Un tensor de imagen de entrada (kTfLiteUInt8/kTfLiteFloat32)

    • entrada de imagen de tamaño [batch x height x width x channels].
    • no se admite la inferencia por lotes (se requiere que batch sea 1).
    • Solo se admiten entradas RGB (se requiere que channels sea 3).
    • si el tipo es kTfLiteFloat32, NormalizationOptions debe se adjuntan a los metadatos para la normalización de entrada.
  • Al menos un tensor de salida (kTfLiteUInt8/kTfLiteFloat32)

    • con componentes N correspondientes a las dimensiones N del elemento que se muestra vector de atributos para esta capa de salida.
    • 2 o 4 dimensiones, p. ej., [1 x N] o [1 x 1 x 1 x N]