Cómo integrar usuarios que buscan imágenes

La búsqueda de imágenes permite buscar imágenes similares en una base de datos de imágenes. Funciona incorporando la búsqueda en un vector de alta dimensión que representa el significado semántico de la búsqueda, seguido de una búsqueda de similitud en un índice personalizado predefinido con ScaNN (vecinos más cercanos escalables).

A diferencia de la clasificación de imágenes, expandir la cantidad de elementos que se pueden reconocer no requiere volver a entrenar todo el modelo. Se pueden agregar elementos nuevos simplemente volviendo a compilar el índice. Esto también permite trabajar con bases de datos de imágenes más grandes (más de 100,000 elementos).

Usa la API de la biblioteca de tareas ImageSearcher para implementar tu buscador de imágenes personalizado en tus apps para dispositivos móviles.

Funciones clave de la API de ImageSearcher

  • Toma una sola imagen como entrada, realiza la extracción de la incorporación y la búsqueda del vecino más cercano en el índice.

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

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

Requisitos previos

Antes de usar la API de ImageSearcher, se debe compilar un índice basado en el corpus personalizado de imágenes en el que se realizará la búsqueda. Esto se puede lograr con la API de Model Maker Searcher si sigues y adaptas el instructivo.

Para ello, necesitarás lo siguiente:

Después de este paso, deberías tener un modelo de búsqueda de TFLite independiente (p.ej., mobilenet_v3_searcher.tflite), que es el modelo de incorporación de imágenes original con el índice adjunto en los metadatos del modelo de TFLite.

Ejecuta la inferencia en Java

Paso 1: Importa la dependencia de Gradle y otros parámetros de configuración

Copia el archivo del modelo de búsqueda .tflite en el directorio de recursos del módulo de Android en el que se ejecutará el modelo. Especifica que el archivo no se debe comprimir y agrega la biblioteca de TensorFlow Lite al archivo build.gradle del 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
    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'
}

Paso 2: Cómo usar el 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);

Consulta el código fuente y el Javadoc para obtener más opciones para configurar ImageSearcher.

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

Consulta el código fuente para obtener más opciones para configurar ImageSearcher.

Ejecuta la inferencia en Python

Paso 1: Instala el paquete Pypi de compatibilidad con TensorFlow Lite.

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

pip install tflite-support

Paso 2: Cómo usar el 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)

Consulta el código fuente para obtener más opciones para configurar ImageSearcher.

Resultados de ejemplo

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

Prueba la sencilla herramienta de demostración de la CLI para ImageSearcher con tu propio modelo y datos de prueba.