Die MediaPipe-Aufgabe „Interaktiver Bildsegmenter“ nimmt einen Ort in einem Bild, schätzt die Grenzen eines Objekts an diesem Ort und gibt die Segmentierung des Objekts als Bilddaten zurück. In dieser Anleitung wird beschrieben, wie Sie den interaktiven Bildsegmenter 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 den interaktiven Bildsegmenter enthält eine vollständige Implementierung dieser Aufgabe in Python. Mit diesem Code können Sie diese Aufgabe testen und mit dem Erstellen Ihrer eigenen interaktiven Bildsegmentierungsanwendung beginnen. Sie können den Beispielcode für den interaktiven Bildsegmenter direkt in Ihrem Webbrowser ansehen, ausführen und bearbeiten.
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und Codeprojekte beschrieben, die speziell für die Verwendung des interaktiven Bildsegmentierungstools entwickelt wurden. Allgemeine Informationen zum Einrichten Ihrer Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Anforderungen an die Plattformversion, finden Sie im Einrichtungshandbuch für Python. Den Quellcode für dieses Beispiel finden Sie auf GitHub.
Pakete
Für die Aufgabe „MediaPipe Interactive Image Segmenter“ 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 Bildsegmentators zuzugreifen:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modell
Für die Aufgabe „MediaPipe Interactive Image Segmenter“ ist ein trainiertes Modell erforderlich, das mit dieser Aufgabe kompatibel ist. Weitere Informationen zu verfügbaren trainierten Modellen für den interaktiven Bildsegmenter finden Sie in der Aufgabenübersicht im Abschnitt Modelle.
Wählen Sie das Modell aus, laden Sie es herunter und speichern Sie es in Ihrem Projektverzeichnis:
model_path = '/absolute/path/to/model.tflite'
Geben Sie den Pfad des Modells im Parameter model_asset_path
an, wie unten gezeigt:
base_options = BaseOptions(model_asset_path=model_path)
Aufgabe erstellen
Bei der Aufgabe „MediaPipe Interactive Image Segmenter“ wird die Funktion create_from_options
verwendet, um die Aufgabe einzurichten. Die Funktion create_from_options
akzeptiert Werte für Konfigurationsoptionen. Weitere Informationen zu Konfigurationsoptionen finden Sie unter Konfigurationsoptionen.
Im folgenden Code 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
Für diese Aufgabe gibt es die folgenden Konfigurationsoptionen für Python-Anwendungen:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
output_category_mask |
Wenn dieser Wert auf True gesetzt ist, enthält die Ausgabe eine Segmentierungsmaske als uint8-Bild, bei der jeder Pixelwert angibt, ob das Pixel zum Objekt im Bereich von Interesse gehört. |
{True, False } |
False |
output_confidence_masks |
Wenn dieser Wert auf True gesetzt ist, enthält die Ausgabe eine Segmentierungsmaske als Bild mit Gleitkommawerten. Jeder Gleitkommawert gibt die Wahrscheinlichkeit an, dass das Pixel Teil des Objekts im interessierenden Bereich ist. |
{True, False } |
True |
display_names_locale |
Legt die Sprache der Labels fest, die für die Anzeigenamen verwendet werden, die in den Metadaten des Modells der Aufgabe angegeben sind, sofern verfügbar. Der Standardwert ist en für Englisch. Mit der TensorFlow Lite Metadata Writer API können Sie den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen.
| Gebietscode | de |
Daten vorbereiten
Bereiten Sie Ihre Eingabe als Bilddatei oder als Numpy-Array vor und wandeln Sie sie dann in ein mediapipe.Image
-Objekt um.
# 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 interaktiven Bildsegmenter finden Sie im Codebeispiel.
Aufgabe ausführen
Der interaktive Bildsegmenter verwendet die Funktion segment
, um Inferenzen auszulösen. Bei der Bildsegmentierung umfasst dies die Vorverarbeitung der Eingabedaten, das Ausführen des Segmentierungsmodells und die Nachverarbeitung der Rohmodellausgaben in den segmentierten Masken.
Im folgenden Codebeispiel wird gezeigt, 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 vollständigeres Beispiel für die Ausführung von Inferenzen mit dem interaktiven Bildsegmenter finden Sie im Codebeispiel.
Ergebnisse verarbeiten und anzeigen
Die Ausgabeergebnisse für den interaktiven Bildsegmenter sind eine Liste von Image
-Daten. Sie können eine Kategoriemaske, Konfidenzmasken oder beides enthalten, je nachdem, was Sie bei der Konfiguration der Aufgabe festgelegt haben. Wenn Sie output_category_mask
auf True
setzen, enthält die Ausgabe eine Liste mit einer einzelnen segmentierten Maske als uint8-Bild. Der Pixelwert gibt an, ob es Teil des Objekts im Bereich von Interesse ist. Wenn Sie output_confidence_masks
auf True
festlegen, ist die Ausgabe eine Liste von Kanälen mit Pixelwerten im Bereich [0,1]
, die den Konfidenzwert des Pixels darstellen, das zum Objekt im Bereich von Interesse gehört.
In den folgenden Abschnitten werden die Ausgabedaten dieser Aufgabe näher erläutert:
Kategoriemaske
Die folgenden Bilder zeigen eine Visualisierung der Aufgabenausgabe für eine Kategoriewertmaske mit einem Punktbereich von Interesse. Jeder Pixel hat einen uint8
-Wert, der angibt, ob er zum Objekt im gewünschten Bereich gehört. Der schwarz-weiße Kreis auf dem zweiten Bild zeigt den ausgewählten Bereich an.
Originalbild und Kategoriemaskenausgabe. Quellbild aus dem Pascal VOC 2012-Dataset.
Konfidenzmaske
Die Ausgabe einer Konfidenzmaske enthält für jeden Bildeingabekanal Gleitkommawerte zwischen [0, 1]
. Je höher der Wert, desto höher ist die Wahrscheinlichkeit, dass das Bildpixel Teil des Objekts ist, das sich im Bereich von Interesse befindet.