Python için resim segmentasyon kılavuzu

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.