Guide interactif de segmentation d'images pour Python

La tâche MediaPipe Interactive Image Segmenter prend un emplacement dans une image, estime les limites d'un objet à cet emplacement et renvoie la segmentation de l'objet sous forme de données d'image. Ces instructions vous expliquent comment utiliser le segmentateur d'images interactif avec le langage Python. Pour en savoir plus sur les fonctionnalités, les modèles et les options de configuration de cette tâche, consultez la présentation.

Exemple de code

L'exemple de code d'Interactive Image Segmenter fournit une implémentation complète de cette tâche en Python à titre de référence. Ce code vous aide à tester cette tâche et à créer votre propre application de segmentation d'image interactive. Vous pouvez afficher, exécuter et modifier l'exemple de code de Interactive Image Segmenter à l'aide de votre navigateur Web.

Préparation

Cette section décrit les étapes clés de la configuration de votre environnement de développement et de vos projets de code spécifiquement pour l'utilisation du segment d'images interactif. Pour obtenir des informations générales sur la configuration de votre environnement de développement pour l'utilisation des tâches MediaPipe, y compris sur les exigences de version de la plate-forme, consultez le guide de configuration pour Python. Vous pouvez examiner le code source de cet exemple sur GitHub.

Colis

La tâche MediaPipe Interactive Image Segmenter nécessite le package mediapipe. Vous pouvez installer les dépendances requises à l'aide de la commande suivante:

$ python -m pip install mediapipe

Importations

Importez les classes suivantes pour accéder aux fonctions des tâches du composant Interactive Image Segmenter:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Modèle

La tâche MediaPipe Interactive Image Segmenter nécessite un modèle entraîné compatible avec cette tâche. Pour en savoir plus sur les modèles entraînés disponibles pour Interactive Image Segmenter, consultez la section Modèles de la présentation des tâches.

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

model_path = '/absolute/path/to/model.tflite'

Spécifiez le chemin d'accès du modèle dans le paramètre model_asset_path, comme indiqué ci-dessous:

base_options = BaseOptions(model_asset_path=model_path)

Créer la tâche

La tâche MediaPipe Interactive Image Segmenter utilise la fonction create_from_options pour configurer la tâche. La fonction create_from_options accepte des valeurs pour les options de configuration à gérer. Pour en savoir plus sur les options de configuration, consultez la section Options de configuration. Le code suivant montre comment créer et configurer cette tâche.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

Options de configuration

Cette tâche dispose des options de configuration suivantes pour les applications Python:

Nom de l'option Description Plage de valeurs Valeur par défaut
output_category_mask Si la valeur est True, la sortie inclut un masque de segmentation sous la forme d'une image uint8, où chaque valeur de pixel indique si le pixel fait partie de l'objet situé dans la zone d'intérêt. {True, False} False
output_confidence_masks Si la valeur est True, la sortie inclut un masque de segmentation sous la forme d'une image à valeur flottante, où chaque valeur flottante représente la confiance selon laquelle le pixel fait partie de l'objet situé dans la zone d'intérêt. {True, False} True
display_names_locale Définit la langue des libellés à utiliser pour les noms à afficher fournis dans les métadonnées du modèle de la tâche, le cas échéant. La valeur par défaut est en pour l'anglais. Vous pouvez ajouter des thèmes 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éparation des données

Préparez votre entrée en tant que fichier image ou tableau Numpy, puis convertissez-la en objet mediapipe.Image.

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

Pour obtenir un exemple de code illustrant la préparation des données pour Interactive Image Segmenter, reportez-vous à l'exemple de code.

Exécuter la tâche

Le segmentateur d'images interactif utilise la fonction segment pour déclencher des inférences. Pour la segmentation d'image, cela inclut le prétraitement des données d'entrée, l'exécution du modèle de segmentation et le post-traitement des sorties du modèle bruts dans les masques segmentés.

L'exemple de code suivant montre comment exécuter le traitement avec le modèle de tâche.

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

Pour obtenir un exemple plus complet d'exécution d'inférences du composant Interactive Image Segmenter, reportez-vous à l'exemple de code.

Gérer et afficher les résultats

Les résultats d'Interactive Image Segmenter sous forme de liste de données Image peuvent inclure un masque de catégorie, des masques de confiance ou les deux, en fonction de ce que vous avez défini lors de la configuration de la tâche. Si vous définissez output_category_mask sur True, la sortie est une liste contenant un seul masque segmenté en tant qu'image uint8. La valeur de pixel indique si elle fait partie de l'objet dans la zone d'intérêt. indice de catégorie reconnu de l'image d'entrée. Si vous définissez output_confidence_masks sur True, le résultat est une liste de canaux contenant des valeurs de pixels comprises dans la plage [0,1], qui représente le score de confiance du pixel appartenant à l'objet dans la zone d'intérêt.

Les sections suivantes expliquent plus en détail les données de sortie de cette tâche:

Masque de catégorie

Les images suivantes montrent une visualisation de la sortie de tâche pour un masque de valeur de catégorie avec une zone de point d'intérêt indiquée. Chaque pixel est une valeur uint8 indiquant si le pixel fait partie de l'objet situé dans la zone d'intérêt. Le cercle noir et blanc de la deuxième image indique la zone d'intérêt sélectionnée.

Sortie de l'image d'origine et du masque de catégorie. Image source de l'ensemble de données Pascal VOC 2012.

Masque de confiance

La sortie d'un masque de confiance contient des valeurs flottantes comprises entre [0, 1] pour chaque canal d'entrée d'image. Des valeurs plus élevées indiquent un degré de confiance élevé pour que le pixel de l'image fasse partie de l'objet situé dans la zone d'intérêt.