Zadanie MediaPipe Interactive Image segmenter pobiera lokalizację na obrazie i określa granice obiektu w tej lokalizacji i zwraca jego segmentację jako zdjęcia. Te instrukcje pokazują, jak korzystać z interaktywnego segmentowania obrazów Aplikacje na Androida. Przykładowy kod opisany w tych instrukcjach jest dostępny na GitHub Więcej informacji o funkcjach, modelach i opcjach konfiguracji zapoznaj się z Przeglądem.
Przykładowy kod
Przykład kodu MediaPipe Tasks to prosta implementacja interaktywnego segmentowania obrazów na Androida. Przykład obejmuje obrazy wybrane z galerii urządzenia.
Możesz użyć tej aplikacji jako punktu wyjścia dla własnej aplikacji na Androida lub odnieść się do niej podczas modyfikowania istniejącej aplikacji. Przykładowy kod Interactive Image Segmenter jest hostowany GitHub
Pobieranie kodu
Poniżej znajdziesz instrukcje tworzenia lokalnej kopii przykładu. za pomocą narzędzia wiersza poleceń git.
Aby pobrać przykładowy kod:
- Sklonuj repozytorium git za pomocą tego polecenia:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Opcjonalnie możesz skonfigurować instancję git tak, aby wykorzystywała rozproszony proces płatności,
masz więc tylko pliki z przykładowej aplikacji Interactive Image Segmenter:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Po utworzeniu lokalnej wersji przykładowego kodu możesz zaimportować projekt w Android Studio i uruchom aplikację. Instrukcje znajdziesz w Przewodnik po konfiguracji na Androida
Kluczowe elementy
Te pliki zawierają kluczowy kod dla tego obrazu przykładowa aplikacja do podziału na segmenty:
- InteractiveSegmentationHelper.kt – Inicjuje zadanie Interactive Image segmenter oraz obsługuje model i przekazuje dostęp wyboru.
- OverlayView.kt – Obsługuje i formatuje wyniki segmentacji.
Konfiguracja
W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz w projektach kodu, w których można używać interaktywnego segmentowania obrazów. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym wymagań wersji platformy, patrz Przewodnik po konfiguracji na Androida
Zależności
Interaktywny podział obrazów na segmenty korzysta z biblioteki com.google.mediapipe:tasks-vision
. Dodaj to
zależności od pliku build.gradle
Projekt tworzenia aplikacji na Androida. Zaimportuj wymagane zależności za pomocą:
ten kod:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Model
Zadanie MediaPipe Interactive Image segmenter wymaga wytrenowanego modelu zgodnego z tym zadanie. Więcej informacji o dostępnych wytrenowanych modelach na potrzeby interaktywnego segmentowania obrazów znajdziesz w artykule zapoznaj się z omówieniem zadania sekcją Modele.
Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:
<dev-project-root>/src/main/assets
Użyj metody BaseOptions.Builder.setModelAssetPath()
, aby podać ścieżkę
używane przez model. Ta metoda zostanie opisana w przykładowym kodzie w następnym
.
W narzędziu Interactive Image segmenter.
przykładowy kod,
model jest zdefiniowany w InteractiveSegmenterHelper.kt
w funkcji setupInteractiveSegmenter()
.
Tworzenie zadania
Do utworzenia zadania możesz użyć funkcji createFromOptions
.
Funkcja createFromOptions
akceptuje opcje konfiguracji, w tym
typów danych wyjściowych maski. Więcej informacji o konfiguracji
Więcej informacji znajdziesz w artykule Omówienie konfiguracji.
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);
Bardziej szczegółowy przykład konfigurowania tego zadania znajdziesz tutaj:
InteractiveSegmenterHelper
funkcji setupInteractiveSegmenter()
klasy.
Opcje konfiguracji
To zadanie zawiera te opcje konfiguracji aplikacji na Androida:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
outputCategoryMask |
Jeśli ma wartość True , dane wyjściowe będą zawierały maskę podziału na segmenty.
jako obraz uint8, gdzie każda wartość w pikselach wskazuje, czy piksel jest częścią
i znajdź obiekt na danym obszarze. |
{True, False } |
False |
outputConfidenceMasks |
Jeśli ma wartość True , dane wyjściowe będą zawierały maskę podziału na segmenty.
jako obraz wartości zmiennoprzecinkowej, gdzie każda wartość zmiennoprzecinkowa odzwierciedla poziom ufności
że piksel jest częścią obiektu znajdującego się na danym obszarze. |
{True, False } |
True |
displayNamesLocale |
Ustawia język etykiet, które mają być używane w przypadku nazw wyświetlanych w kolumnie
metadane modelu zadania, jeśli są dostępne. Wartość domyślna to en dla
Angielski. Do metadanych modelu niestandardowego możesz dodać zlokalizowane etykiety
za pomocą interfejsu TensorFlow Lite Metadata Writer API.
| Kod języka | en |
errorListener |
Ustawia opcjonalny detektor błędów. | Nie dotyczy | Nie ustawiono |
Przygotuj dane
Interaktywny podział obrazów na segmenty działa z obrazami, a zadanie obsługuje wprowadzanie danych
w tym m.in. zmianę rozmiaru, obrót i normalizację wartości.
Musisz przekonwertować obraz wejściowy na
com.google.mediapipe.framework.image.MPImage
obiekt przed przekazaniem do
zadanie.
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);
W przykładowym kodzie Interactive Image segmenter funkcje segment
są zdefiniowane w sekcji
InteractiveSegmenterHelper.kt
.
.
Obsługa i wyświetlanie wyników
Po przeprowadzeniu wnioskowania zadanie segmentujące obrazy interaktywne zwraca błąd
ImageSegmenterResult
obiekt zawierający wyniki funkcji
i segmentacji. Dane wyjściowe mogą zawierać maskę kategorii,
maską ufności lub obie te wartości, w zależności od ustawionej wartości
skonfigurował zadanie.
W sekcjach poniżej objaśniamy dane wyjściowe tego zadania:
Maska kategorii
Te obrazy przedstawiają wizualizację danych wyjściowych zadania dla kategorii
maska wartości ze wskazanym obszarem zainteresowania. Każdy piksel to uint8
wartość wskazująca, czy piksel jest częścią obiektu znajdującego się na obszarze
a interesem publicznym. Czarno-białe kółko na drugim obrazie wskazuje wybrane elementy
obszar zainteresowań.
Oryginalny obraz i maska kategorii. Obraz źródłowy z Pascal VOC 2012 w zbiorze danych.
Maska ufności
Wynikiem maski ufności zawierają wartości zmiennoprzecinkowe między [0, 1]
dla
dla każdego kanału wejściowego obrazu. Wyższe wartości oznaczają wyższy poziom ufności, że
piksel obrazu jest częścią obiektu znajdującego się na danym obszarze.