MediaPipe Resim 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ızı sağlar. Bu talimatlarda, Resim Segmenter'ın Python diliyle nasıl kullanılacağı gösterilmektedir. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Genel Bakış bölümüne bakın.
Kod örneği
Resim Segmenter örnek kodu, size referans olması açısından bu görevin Python'da eksiksiz bir uygulamasını sunmaktadır. Bu kod, bu görevi test etmenize ve kendi resim segmentleyici uygulamanızı oluşturmaya başlamanıza yardımcı olur. Resim Segmenter örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Kurulum
Bu bölümde, geliştirme ortamınızı kurmanın önemli adımları ve projelerinizi özellikle Görüntü Segmenter'ı kullanacak şekilde kodlamak için izlemeniz gereken temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere, MediaPipe görevlerini kullanmak amacıyla geliştirme ortamınızı ayarlama hakkında genel bilgileri Python için kurulum kılavuzu bölümünde bulabilirsiniz. Bu örnekle ilgili kaynak kodunu GitHub'da inceleyebilirsiniz.
Paketler
MediaPipe Resim Segmenter görevi için mediapipe
paketi gerekir. Gerekli bağımlılıkları aşağıdaki komutla yükleyebilirsiniz:
$ python -m pip install mediapipe
İçe Aktarımlar
Resim Segmenter 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 Resim Segmenter görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Resim Segmenter için eğitilmiş modeller hakkında daha fazla bilgi almak isterseniz göreve genel bakış Modeller bölümüne bakın.
Modeli seçip indirin ve ardından proje dizininizde depolayın:
model_path = '/absolute/path/to/model.tflite'
Aşağıda gösterildiği gibi, Model Adı parametresinde modelin yolunu belirtin:
base_options = BaseOptions(model_asset_path=model_path)
Görevi oluşturma
MediaPipe Resim Segmenter görevi, görevi ayarlamak için create_from_options
işlevini kullanır. create_from_options
işlevi, işlenecek yapılandırma seçeneklerinin değerlerini kabul eder. Görev yapılandırması hakkında daha fazla bilgi için Yapılandırma seçenekleri bölümüne bakın.
Bu örnekler resimler, video dosyaları ve canlı video akışları için görev yapısının varyasyonlarını da gösterir.
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örev, Python uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
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 resimli girişler için mod. VİDEO: Bir videonun kodu çözülmüş karelerine yönelik mod. LIVE_STREAM: Kamera gibi giriş verilerini içeren bir canlı yayın modu. Bu modda, sonuçları eşzamansız olarak almak üzere bir işleyici ayarlamak için resultListener çağrılmalıdır. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
True olarak ayarlanırsa çıkış, uint8 görüntüsü olarak bir segmentasyon maskesi içerir. Her piksel değeri, kazanan kategori değerini gösterir. |
{True, False } |
False |
output_confidence_masks |
True olarak ayarlanırsa çıktı, kayan değer resmi olarak bir segmentasyon maskesi içerir. Burada her kayan değer, kategorinin güven puanı haritasını temsil eder. |
{True, False } |
True |
display_names_locale |
Varsa görev modelinin meta verilerinde sağlanan görünen adlar için kullanılacak etiketlerin dilini ayarlar. İngilizce için varsayılan değer en şeklindedir. TensorFlow Lite Metadata Writer API'yi kullanarak özel modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz
| Yerel ayar kodu | en |
result_callback |
Sonuç işleyiciyi, görüntü segmentleyici canlı yayın modundayken segmentasyon sonuçlarını eşzamansız olarak alacak şekilde ayarlar.
Yalnızca çalıştırma modu LIVE_STREAM olarak ayarlandığında kullanılabilir |
Yok | Yok |
Verileri hazırlama
Girişinizi görüntü dosyası veya numpy dizisi olarak hazırlayıp mediapipe.Image
nesnesine dönüştürün. Girişiniz bir video dosyası veya bir web kamerasından canlı yayın ise giriş karelerinizi sayı 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 Segmenter için verilerin hazırlanmasını gösteren kod örneği için kod örneğine bakın.
Görevi çalıştırma
Resim Segmenter, çıkarımları tetiklemek için segment
, segment_for_video
ve segment_async
işlevlerini kullanır. Görüntü segmentasyonu için bu, giriş verilerinin ön işlemesini, segmentasyon modelini çalıştırmayı ve ham model çıkışlarının segmentlere ayrılmış maskelere son olarak işlenmesini içerir.
Aşağıdaki kod örnekleri, işlemenin görev modeliyle 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 Resim Segmenter görevine giriş karesinin zaman damgasını da sağlamanız gerekir.
- Resim veya video modelinde çalışırken, Resim Segmenter görevi giriş resmini veya çerçevesini işlemeyi bitirene kadar geçerli iş parçacığını engeller.
Resim Segmenter çıkarımlarını çalıştırmayla ilgili daha kapsamlı bir örnek için kod örneğine bakın.
Sonuçları işleme ve görüntüleme
Resim Segmenter, Image
verilerinden oluşan bir liste oluşturur. output_type
değeri CATEGORY_MASK
ise çıkış, uint8 görüntüsü olarak tek segmentli maske içeren bir liste olur. Piksel, giriş resminin tanınan kategori dizinini gösterir. output_type
değeri CONFIDENCE_MASK
ise çıktı, kategori numarası boyutunda bir vektördür. Segmentlere ayrılmış her maske, [0,1]
aralığında bulunan ve kategoriye ait pikselin güven puanını temsil eden, kayan bir resimdir.
Aşağıdaki bölümlerde, bu görevden elde edilen çıkış verilerinin örnekleri gösterilmektedir:
Kategori güveni
Aşağıdaki resimlerde, bir kategori güven maskesi için görev çıkışının görselleştirmesi gösterilmektedir. Güven maskesi çıktısı, [0, 1]
arasında kayan noktalı değerler içeriyor.
Orijinal resim ve kategori güven maskesi çıkışı. Pascal VOC 2012 veri kümesinden alınan kaynak resim.
Kategori değeri
Aşağıdaki resimlerde, bir kategori değeri maskesi için görev çıkışının görselleştirmesi gösterilmektedir. Kategori maskesi aralığı [0, 255]
ve her piksel değeri, model çıktısının kazanan kategori dizinini temsil eder. Kazanan kategori dizini, modelin tanıyabileceği kategoriler arasında en yüksek puana sahiptir.
Orijinal resim ve kategori maskesi çıkışı. Pascal VOC 2012 veri kümesinden alınan kaynak resim.