Interaktiver Leitfaden zur Bildsegmentierung für Python

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.

Ein Hund, der inmitten eines Laubhaufens steht Die Umrisse des Hundes aus dem vorherigen Bild

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.