MediaPipe Image Segmenter görevi, arka plan bulanıklaştırma gibi görsel efektler uygulamak için resimleri önceden tanımlanmış kategorilere göre bölgelere ayırmanıza olanak tanır. Bu talimatlarda, Görüntü Segmentleyici'nin Python dilinde nasıl kullanılacağı gösterilmektedir. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel bakış bölümüne bakın.
Kod örneği
Görüntü Segmenteri'nin örnek kodunda, bu görevin Python'da tam bir uygulaması referans olarak verilmiştir. Bu kod, bu görevi test etmenize ve kendi görüntü segmentleyici uygulamanızı oluşturmaya başlamanıza yardımcı olur. Yalnızca web tarayıcınızı kullanarak Görüntü Segmentleyici örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Kurulum
Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Resim Segmentleyici'yi kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere, geliştirme ortamınızı MediaPipe görevlerini kullanmak için ayarlama hakkında genel bilgi için Python için kurulum kılavuzu başlıklı makaleyi inceleyin. Bu örneğin kaynak kodunu GitHub'da inceleyebilirsiniz.
Paketler
MediaPipe Image Segmenter görevi için mediapipe
paketi gereklidir. Gerekli bağımlılıkları aşağıdaki komutla yükleyebilirsiniz:
$ python -m pip install mediapipe
İçe aktarılanlar
Resim Segmentleyici görev işlevlerine erişmek için aşağıdaki sınıfları içe aktarın:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
MediaPipe Görüntü Segmentleyici görevi, bu görevle uyumlu bir eğitimli model gerektirir. Resim segmentleyici için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi edinmek istiyorsanız göreve genel bakıştaki Modeller bölümüne bakın.
Modeli seçip indirin ve proje dizininizde saklayın:
model_path = '/absolute/path/to/model.tflite'
Model Adı parametresinde modelin yolunu aşağıda gösterildiği gibi belirtin:
base_options = BaseOptions(model_asset_path=model_path)
Görevi oluşturun
MediaPipe Görüntü Segmentasyon görevi, görevi ayarlamak için create_from_options
işlevini kullanır. create_from_options
işlevi, yapılandırma seçeneklerinin işleyeceği değerleri kabul eder. Görev yapılandırması hakkında daha fazla bilgi için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.
Bu örneklerde resimler, video dosyaları ve canlı video akışları için görev oluşturma varyasyonları da gösterilmektedir.
Resim
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the image mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Video
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the video mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Canlı yayın
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the live stream mode: def print_result(result: List[Image], output_image: Image, timestamp_ms: int): print('segmented masks size: {}'.format(len(result))) options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Yapılandırma seçenekleri
Bu görevde, Python uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan değer |
---|---|---|---|
running_mode |
Görevin çalışma modunu ayarlar. Üç mod vardır: RESİM: Tek resim girişleri için kullanılan mod. VIDEO: Bir videonun kod çözülmüş karelerinin modu. LIVE_STREAM: Kameradan alınan giriş verilerinin canlı yayını için kullanılan mod. Bu modda, sonuçları asenkron olarak alacak bir dinleyici oluşturmak için resultListener çağrılmalıdır. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
True olarak ayarlanırsa çıkış, her piksel değerinin kazanan kategori değerini gösterdiği uint8 görüntü olarak bir segmentasyon maskesi içerir. |
{True, False } |
False |
output_confidence_masks |
True olarak ayarlanırsa çıkış, her kayan nokta değerinin kategorinin güven puanı haritasını temsil ettiği, kayan nokta değeri resmi olarak bir segmentasyon maskesi içerir. |
{True, False } |
True |
display_names_locale |
Görevin modelinin meta verilerinde sağlanan görünen adlar için kullanılacak etiketlerin dilini belirler (varsa). Varsayılan değer, İngilizce için en 'tir. TensorFlow Lite Meta Veri Yazıcı API'yi kullanarak özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz |
Yer kodu | en |
result_callback |
Sonuç dinleyiciyi, resim segmentörü LIVE_STREAM modundayken segmentasyon sonuçlarını asenkron olarak alacak şekilde ayarlar.
Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. |
Yok | Yok |
Verileri hazırlama
Girişinizi resim dosyası veya numpy dizisi olarak hazırlayın, ardından mediapipe.Image
nesnesine dönüştürün. Girişiniz bir video dosyası veya web kamerasından canlı yayınsa giriş karelerinizi numpy dizileri olarak yüklemek için OpenCV gibi harici bir kitaplık kullanabilirsiniz.
Resim
# 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)
Video
# Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You need the frame rate to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Canlı yayın
# Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Resim Segmentleyici için verilerin hazırlanmasını gösteren bir kod örneği için kod örneğine bakın.
Görevi çalıştırma
Resim Segmentleyici, çıkarım tetiklemek için segment
, segment_for_video
ve segment_async
işlevlerini kullanır. Görüntü segmentasyonu için bu işlem, giriş verilerini ön işleme, segmentasyon modelini çalıştırma ve ham model çıkışlarını segmentlere ayrılmış maskelere dönüştürmek için son işleme uygulamayı içerir.
Aşağıdaki kod örnekleri, görev modeliyle işlemenin nasıl yürütüleceğini gösterir.
Resim
# Perform image segmentation on the provided single image. # The image segmenter must be created with the image mode. segmented_masks = segmenter.segment(mp_image)
Video
# Perform image segmentation on the provided single image. # The image segmenter must be created with the video mode. segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
Canlı yayın
# Send live image data to perform image segmentation. # The results are accessible via the `result_callback` provided in # the `ImageSegmenterOptions` object. # The image segmenter must be created with the live stream mode. segmenter.segment_async(mp_image, frame_timestamp_ms)
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken Görüntü Segmentleyici görevine giriş karesinin zaman damgasını da sağlamanız gerekir.
- Görüntü veya video modelinde çalışırken Görüntü Segmentleyici görevi, giriş resmini veya kareyi işlemeye başlayana kadar mevcut iş parçacısını engeller.
Resim segmentleyici çıkarımlarını çalıştırmaya dair daha kapsamlı bir örnek için kod örneğine bakın.
Sonuçları işleme ve görüntüleme
Resim Segmentleyici, Image
verilerinin bir listesini döndürür. output_type
CATEGORY_MASK
ise çıkış, uint8 resim olarak tek segmentli maske içeren bir liste olur. Piksel, giriş resminin tanınan kategori indeksini gösterir. output_type
CONFIDENCE_MASK
ise çıkış, kategori numarasının boyutuna sahip bir vektördür. Her segmentlere ayrılmış maske, kategoriye ait pikselin güven puanını temsil eden [0,1]
aralığındaki bir kayan nokta görüntüsüdür.
Aşağıdaki bölümlerde, bu görevden elde edilen çıkış verilerine örnekler verilmiştir:
Kategori güveni
Aşağıdaki resimlerde, bir kategori güven maskesi için görev çıktısının görselleştirmesi gösterilmektedir. Güven maskesi çıkışı, [0, 1]
arasında kayan değerler içerir.
Orijinal resim ve kategori güven maskesi çıkışı. Pascal VOC 2012 veri kümesinden kaynak resim.
Kategori değeri
Aşağıdaki resimlerde, bir kategori değeri maskesi için görev çıktısının görselleştirmesi gösterilmektedir. Kategori maskesi aralığı [0, 255]
'tür ve her piksel değeri, model çıktısının kazanan kategori dizinidir. Kazanan kategori dizini, modelin tanıyabildiği kategoriler arasında en yüksek puana sahip olan kategoridir.
Orijinal resim ve kategori maskesi çıkışı. Pascal VOC 2012 veri kümesinden kaynak resim.