Interaktiver Leitfaden zur Bildsegmentierung für Python

Die MediaPipe Interactive Image Segmenter-Aufgabe nimmt eine Position in einem Bild, schätzt die Grenzen eines Objekts an diesem Ort und gibt die Segmentierung für das Objekt als Bilddaten zurück. In dieser Anleitung erfahren Sie, wie Sie den Interactive Image Segmenter mit der Programmiersprache Python verwenden. Weitere Informationen zu den Funktionen, Modellen und Konfigurationsoptionen dieser Aufgabe finden Sie in der Übersicht.

Codebeispiel

Der Beispielcode für Interactive Image Segmenter bietet eine vollständige Implementierung dieser Aufgabe in Python. Mit diesem Code können Sie diese Aufgabe testen und mit dem Erstellen Ihrer eigenen interaktiven Anwendung zur Bildsegmentierung beginnen. Sie können den Beispielcode für den Interactive Image Segmenter einfach mithilfe Ihres Webbrowsers aufrufen, ausführen und bearbeiten.

Einrichtung

In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und Codeprojekte speziell für die Verwendung des Interactive Image Segmenter beschrieben. Allgemeine Informationen zum Einrichten der Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich der Anforderungen an die Plattformversion, finden Sie im Einrichtungsleitfaden für Python. Sie können den Quellcode für dieses Beispiel auf GitHub überprüfen.

Pakete

Für die MediaPipe Interactive Image Segmenter-Aufgabe ist das Paket mediapipe erforderlich. Sie können die erforderlichen Abhängigkeiten mit dem folgenden Befehl installieren:

$ python -m pip install mediapipe

Importe

Importieren Sie die folgenden Klassen, um auf die Aufgabenfunktionen des interaktiven Bildsegmentierungs-Tools zuzugreifen:

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

Modell

Für die MediaPipe Interactive Image Segmenter-Aufgabe ist ein trainiertes Modell erforderlich, das mit dieser Aufgabe kompatibel ist. Weitere Informationen zu verfügbaren trainierten Modellen für den Interactive Image Segmenter finden Sie in der Aufgabenübersicht im Abschnitt Modelle.

Wählen Sie das Modell aus, laden Sie es herunter und speichern Sie es dann in Ihrem Projektverzeichnis:

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

Geben Sie den Pfad des Modells innerhalb des Parameters model_asset_path an:

base_options = BaseOptions(model_asset_path=model_path)

Aufgabe erstellen

Die MediaPipe Interactive Image Segmenter-Aufgabe verwendet die create_from_options-Funktion, um die Aufgabe einzurichten. Die Funktion create_from_options akzeptiert Werte, die von Konfigurationsoptionen verarbeitet werden sollen. Weitere Informationen zu Konfigurationsoptionen finden Sie unter Konfigurationsoptionen. Im folgenden Codebeispiel wird gezeigt, wie diese Aufgabe erstellt und konfiguriert wird.

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

Konfigurationsoptionen

Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Python-Anwendungen:

Option Beschreibung Wertebereich Standardwert
output_category_mask Wenn True festgelegt ist, enthält die Ausgabe eine Segmentierungsmaske als uint8-Bild, wobei jeder Pixelwert angibt, ob das Pixel Teil des Objekts ist, das sich im betreffenden Bereich befindet. {True, False} False
output_confidence_masks Wenn True festgelegt ist, enthält die Ausgabe eine Segmentierungsmaske als Gleitkommazahlbild, wobei jeder Gleitkommawert die Konfidenz darstellt, dass das Pixel Teil des Objekts ist, das sich im relevanten Bereich befindet. {True, False} True
display_names_locale Legt die Sprache von Labels fest, die für Anzeigenamen bereitgestellt werden, die in den Metadaten des Aufgabenmodells angegeben sind, sofern verfügbar. Der Standardwert für Englisch ist en. Mit der TensorFlow Lite Metadata Writer API können Sie den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen. Sprachcode en

Daten vorbereiten

Bereiten Sie Ihre Eingabe als Bilddatei oder NumPy-Array vor und konvertieren Sie sie in ein mediapipe.Image-Objekt.

# 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)

Ein Codebeispiel zur Vorbereitung von Daten für den Interactive Image Segmenter finden Sie im Codebeispiel.

Task ausführen

Der Interactive Image Segmenter verwendet die segment-Funktion, um Inferenzen auszulösen. Bei der Bildsegmentierung umfasst dies die Vorverarbeitung von Eingabedaten, die Ausführung des Segmentierungsmodells und die Nachbearbeitung der Rohmodellausgaben an die segmentierten Masken.

Das folgende Codebeispiel zeigt, wie die Verarbeitung mit dem Aufgabenmodell ausgeführt wird.

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)

Ein ausführlicheres Beispiel für das Ausführen von Inferenzen vom Typ „Interactive Image Segmenter“ finden Sie im Codebeispiel.

Ergebnisse verarbeiten und anzeigen

Die Ausgabeergebnisse für Interactive Image Segmenter sind eine Liste von Image-Daten und können eine Kategoriemaske, Konfidenzmasken oder beides enthalten, je nachdem, was Sie beim Konfigurieren der Aufgabe festgelegt haben. Wenn Sie output_category_mask auf True setzen, erhalten Sie eine Liste, die eine einzelne segmentierte Maske als uint8-Bild enthält. Der Pixelwert gibt an, ob er Teil des Objekts im relevanten Bereich ist. Index der erkannten Kategorie des Eingabebilds. Wenn Sie output_confidence_masks auf True setzen, erhalten Sie eine Liste von Kanälen mit Pixelwerten im Bereich [0,1], die den Konfidenzwert des Pixels darstellen, das zum Objekt im betreffenden Bereich gehört.

In den folgenden Abschnitten werden die Ausgabedaten dieser Aufgabe weiter erläutert:

Kategoriemaske

Die folgenden Bilder zeigen eine Visualisierung der Aufgabenausgabe für eine Kategoriewertmaske, wobei ein POI-Bereich angegeben ist. Jedes Pixel ist ein uint8-Wert, der angibt, ob das Pixel Teil des Objekts ist, das sich am relevanten Bereich befindet. Der schwarz-weiße Kreis auf dem zweiten Bild zeigt den ausgewählten Bereich an, der von Interesse ist.

Ausgabe des Originalbilds und der Kategoriemaske. Quellbild aus dem Dataset Pascal VOC 2012.

Konfidenzmaske

Die Ausgabe für eine Konfidenzmaske enthält Gleitkommawerte zwischen [0, 1] für jeden Bildeingabekanal. Höhere Werte weisen auf eine höhere Wahrscheinlichkeit hin, dass das Bildpixel Teil des Objekts ist, das sich im betreffenden Bereich befindet.