Guide interactif de segmentation d'images pour Python

La tâche de segmentation d'image interactive MediaPipe 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 segmenteur 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 section Présentation.

Exemple de code

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

Configuration

Cette section décrit les étapes clés à suivre pour configurer votre environnement de développement et vos projets de code spécifiquement pour utiliser le segmenteur d'images interactif. Pour en savoir plus sur la configuration de votre environnement de développement afin d'utiliser les tâches MediaPipe, y compris les exigences concernant les versions de la plate-forme, consultez le guide de configuration pour Python. Vous pouvez consulter le code source de cet exemple sur GitHub.

Colis

La tâche de segmentation d'image interactive MediaPipe 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 de tâche du segmenteur d'images interactif:

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

Modèle

La tâche de segmentation d'images interactive MediaPipe 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 le segmenteur d'images interactif, consultez la section Modèles de la présentation de la tâche.

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 au 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 de segmentation d'image interactive MediaPipe utilise la fonction create_from_options pour configurer la tâche. La fonction create_from_options accepte les valeurs que les options de configuration doivent 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 propose les 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 de valeur flottante, où chaque valeur flottante représente la confiance que 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 libellés localisés aux métadonnées d'un modèle personnalisé à l'aide de l'API TensorFlow Lite Metadata Writer. Code de paramètres régionaux en

Préparer les 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 montrant la préparation des données pour le segmenteur d'images interactif, consultez l'exemple de code.

Exécuter la tâche

Le segmenteur d'images interactif utilise la fonction segment pour déclencher des inférences. Pour la segmentation d'images, cela inclut le prétraitement des données d'entrée, l'exécution du modèle de segmentation et le posttraitement des sorties brutes du modèle 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 segmenteur d'images interactif, consultez l'exemple de code.

Gérer et afficher les résultats

Les résultats de sortie du segmenteur d'images interactif sont une liste de données Image et 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 masque segmenté unique sous la forme d'une image uint8. La valeur du pixel indique s'il 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, la sortie est une liste de canaux contenant des valeurs de pixel dans la plage [0,1] représentant 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 la tâche pour un masque de valeur de catégorie avec une zone 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.

Chien debout au milieu d'une pile de feuilles Forme du chien de l'image précédente

Image d'origine et sortie 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 une plus grande confiance que le pixel de l'image fait partie de l'objet situé dans la zone d'intérêt.