Zadanie MediaPipe Interactive Image Segmenter przyjmuje lokalizację na obrazie, szacuje granice obiektu w tej lokalizacji i zwraca podział obiektu na segmenty jako dane obrazu. Te instrukcje pokazują, jak używać narzędzia do segmentacji interaktywnych obrazów w języku Python. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w sekcji Omówienie.
Przykładowy kod
Przykładowy kod segmentatora interaktywnych obrazów zawiera pełną implementację tego zadania w Pythonie. Ten kod pomoże Ci przetestować to zadanie i rozpocząć tworzenie własnej aplikacji do interaktywnego dzielenia obrazu. Możesz wyświetlać, uruchamiać i edytować przykładowy kod interaktywnego segmentatora obrazu, korzystając tylko z przeglądarki.
Konfiguracja
W tej sekcji opisaliśmy najważniejsze kroki konfigurowania środowiska programistycznego i projektów kodu na potrzeby korzystania z segmentatora interaktywnych obrazów. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby korzystania z zadań MediaPipe, w tym wymagania dotyczące wersji platformy, znajdziesz w przewodniku po konfigurowaniu Pythona. Kod źródłowy tego przykładu znajdziesz na GitHub.
Pakiety
Zadanie MediaPipe Interactive Image Segmenter wymaga pakietu mediapipe
. Wymagane zależności możesz zainstalować za pomocą tego polecenia:
$ python -m pip install mediapipe
Importy
Aby uzyskać dostęp do funkcji zadania Segmenter interaktywnych obrazów, zaimportuj te klasy:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
Zadanie MediaPipe Interactive Image Segmenter wymaga wytrenowanego modelu zgodnego z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach usługi Interaktywny segmentator obrazów znajdziesz w sekcji Modele w opisie zadania.
Wybierz i pobierz model, a potem zapisz go w katalogu projektu:
model_path = '/absolute/path/to/model.tflite'
W parametrze model_asset_path
podaj ścieżkę do modelu, jak pokazano poniżej:
base_options = BaseOptions(model_asset_path=model_path)
Tworzenie zadania
Do konfigurowania zadania MediaPipe Interactive Image Segmenter służy funkcja create_from_options
. Funkcja create_from_options
przyjmuje wartości dla opcji konfiguracji. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Opcje konfiguracji.
Poniższy kod pokazuje, jak skompilować i skonfigurować to zadanie.
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
Opcje konfiguracji
W tym zadaniu dostępne są te opcje konfiguracji aplikacji Pythona:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
output_category_mask |
Jeśli ustawisz tę opcję na True , dane wyjściowe będą zawierać maskę segmentacji w postaci obrazu uint8, gdzie każda wartość piksela wskazuje, czy dany piksel należy do obiektu znajdującego się w obszarze zainteresowania. |
{True, False } |
False |
output_confidence_masks |
Jeśli ustawisz tę opcję na True , dane wyjściowe będą zawierać maskę segmentacji w postaci obrazu z wartością zmiennoprzecinkową, gdzie każda wartość zmiennoprzecinkowa reprezentuje poziom pewności, że piksel należy do obiektu znajdującego się w obszarze zainteresowania. |
{True, False } |
True |
display_names_locale |
Określa język etykiet, których należy używać do wyświetlanych nazw podanych w metadanych modelu zadania (jeśli są dostępne). Wartość domyślna to en w przypadku języka angielskiego. Możesz dodawać zlokalizowane etykiety do metadanych modelu niestandardowego, korzystając z interfejsu TensorFlow Lite Metadata Writer API.
| Kod języka | en |
Przygotuj dane
Przygotuj dane wejściowe jako plik obrazu lub tablicę numpy, a następnie przekształć je w obiekt mediapipe.Image
.
# 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)
Przykład kodu pokazujący przygotowanie danych do użycia przez narzędzie Interactive Image Segmenter znajdziesz w przykładowym kodzie.
Uruchamianie zadania
Segmentator interaktywnych obrazów używa funkcji segment
do wywoływania wnioskowania. W przypadku podziału obrazu obejmuje to wstępne przetwarzanie danych wejściowych, uruchamianie modelu podziału i przetwarzanie podziałów na maski w post-processingu.
Poniższy przykładowy kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadania.
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)
Pełniejszy przykład działania funkcji wnioskowania w Interactive Image Segmenter znajdziesz w przykładzie kodu.
Obsługa i wyświetlanie wyników
Wyniki działania narzędzia Interactive Image Segmenter to lista danych Image
, która może zawierać maskę kategorii, maski ufności lub oba te elementy, w zależności od tego, co zostało określone podczas konfigurowania zadania. Jeśli ustawisz parametr output_category_mask
na True
, dane wyjściowe będą zawierać listę z maską w jednym segmencie w formacie uint8. Wartość piksela wskazuje, czy jest to część obiektu w obszarze zainteresowania. Indeks kategorii rozpoznany na podstawie obrazu wejściowego. Jeśli ustawisz parametr output_confidence_masks
na True
, dane wyjściowe będą zawierać listę kanałów z wartościami pikseli w zakresie [0,1]
, które reprezentują wynik zaufania piksela należącego do obiektu w obszarze zainteresowania.
W następnych sekcjach znajdziesz więcej informacji o danych wyjściowych z tego zadania:
Maska kategorii
Na poniższych obrazach pokazano wizualizację wyniku zadania w przypadku maski kategorii i wartości z wskazanym punktem zainteresowania. Każdy piksel to wartość uint8
, która wskazuje, czy piksel jest częścią obiektu znajdującego się w obszarze zainteresowania. Czarny i biały okrąg na drugim obrazie wskazuje wybrany obszar zainteresowania.
Wyjście oryginalnej maski obrazu i kategorii. Obraz źródłowy z danych Pascal VOC 2012.
Maska ufności
Dane wyjściowe maski ufności zawierają wartości zmiennoprzecinkowe z zakresu [0, 1]
dla każdego kanału wejściowego obrazu. Wyższe wartości wskazują na większą pewność, że piksel obrazu jest częścią obiektu znajdującego się w obszarze zainteresowania.