Guide interactif de segmentation d'images pour le Web

La tâche "Segmenter des images interactives MediaPipe" prend un emplacement dans une image, estime les limites de un objet à cet emplacement, puis renvoie la segmentation de l'objet sous forme d'image données. Ces instructions vous expliquent comment utiliser le Segmenter d'images interactif pour Node et le Web applications. Pour en savoir plus sur les fonctionnalités, les modèles et la configuration options de cette tâche, consultez la section Présentation.

Exemple de code

L'exemple de code pour le segmenteur d'images interactif 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 interactive de segmentation d'images. Vous pouvez Afficher, exécuter et modifier le segmenteur d'images interactif exemple de code en utilisant uniquement votre navigateur Web. Vous pouvez également consulter le code de cet exemple GitHub

Configuration

Cette section décrit les étapes clés à suivre pour configurer votre environnement de développement spécifiques pour utiliser le Segmenter d'images interactif. 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 du segment d'images interactif 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 --save @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:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Modèle

La tâche MediaPipe Interactive Image Segmenter nécessite un modèle entraîné compatible avec tâche. Pour en savoir plus sur les modèles entraînés disponibles pour le Segmenter d'images interactif, 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

Utilisez l'une des fonctions createFrom...() Interactive Image Segmenter pour préparer la tâche à exécuter des inférences. Utiliser le createFromModelPath() avec un chemin d'accès relatif ou absolu vers le fichier de modèle entraîné. Si votre modèle est déjà chargé en mémoire, vous pouvez utiliser la createFromModelBuffer().

L'exemple de code ci-dessous montre comment utiliser la fonction createFromOptions() pour configurer la tâche. La fonction createFromOptions vous permet de personnaliser Segmenteur d'images interactif avec options de configuration Pour en savoir plus sur la configuration consultez la section Options de configuration.

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

async function createSegmenter() {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
  );

  interactiveSegmenter = await InteractiveSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-tasks/interactive_segmenter/ptm_512_hdt_ptm_woid.tflite"
    },
  });
}
createSegmenter();

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
outputCategoryMask Si la valeur est True, le résultat inclut un masque de segmentation. en tant qu'image uint8, où chaque valeur de pixel indique si le pixel fait partie l'objet situé dans la zone d'intérêt. {True, False} False
outputConfidenceMasks Si la valeur est True, le résultat inclut un masque de segmentation. en tant qu'image d'une valeur flottante, où chaque valeur flottante représente le niveau de confiance que le pixel fait partie de l'objet situé dans la zone d'intérêt. {True, False} True
displayNamesLocale Définit la langue des libellés à utiliser pour les noms à afficher fournis dans les les métadonnées du modèle de la tâche, le cas échéant. La valeur par défaut est en pour anglais. Vous pouvez ajouter des libellés localisés aux métadonnées d'un modèle personnalisé à l'aide de l'API TensorFlow Lite Metadata Writer ; Code des paramètres régionaux en

Préparer les données

Le segmenteur d'images interactif peut segmenter les objets des images dans n'importe quel format compatible avec le 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.

Des appels aux méthodes segment() et segmentForVideo() de Segmenter d'images interactif s'exécutent de manière synchrone et bloquent le thread de l'interface utilisateur. Si vous segmentez des objets de la caméra d'un appareil, chaque tâche de segmentation bloque thread. Pour éviter cela, implémentez des nœuds de calcul Web segment() et segmentForVideo() sur un autre fil de discussion.

Exécuter la tâche

Le segmenteur d'images interactif utilise la méthode segment() pour déclencher des inférences. La Le segmenteur d'images interactif renvoie les segments détectés sous forme de données d'image à un rappel définie lors de l'exécution d'une inférence pour la tâche.

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

const image = document.getElementById("image") as HTMLImageElement;
interactiveSegmenter.segment(
  image,
  {
    keypoint: {
      x: event.offsetX / event.target.width,
      y: event.offsetY / event.target.height
    }
  },
  callback);