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

MediaPipe Etkileşimli Görüntü Segmentörü görevi, bir resimdeki bir konumu alır, bu konumdaki bir nesnenin sınırlarını tahmin eder ve nesnenin segmentasyonunu resim verileri olarak döndürür. Bu talimatlarda, Etkileşimli 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

Etkileşimli Resim Segmentleyici'nin örnek kodu, referans olarak kullanabileceğiniz bu görevin Python'da eksiksiz bir şekilde uygulanmasını sağlar. 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. Yalnızca web tarayıcınızı kullanarak etkileşimli resim 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 Etkileşimli 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 Interactive 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

Etkileşimli 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 Interactive Image Segmenter görevi, bu görevle uyumlu bir eğitimli model gerektirir. Etkileşimli Resim Segmentleyici için mevcut eğitimli 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'

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

base_options = BaseOptions(model_asset_path=model_path)

Görevi oluşturun

MediaPipe Etkileşimli 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. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırma seçenekleri başlıklı makaleyi inceleyin. Aşağıdaki kodda, bu görevin nasıl oluşturulacağı ve yapılandırılacağı gösterilmektedir.

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ö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
output_category_mask True olarak ayarlanırsa çıkış, her piksel değerinin pikselin ilgi alanı {True, False} False
output_confidence_masks True olarak ayarlanırsa çıkış, her kayan nokta değerinin pikselin ilgi alanındaki nesnenin bir parçası olduğuna dair güveni 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

Verileri hazırlama

Girişinizi resim dosyası veya numpy dizisi olarak hazırlayın, ardından 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 Görüntü 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

Etkileşimli Resim Segmentleyici, çıkarım yapmak için segment işlevini kullanır. Görüntü segmentasyonu için bu işleme, 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 işleme sonrası işleme dahildir.

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

Etkileşimli Görüntü Segmentörü'nün çıkış sonuçları, Image verilerinin bir listesidir ve görevi yapılandırırken ne ayarladığınıza bağlı olarak kategori maskesi, güven maskesi veya her ikisi de içerebilir. output_category_mask değerini True olarak ayarlarsanız çıkış, tek segmentli maskeyi uint8 resim olarak içeren bir liste olur. Piksel değeri, ilgi alanındaki nesnenin bir parçası olup olmadığını belirtir. Giriş resminin tanınan kategori dizini. output_confidence_masks değerini 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 bir kanal listesidir.

Aşağıdaki bölümlerde bu görevin çıkış verileri daha ayrıntılı olarak açıklanmıştır:

Kategori maskesi

Aşağıdaki resimlerde, ilgi alanı noktası alanı belirtilen bir kategori değeri maskesi için görev çıktısının görselleştirmesi gösterilmektedir. Her piksel, pikselin ilgi alanı içinde bulunan nesnenin bir parçası olup olmadığını belirten bir uint8 değeridir. İkinci resimdeki siyah beyaz daire, seçilen ilgi alanını gösterir.

Yaprak yığınının ortasında duran bir köpek Önceki resimdeki köpeğin dış çizgisi

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

Güven maskesi

Güven maskesinin çıkışı, her görüntü giriş kanalı için [0, 1] arasında değişen kayan nokta değerleri içerir. Daha yüksek değerler, resim pikselin ilgi alanındaki nesnenin bir parçası olduğuna dair daha yüksek bir güven düzeyini gösterir.