Python için etkileşimli resim segmentasyon kılavuzu

MediaPipe Etkileşimli Görüntü Segmenter görevi bir görüntüdeki konumu alır, bu konumdaki bir nesnenin sınırlarını tahmin eder ve nesne için segmentasyonu görüntü verisi olarak döndürür. Bu talimatlar, Etkileşimli Resim Segmenter'i Python dilinde nasıl kullanacağınızı gösterir. 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

Etkileşimli 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 etkileşimli görüntü segmentasyonu uygulamanızı oluşturmaya başlamanıza yardımcı olur. Etkileşimli 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 özel olarak Etkileşimli Resim Segmenter'ı kullanacak şekilde kodlamak 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 Etkileşimli 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

Etkileşimli 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 Etkileşimli Resim Segmenter görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Etkileşimli 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'

model_asset_path parametresinde modelin yolunu aşağıda gösterildiği gibi belirtin:

base_options = BaseOptions(model_asset_path=model_path)

Görevi oluşturma

MediaPipe Etkileşimli 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. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri bölümüne bakın. Aşağıdaki kod bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir.

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

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
output_category_mask True olarak ayarlanırsa çıkış, uint8 resmi olarak bir segmentasyon maskesi içerir. Her piksel değeri, pikselin ilgilenilen alanda bulunan nesnenin bir parçası olup olmadığını gösterir. {True, False} False
output_confidence_masks True olarak ayarlanırsa çıkış, kayan değer resmi olarak bir segmentasyon maskesi içerir. Burada her kayan değer, pikselin ilgili alanda bulunan nesnenin bir parçası olduğuna dair güveni 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

Verileri hazırlama

Girişinizi görüntü dosyası veya numpy dizisi olarak hazırlayıp mediapipe.Image nesnesine dönüştürün.

# 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)

Etkileşimli 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

Etkileşimli Resim Segmenter, çıkarımları tetiklemek için segment işlevini kullanır. Görüntü segmentasyonu için bu, giriş verilerinin ön işlenmesini, 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 örneğinde, görev modeliyle işlemenin nasıl yürütüleceği gösterilmektedir.

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)

Etkileşimli Resim Segmenter çıkarımları çalıştırmayla ilgili daha kapsamlı bir örnek için kod örneğine bakın.

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

Etkileşimli Resim Segmenter'in çıkış sonuçları, Image verilerinin listesidir ve görevi yapılandırırken ayarladığınız ayara bağlı olarak bir kategori maskesi, güven maskeleri veya her ikisini de içerebilir. output_category_mask değerini True olarak ayarlarsanız çıktı, uint8 görüntüsü olarak tek segmentli maske içeren bir liste olur. Piksel değeri, giriş resminin tanınan kategori dizini, ilgili alanın nesnenin bir parçası olup olmadığını gösterir. output_confidence_masks öğesini True olarak ayarlarsanız çıktı, ilgilenilen alandaki nesneye ait pikselin güven puanını temsil eden [0,1] aralığındaki piksel değerlerini içeren kanalların listesi olur.

Aşağıdaki bölümlerde bu görevden elde edilen çıkış verileri daha ayrıntılı şekilde açıklanmaktadır:

Kategori maskesi

Aşağıdaki resimlerde, bir önemli noktanın belirtildiği bir kategori değeri maskesi için görev çıktısının görselleştirilmiş hali gösterilmektedir. Her bir piksel, pikselin ilgilenilen alanda bulunan nesnenin bir parçası olup olmadığını gösteren bir uint8 değeridir. İkinci resimdeki siyah beyaz daire, seçilen ilgi alanını gösterir.

Orijinal resim ve kategori maskesi çıkışı. Pascal VOC 2012 veri kümesinden alınan kaynak resim.

Güven maskesi

Güven maskesi çıkışı, her bir görüntü giriş kanalı için [0, 1] arasında kayan değerler içerir. Daha yüksek değerler, resim pikselinin ilgili alanda bulunan nesnenin parçası olduğuna dair daha yüksek bir güven olduğunu gösterir.