Guide sur l'intégration d'images pour le Web

La tâche de l'intégrateur d'images MediaPipe vous permet de convertir des données d'image en représentation numérique pour effectuer des tâches de traitement d'images liées au ML, telles que la comparaison de la similarité entre deux images. Ces instructions vous expliquent comment utiliser l'intégrateur d'images pour les applications Node et Web.

Pour en savoir plus sur les fonctionnalités, les modèles et les options de configuration de cette tâche, consultez la section Présentation.

Exemple de code

L'exemple de code pour l'outil d'intégration d'images fournit une implémentation complète de ce en JavaScript à titre de référence. Ce code vous aide à tester cette tâche et commencez à créer votre propre application d'intégration d'images. Vous pouvez afficher, exécuter et modifiez le Exemple de code de l'outil d'intégration d'images en utilisant uniquement votre navigateur Web.

Configuration

Cette section décrit les étapes clés à suivre pour configurer votre environnement de développement projets de code spécifiques pour utiliser l'outil d'intégration d'images. Pour obtenir des informations générales sur configurer votre environnement de développement pour utiliser les tâches MediaPipe, y compris versions de la plate-forme requises, consultez la Guide de configuration pour le Web

Packages JavaScript

Le code de l'intégrateur d'images est disponible via MediaPipe @mediapipe/tasks-vision NPM. Vous pouvez rechercher et télécharger ces bibliothèques à partir des liens fournis sur la plate-forme ; Guide de configuration

<ph type="x-smartling-placeholder">

Vous pouvez installer les packages requis avec le code suivant pour la préproduction locale en exécutant la commande suivante:

npm install @mediapipe/tasks-vision

Si vous souhaitez importer le code de la tâche via un réseau de diffusion de contenu (CDN) ajoutez le code suivant dans la balise de votre fichier 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>

Modèle

La tâche de l'intégrateur d'images MediaPipe nécessite un modèle entraîné compatible avec tâche. Pour en savoir plus sur les modèles entraînés disponibles pour l'intégrateur d'images, consultez la section Modèles de la présentation des tâches.

Sélectionnez et téléchargez un modèle, puis stockez-le dans le répertoire de votre projet:

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

Créer la tâche

Spécifier un chemin d'accès au modèle

Vous pouvez créer une tâche avec les options par défaut à l'aide de l'createFromModelPath() méthode:

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`
    },
  });

Spécifier le tampon du modèle

Si votre modèle est déjà chargé en mémoire, vous pouvez utiliser la Méthode 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(...)
);

Spécifier des options personnalisées

La tâche de l'intégrateur d'images MediaPipe utilise la fonction createFromOptions pour définir la tâche. La fonction createFromOptions accepte les valeurs options de configuration. Pour en savoir plus sur de configuration, consultez la section Options de configuration.

Le code suivant montre comment compiler et configurer la tâche avec des options:

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
    });

Options de configuration

Cette tâche comporte les options de configuration suivantes pour les applications Web:

Nom de l'option Description Plage de valeurs Valeur par défaut
running_mode Définit le mode d'exécution de la tâche. Il y a deux modes:

IMAGE: mode utilisé pour la saisie d'une seule image.

VIDÉO: mode utilisé pour les images décodées d'une image vidéo ou sur un flux en direct de données d'entrée, comme celles d'une caméra.
{IMAGE, VIDEO} IMAGE
l2Normalize Indique s'il faut normaliser le vecteur de caractéristiques renvoyé avec la norme L2. N'utilisez cette option que si le modèle ne contient pas encore d'élément natif L2_NORMALIZATION TFLite Op. Dans la plupart des cas, c'est déjà le cas et La normalisation L2 est ainsi obtenue via l'inférence TFLite sans avoir besoin pour cette option. Boolean False
quantize Indique si la représentation vectorielle continue renvoyée doit être quantifiée en octets via la quantification scalaire. Les représentations vectorielles continues sont implicitement considérées comme étant une norme unitaire Par conséquent, toute dimension aura une valeur comprise dans [-1.0, 1.0]. Utilisez utilisez l'option l2Normalize si ce n'est pas le cas. Boolean False

Préparer les données

L'outil d'intégration d'images peut intégrer des images dans n'importe quel format compatible avec navigateur hôte. Elle gère également le prétraitement des entrées de données, le redimensionnement, la rotation et la normalisation des valeurs.

Les appels des méthodes embed() et embedForVideo() de l'intégrateur d'images s'exécutent de manière synchrone et bloquent le thread de l'interface utilisateur. Si vous souhaitez extraire vecteurs de caractéristiques provenant d'images vidéo, chaque représentation vectorielle continue bloquera le thread principal. Pour éviter cela, implémentez des nœuds de calcul Web pour exécuter embed() et embedForVideo() sur un autre thread.

Exécuter la tâche

L'outil d'intégration d'images utilise embed() (avec le mode d'exécution image) et embedForVideo() (avec le mode d'exécution video) pour déclencher les inférences. L'API Image Embedder renvoie les vecteurs de représentation vectorielle continue pour le image d'entrée.

Le code suivant montre comment exécuter le traitement avec le modèle de tâche:

Image

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

Vidéo

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

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

Gérer et afficher les résultats

Lors de l'exécution de l'inférence, la tâche d'intégration d'images renvoie une Un objet ImageEmbedderResult contenant les vecteurs de représentation vectorielle continue de l'entrée comme une image ou un cadre.

Voici un exemple de données de sortie de cette tâche:

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

Ce résultat a été obtenu en intégrant l'image suivante:

Vous pouvez comparer la similarité sémantique de deux représentations vectorielles continues à l'aide de la fonction fonction ImageEmbedder.cosineSimilarity. Consultez le code suivant pour obtenir à titre d'exemple.

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

L'exemple de code de l'outil d'intégration d'images montre comment afficher ce dernier. renvoyés par la tâche, consultez la exemple de code pour en savoir plus.