Python için resim segmentasyon kılavuzu

MediaPipe Resim Segmenter görevi, görüntüleri önceden tanımlanmış öğelere göre bölgelere bölmenizi sağlar. kategorilerden en iyi şekilde yararlanabilirsiniz. Bu talimatları uygulayarak Resim Segmenter'i Python diliyle nasıl kullanacağınızı öğrenebilirsiniz. Örneğin, özellikleri, modelleri ve yapılandırma seçenekleri hakkında Bu görev için Genel Bakış'ı inceleyin.

Kod örneği

Resim Segmenter'ın örnek kodu, bu etiketin eksiksiz bir şekilde görevi görebilir. Bu kod, görevi test etmenize ve kendi resim segment uygulamanızı oluşturmaya başladınız. Bu dosyaları görüntüleyebilir, çalıştırabilir Resim Segmenter'ı düzenleyin örnek kod yalnızca web tarayıcınızı kullanarak.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili kullanmak için özel olarak projeleri kodlayabilir. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı daha fazla bilgi için Python kurulum kılavuzu. Bu örneğin kaynak kodunu şurada inceleyebilirsiniz: GitHub

Paketler

MediaPipe Resim Segmenter görevi için mediapipe paketi gerekir. Google Etiket Yöneticisi'ni kullanarak bağımlılıklarını görmek için şu komutu kullanın:

$ python -m pip install mediapipe

İçe aktarılanlar

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örevi görebilir. Resim Segmenter için eğitilmiş mevcut modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümüne.

Modeli seçin ve indirin, ardından proje dizininizde depolayın:

model_path = '/absolute/path/to/model.tflite'

Aşağıda gösterildiği gibi, Model Adı parametresi içinde modelin yolunu belirtin:

base_options = BaseOptions(model_asset_path=model_path)

Görevi oluşturma

MediaPipe Resim Segmenter görevi aşağıdaki işlemleri yapmak için create_from_options işlevini kullanır: görevi ayarlayın. create_from_options işlevi, değerleri kabul eder tercih edebilirsiniz. Görev yapılandırması hakkında daha fazla bilgi için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.

Bu örnekler ayrıca resimler için görev yapısı, video dosyaları ve canlı video akışları kullanılabilir.

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çeneklerini içerir:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
running_mode Görev için çalışma modunu ayarlar. Üç tane var modlar:

IMAGE: Tek resimli giriş modu.

VIDEO: Bir videonun kodu çözülmüş karelerine yönelik mod.

LIVE_STREAM: Giriş canlı yayını modu kameradan alınan veriler gibi. Bu modda, resultListener, sonuçları almak üzere bir dinleyici ayarlamak için çağrıldı eşzamansız olarak ayarlayabilirsiniz.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
output_category_mask True olarak ayarlanırsa çıkışta segmentasyon maskesi bulunur. her piksel değeri kazanan kategoriyi gösteren bir uint8 resmi olarak değer. {True, False} False
output_confidence_masks True olarak ayarlanırsa çıkışta segmentasyon maskesi bulunur. her kayan değerin güveni temsil ettiği bir kayan değer resmi olarak ve puan eşlemesini seçin. {True, False} True
display_names_locale görev modelinin meta verileri (varsa). Şunun için varsayılan: en İngilizce. Özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz TensorFlow Lite Metadata Writer API'yi kullanarak Yerel ayar kodu en
result_callback Sonuç işleyiciyi segmentasyon sonuçlarını alacak şekilde ayarlar Resim segmentleyici LIVE_STREAM modundayken eşzamansız olarak. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir Yok Yok

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra bunu bir mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyasıysa bir web kamerasından canlı yayın yapmak için Giriş çerçevelerinizi numpy olarak yüklemek için OpenCV dizi'dir.

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 bir kod örneği için kod örneği hakkında daha fazla bilgi edinin.

Görevi çalıştırma

Resim Segmenter, segment, segment_for_video ve segment_async kullanır. fonksiyonları kullanmaktır. Görüntü segmentasyonu için, giriş verilerinin ön işlemesi, segmentasyon modelini çalıştırma ve işleme sonrası segmentlere ayrılmış maskelere ham model çıktı verir.

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 şunları da yapmanız gerekir: Resim Segmenter görevine giriş çerçevesinin zaman damgasını sağlar.
  • Resim veya video modelinde çalışırken Resim Segmenter görevi, giriş resmini işlemeyi bitirene kadar geçerli iş parçacığını engeller veya çerçeve.

Resim Segmenter çıkarımlarının çalıştırılmasıyla ilgili daha kapsamlı bir örnek için kod örneği hakkında daha fazla bilgi edinin.

Sonuçları işleme ve görüntüleme

Resim Segmenter, Image verilerinden oluşan bir liste oluşturur. Eğer output_type CATEGORY_MASK, çıkış bir liste uint8 resmi olarak tek segmentlere ayrılmış bir maske içeren reklam öğeleridir. Piksel, giriş resminin tanınan kategori dizinini oluşturur. output_type ise CONFIDENCE_MASK ise çıkış, kategori numarası boyutunda bir vektördür. Her biri segmentlere ayrılmış maske, [0,1] aralığında bulunan ve kategoriye ait pikselin güven puanı.

Aşağıdaki bölümlerde, bu görevden elde edilen çıkış verilerine örnekler gösterilmektedir:

Kategori güveni

Aşağıdaki resimlerde, bir kategori için görev çıkışının görselleştirmesi gösterilmektedir güven maskesi oluşturabilirsiniz. Güven maskesi çıkışı, [0, 1]

Orijinal resim ve kategori güven maskesi çıktısı. Şuradaki kaynak resim: VOC 2012'nin Paskalası veri kümesiyle birlikte kullanılamaz.

Kategori değeri

Aşağıdaki resimlerde, bir kategori için görev çıkışının görselleştirmesi gösterilmektedir ve değer maskeniz olsun. Kategori maskesi aralığı [0, 255] ve her piksel değeri model çıkışının kazanan kategori dizinini temsil eder. Kazanan kategori indeks, modelin tanıyabileceği kategoriler arasında en yüksek puana sahiptir.

Orijinal resim ve kategori maskesi çıktısı. Şuradaki kaynak resim: VOC 2012'nin Paskalası veri kümesiyle birlikte kullanılamaz.