Zadanie MediaPipe Interactive Image Segmenter pobiera lokalizację na obrazie, szacuje granice obiektu w tej lokalizacji i zwraca segmentację obiektu jako dane obrazu. Te instrukcje pokazują, jak korzystać z interaktywnego podziału obrazów na segmenty 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 interaktywnego narzędzia do segmentowania obrazów zawiera pełną implementację tego zadania w Pythonie. Ten kod pomoże Ci przetestować to zadanie i zacząć tworzyć własną aplikację do interaktywnego podziału obrazów na segmenty. Możesz wyświetlić, uruchomić i edytować przykładowy kod interaktywnego segmentu obrazów w przeglądarce internetowej.
Konfiguracja
W tej sekcji znajdziesz najważniejsze czynności, jakie należy wykonać, aby skonfigurować środowisko programistyczne i projekty kodu na potrzeby interaktywnego podziału obrazów na segmenty. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby zadań MediaPipe, w tym o wymaganiach dotyczących wersji platformy, znajdziesz w przewodniku konfiguracji dla 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
Importowane dane
Aby uzyskać dostęp do funkcji interaktywnego podziału obrazów na segmenty, zaimportuj następujące 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 do interaktywnego segmentowania obrazów znajdziesz w sekcji przeglądu zadań na stronie Modele.
Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:
model_path = '/absolute/path/to/model.tflite'
Określ ścieżkę modelu w parametrze model_asset_path
, jak poniżej:
base_options = BaseOptions(model_asset_path=model_path)
Tworzenie zadania
Do skonfigurowania zadania interaktywnego segmentacji obrazów MediaPipe służy funkcja create_from_options
. Funkcja create_from_options
akceptuje wartości 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
To zadanie ma następujące opcje konfiguracji aplikacji w Pythonie:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
output_category_mask |
Jeśli ustawisz wartość True , dane wyjściowe będą zawierały maskę segmentacji w postaci obrazu uint8, w którym każda wartość piksela wskazuje, czy piksel jest częścią obiektu znajdującego się w ciekawym obszarze. |
{True, False } |
False |
output_confidence_masks |
Jeśli ma wartość True , dane wyjściowe zawierają maskę podziału w postaci obrazu z wartościami zmiennoprzecinkowymi, w których każda wartość zmiennoprzecinkowa reprezentuje stopień pewności, że piksel jest częścią obiektu znajdującego się w ciekawym obszarze. |
{True, False } |
True |
display_names_locale |
Ustawia język etykiet, które mają być używane w przypadku nazw wyświetlanych w metadanych modelu zadania (jeśli są dostępne). Wartość domyślna w języku angielskim to en . Za pomocą TensorFlow Lite MetadataWriter API możesz dodawać zlokalizowane etykiety do metadanych modelu niestandardowego.
| Kod języka | en |
Przygotuj dane
Przygotuj dane wejściowe jako plik graficzny lub tablicę numpy, a następnie przekonwertuj je na 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ładowy kod pokazujący przygotowanie danych na potrzeby interaktywnego podziału obrazów na segmenty znajdziesz w tym artykule.
Uruchamianie zadania
Interaktywny podział obrazów na segmenty używa funkcji segment
do aktywowania wnioskowania. Segmentacja obrazów obejmuje wstępne przetwarzanie danych wejściowych, uruchamianie modelu podziału na segmenty i przetwarzanie nieprzetworzonych danych wyjściowych modelu na maski podzielone na segmenty.
Poniższy przykładowy kod pokazuje, jak wykonywać przetwarzanie za pomocą modelu zadań.
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 użycia wnioskowania dotyczącego interaktywnego podziału obrazów na segmenty znajdziesz w przykładzie kodu.
Obsługa i wyświetlanie wyników
Wyniki uzyskane w przypadku interaktywnego podziału obrazów na segmenty 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 ustawione podczas konfigurowania zadania. Jeśli ustawisz output_category_mask
na True
, wynikiem będzie lista zawierająca maskę jednosegmentową jako obraz uint8. Liczba pikseli wskazuje, czy jest on częścią obiektu
w obszarze zainteresowań. Rozpoznany indeks kategorii obrazu wejściowego. Jeśli ustawisz output_confidence_masks
na True
, wynikiem będzie lista kanałów zawierających wartości pikseli z zakresu [0,1]
reprezentujących poziom ufności piksela należącego do obiektu w danym obszarze.
W sekcjach poniżej objaśniamy szczegółowo dane wyjściowe z tego zadania:
Maska kategorii
Na poniższych obrazach pokazano wizualizację wyników zadania w przypadku maski wartości kategorii ze wskazanym ważnym obszarem. Każdy piksel to wartość uint8
wskazująca, czy jest on częścią obiektu znajdującego się w danym obszarze. Czarno-białe kółko na drugim zdjęciu
wskazuje wybrany obszar zainteresowań.
Oryginalny obraz i maska kategorii. Obraz źródłowy ze zbioru danych Pascal VOC 2012.
Maska ufności
Dane wyjściowe maski ufności zawierają wartości zmiennoprzecinkowe między [0, 1]
dla każdego kanału wejściowego obrazu. Wyższe wartości oznaczają większą pewność, że piksel obrazu jest częścią obiektu znajdującego się w ciekawym obszarze.