Mit der Aufgabe „MediaPipe Interactive Image Segmenter“ wird ein Ort in einem Bild ermittelt, die Grenzen an diesem Ort und gibt die Segmentierung für das Objekt als Bilddaten. In dieser Anleitung erfahren Sie, wie Sie den interaktiven Bildsegmentierer mit Android-Apps. Das in dieser Anleitung beschriebene Codebeispiel ist GitHub Weitere Informationen zu Funktionen, Modellen und Konfigurationsoptionen Sehen Sie sich die Übersicht an.
Codebeispiel
Das Codebeispiel für MediaPipe Tasks ist eine einfache Implementierung eines interaktiven Bildsegmenters für Android. Das Beispiel funktioniert mit Bildern, die aus der Gerätegalerie ausgewählt wurden.
Du kannst die App als Ausgangspunkt für deine eigene Android-App verwenden oder darauf verweisen wenn Sie eine vorhandene App ändern. Der Beispielcode für die interaktive Bildsegmentierung wird auf GitHub
Code herunterladen
In der folgenden Anleitung erfahren Sie, wie Sie eine lokale Kopie des Beispiels erstellen. mit dem Befehlszeilentool git erstellen.
<ph type="x-smartling-placeholder">So laden Sie den Beispielcode herunter:
- Klonen Sie das Git-Repository mit dem folgenden Befehl:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Konfigurieren Sie optional Ihre Git-Instanz für den Sparse-Checkout.
Sie haben daher nur die Dateien für die Beispiel-App "Interactive Image Segmenter":
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Nachdem Sie eine lokale Version des Beispielcodes erstellt haben, können Sie das Projekt importieren in Android Studio ein und führen die App aus. Anweisungen finden Sie in der Einrichtungsleitfaden für Android
Schlüsselkomponenten
Die folgenden Dateien enthalten den wichtigen Code für dieses Bild. Beispielanwendung für Segmentierung:
- InteractiveSegmentationHelper.kt Initialisiert die Aufgabe „Interactive Image Segmenter“ und verwaltet das Modell und delegieren Auswahl.
- OverlayView.kt Verarbeitet und formatiert die Segmentierungsergebnisse.
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und für die Verwendung des interaktiven Bildsegmentierers. Allgemeine Informationen zu Einrichten Ihrer Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Plattformversionsanforderungen finden Sie in der Einrichtungsleitfaden für Android
<ph type="x-smartling-placeholder">Abhängigkeiten
Interaktive Bildsegmentierung verwendet die Bibliothek com.google.mediapipe:tasks-vision
. Dieses Element hinzufügen
Abhängigkeit zur build.gradle
-Datei Ihres
Android-App-Entwicklungsprojekt Importieren Sie die erforderlichen Abhängigkeiten mit
den folgenden Code:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Modell
Für die Aufgabe „Interactive Image Segmenter“ von MediaPipe ist ein trainiertes Modell erforderlich, für die Aufgabe. Weitere Informationen zu verfügbaren trainierten Modellen für den Interactive Image Segmenter finden Sie unter 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:
<dev-project-root>/src/main/assets
Verwenden Sie die Methode BaseOptions.Builder.setModelAssetPath()
, um den Pfad anzugeben.
die vom Modell verwendet werden. Diese Methode wird im Codebeispiel in den
.
In der interaktiven Bildsegmentierung
Beispielcode
Das Modell ist in InteractiveSegmenterHelper.kt
definiert.
in der Funktion setupInteractiveSegmenter()
.
Aufgabe erstellen
Zum Erstellen der Aufgabe können Sie die Funktion createFromOptions
verwenden. Die
Die Funktion createFromOptions
akzeptiert Konfigurationsoptionen, darunter:
Ausgabetypen der Maske. Weitere Informationen zur Konfiguration
finden Sie unter Konfigurationsübersicht.
InteractiveSegmenterOptions options = InteractiveSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener(exception -> { // Process the segmentation errors here. }) .build(); interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
Ein ausführlicheres Beispiel für die Einrichtung dieser Aufgabe finden Sie in der
InteractiveSegmenterHelper
Klasse setupInteractiveSegmenter()
.
Konfigurationsoptionen
Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Android-Apps:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
outputCategoryMask |
Wenn True festgelegt ist, enthält die Ausgabe eine Segmentierungsmaske
Als Uint8-Bild, wobei jeder Pixelwert angibt, ob das Pixel Teil eines
das Objekt, das sich im gewünschten Bereich befindet. |
{True, False } |
False |
outputConfidenceMasks |
Wenn True festgelegt ist, enthält die Ausgabe eine Segmentierungsmaske
als Gleitkommawert, wobei jeder Gleitkommawert den Konfidenzwert darstellt
Das Pixel ist Teil des Objekts, das sich im gewünschten Bereich befindet. |
{True, False } |
True |
displayNamesLocale |
Legt die Sprache der Labels fest, die für Anzeigenamen in der
Metadaten des Aufgabenmodells, falls verfügbar. Standardwert ist en für
Englisch. Sie können den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen
mit der TensorFlow Lite Metadata Writer API
| Gebietsschemacode | de |
errorListener |
Legt einen optionalen Fehler-Listener fest. | – | Nicht festgelegt |
Daten vorbereiten
Die interaktive Bildsegmentierung arbeitet mit Bildern und die Aufgabe verarbeitet die Dateneingabe.
Vorverarbeitung, einschließlich Größenanpassung, Rotation und Wertnormalisierung.
Sie müssen das Eingabebild in ein
com.google.mediapipe.framework.image.MPImage
-Objekt vor der Übergabe an den
für die Aufgabe.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
Im Beispielcode der interaktiven Bildsegmentierung sind die segment
-Funktionen in der
InteractiveSegmenterHelper.kt
-Datei.
Ergebnisse verarbeiten und anzeigen
Beim Ausführen der Inferenz gibt die Aufgabe „Interactive Image Segmenter“ eine
ImageSegmenterResult
-Objekt, das die Ergebnisse der
Segmentierungsaufgabe. Der Inhalt der Ausgabe kann eine Kategoriemaske,
Konfidenzmaske oder beides, je nachdem, was Sie
konfiguriert.
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 Kategorie
Wertmaske mit einem angegebenen POI. Jedes Pixel ist ein uint8
-Wert, der angibt, ob das Pixel Teil des Objekts ist, das sich im Bereich von
Interesse. Der schwarz-weiße Kreis im zweiten Bild steht für die ausgewählte
Interessengebiet.
Ausgabe des Originalbilds und der Kategoriemaske. Quell-Image von Pascal VOC 2012 Dataset.
Konfidenzmaske
Die Ausgabe für eine Konfidenzmaske enthält Gleitkommawerte zwischen [0, 1]
für
für jeden Bildeingabekanal. Höhere Werte deuten auf eine höhere Wahrscheinlichkeit hin,
Das Bildpixel ist Teil des Objekts, das sich im gewünschten Bereich befindet.