Guía para incorporar imágenes en la Web

La tarea MediaPipe Image Embedder te permite convertir datos de imágenes en una representación numérica para realizar tareas de procesamiento de imágenes relacionadas con el AA, como comparar la similitud de dos imágenes. Estas instrucciones te muestran cómo usar la herramienta de incorporación de imágenes para aplicaciones web y de nodos.

Para obtener más información sobre las capacidades, los modelos y las opciones de configuración para completar esta tarea, consulta la Descripción general.

Ejemplo de código

El ejemplo de código para Image Embedder ofrece una implementación completa de este en JavaScript para tu referencia. Este código te ayuda a probar la tarea y comienza a compilar tu propia app de incorporación de imágenes. Puedes ver, ejecutar y edita el Código de ejemplo de Image Embedder usando solo el navegador web.

Configuración

En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y proyectos de código específicamente para usar Image Embedder. Para obtener información general configurar tu entorno de desarrollo para usar tareas de MediaPipe, como de la versión de la plataforma, consulta la Guía de configuración para la Web.

Paquetes de JavaScript

El código de Image Embedder está disponible a través de MediaPipe @mediapipe/tasks-vision. NPM. Puedes encuentra y descarga estas bibliotecas desde los vínculos proporcionados en la plataforma. Guía de configuración.

Puedes instalar los paquetes obligatorios con el siguiente código para la etapa de pruebas local con el siguiente comando:

npm install @mediapipe/tasks-vision

Si quieres importar el código de la tarea a través de una red de distribución de contenidos (CDN) agrega el siguiente código en la etiqueta de tu archivo HTML:

<!-- You can replace jsDelivr with your preferred CDN -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Modelo

La tarea MediaPipe Image Embedder requiere un modelo entrenado que sea compatible con esta tarea. Para obtener más información sobre los modelos entrenados disponibles para Image Embedder, consulta la sección Modelos de la descripción general de la tarea.

Selecciona y descarga un modelo y, luego, guárdalo en el directorio de tu proyecto:

<dev-project-root>/app/shared/models/

Crea la tarea

Especifica una ruta de acceso al modelo

Puedes crear una tarea con las opciones predeterminadas mediante createFromModelPath(). método:

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
  const imageEmbedder = await ImageEmbedder.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_embedder/mobilenet_v3_small/float32/1/mobilenet_v3_small.tflite`
    },
  });

Especifica el búfer del modelo

Si tu modelo ya está cargado en la memoria, puedes usar Método createFromModelBuffer():

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = ImageEmbedder.createFromModelBuffer(
    vision, 
    new Uint8Array(...)
);

Especifica opciones personalizadas

La tarea MediaPipe Image Embedder usa la función createFromOptions para establecer para completar la tarea. La función createFromOptions acepta valores para opciones de configuración. Para obtener más información de configuración, consulta Opciones de configuración.

En el siguiente código, se muestra cómo compilar y configurar la tarea con Opciones:

const vision = await FilesetResolver.forVisionTasks(
  // path/to/wasm/root
  "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = await ImageEmbedder.createFromOptions(
    vision,
    {
      baseOptions: {
        modelAssetPath: "model.tflite"
      },
      quantize: true
    });

Opciones de configuración

Esta tarea tiene las siguientes opciones de configuración para las aplicaciones web:

Nombre de la opción Descripción Rango de valores Valor predeterminado
running_mode Establece el modo de ejecución de la tarea. Existen dos modos:

IMAGE: Es el modo para entradas de una sola imagen.

VIDEO: el modo para fotogramas decodificados de una o en una transmisión en vivo de datos de entrada, como los de una cámara.
{IMAGE, VIDEO} IMAGE
l2Normalize Indica si se debe normalizar el vector de atributos mostrado con la norma L2. Usa esta opción solo si el modelo no contiene un código nativo L2_NORMALIZATION TFLite Op. En la mayoría de los casos, esto ya es así y Así, la normalización de L2 se logra mediante la inferencia de TFLite sin necesidad para esta opción. Boolean False
quantize Si la incorporación devuelta se debe cuantificar a bytes mediante la cuantización escalar. Se supone implícitamente que las incorporaciones son norma de unidad y por lo que se garantiza que cualquier dimensión tendrá un valor en [-1.0, 1.0]. Usa la opción l2Normalizar si no es así. Boolean False

Preparar los datos

La incorporación de imágenes puede incorporar imágenes en cualquier formato que admita el navegador del host. La tarea también maneja el procesamiento previo de la entrada de datos, lo que incluye cambio de tamaño, rotación y normalización de valores.

Se ejecutan las llamadas a los métodos embed() y embedForVideo() de la incorporación de imágenes. de forma síncrona y bloquea el subproceso de la interfaz de usuario. Si quieres extraer vectores de atributos de fotogramas de video, cada incorporación bloqueará el subproceso principal. Para evitar esto, implementa trabajadores web para ejecutar embed() y Métodos embedForVideo() en otro subproceso.

Ejecuta la tarea

La incorporación de imágenes usa embed() (con modo de ejecución image) y Métodos embedForVideo() (con el modo de ejecución video) para activar para hacer inferencias. La API de Image Embedder devolverá los vectores de incorporación para el imagen de entrada.

En el siguiente código, se muestra cómo ejecutar el procesamiento con el modelo de tareas:

Imagen

const image = document.getElementById("image") as HTMLImageElement;
const imageEmbedderResult = imageEmbedder.embed(image);

Video

  const video = document.getElementById("webcam");

  const startTimeMs = performance.now();
  const embedderResult = await imageEmbedder.embedForVideo(video, startTimeMs);

Cómo controlar y mostrar resultados

Luego de ejecutar la inferencia, la tarea de incorporación de imágenes muestra un Un objeto ImageEmbedderResult que contiene los vectores de incorporación para la entrada imagen o marco.

A continuación, se muestra un ejemplo de los datos de salida de esta tarea:

ImageEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.0, 0.0, ..., 0.0, 1.0, 0.0, 0.0, 2.0}
    head_index: 0

Este resultado se obtuvo con la incorporación de la siguiente imagen:

Puedes comparar la similitud semántica de dos incorporaciones con el función ImageEmbedder.cosineSimilarity. Consulta el siguiente código para ver un ejemplo.

// Compute cosine similarity.
const similarity = ImageEmbedder.cosineSimilarity(
  imageEmbedderResult.embeddings[0],
  otherEmbedderResult.embeddings[0]);

El código de ejemplo de la herramienta de incorporación de imágenes demuestra cómo mostrar la incorporación. resultados que devolvió la tarea, consulta la ejemplo de código para conocer los detalles.