MediaPipe Etkileşimli Resim 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 Android uygulamalarıyla nasıl kullanacağınızı gösterir. Bu talimatlarda açıklanan kod örneğine GitHub'dan ulaşabilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.
Kod örneği
MediaPipe Tasks kod örneği, Android için Etkileşimli Resim Segmenter uygulamasının basit bir uygulamasıdır. Örnek, cihaz galerisinden seçilen resimlerle çalışır.
Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya mevcut bir uygulamayı değiştirirken referans olarak kullanabilirsiniz. Interactive Image Segmenter örnek kodu GitHub'da barındırılmaktadır.
Kodu indirme
Aşağıdaki talimatlar, git komut satırı aracını kullanarak örnek kodun yerel bir kopyasını nasıl oluşturacağınızı göstermektedir.
Örnek kodu indirmek için:
- Aşağıdaki komutu kullanarak git deposunu klonlayın:
git clone https://github.com/google-ai-edge/mediapipe-samples
- İsteğe bağlı olarak, git örneğinizi az ödeme yöntemini kullanacak şekilde yapılandırarak yalnızca Etkileşimli Resim Segmenti örnek uygulamasının dosyalarına sahip olabilirsiniz:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Örnek kodun yerel bir sürümünü oluşturduktan sonra projeyi Android Studio'ya aktarabilir ve uygulamayı çalıştırabilirsiniz. Talimatlar için Android için Kurulum Kılavuzu'na bakın.
Temel bileşenler
Aşağıdaki dosyalar, bu resim segmentasyon örnek uygulaması için önemli kodu içerir:
- InteractiveSegmentationHelper.kt - Etkileşimli Resim Segmenter görevini başlatır, modeli ve yetki verilmiş seçimi yapar.
- OverlayView.kt - Segmentasyon sonuçlarını işler ve biçimlendirir.
Kurulum
Bu bölümde, geliştirme ortamınızı kurmanın temel adımları ve Etkileşimli Resim Segmenter'ı kullanmak için kod projeleriniz 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 bilgiler için Android için kurulum kılavuzuna bakın.
Bağımlılıklar
Etkileşimli Resim Segmenter, com.google.mediapipe:tasks-vision
kitaplığını kullanır. Bu bağımlılığı, Android uygulaması geliştirme projenizin build.gradle
dosyasına ekleyin. Gerekli bağımlılıkları aşağıdaki kodla içe aktarın:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
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:
<dev-project-root>/src/main/assets
Modelin kullandığı yolu belirtmek için BaseOptions.Builder.setModelAssetPath()
yöntemini kullanın. Bu yöntem, bir sonraki bölümde yer alan kod örneğinde gösterilmiştir.
Etkileşimli Resim Segmenter örnek kodunda model, setupInteractiveSegmenter()
işlevindeki InteractiveSegmenterHelper.kt
sınıfında tanımlanmıştır.
Görevi oluşturma
Görevi oluşturmak için createFromOptions
işlevini kullanabilirsiniz. createFromOptions
işlevi, maske çıkış türleri de dahil olmak üzere yapılandırma seçeneklerini kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne bakın.
InteractiveSegmenterOptions options = InteractiveSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener(exception -> { // Process the segmentation errors here. }) .build(); interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
Bu görevi ayarlamayla ilgili daha ayrıntılı bir örnek için InteractiveSegmenterHelper
sınıfı setupInteractiveSegmenter()
işlevine bakın.
Yapılandırma seçenekleri
Bu görev, Android uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan Değer |
---|---|---|---|
outputCategoryMask |
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 |
outputConfidenceMasks |
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 |
displayNamesLocale |
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 |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | Yok | Belirlenmedi |
Verileri hazırlama
Etkileşimli Resim Segmenti Aracı, resimlerle çalışır ve görev; yeniden boyutlandırma, döndürme ve değer normalleştirmesi dahil olmak üzere, veri girişi ön işlemesini gerçekleştirir.
Giriş görüntüsünü göreve iletmeden önce bir com.google.mediapipe.framework.image.MPImage
nesnesine dönüştürmeniz gerekir.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
Etkileşimli Resim Segmenter örnek kodunda, veri hazırlığı InteractiveSegmenterHelper
sınıfında segment()
işlevi tarafından işlenir.
Görevi çalıştırma
Tahmini çalıştırmak ve segment oluşturmak için segment
işlevini çağırın.
Etkileşimli Resim Segmenteri görevi, giriş görüntüsündeki tanımlanan segment bölgelerini döndürür.
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
Etkileşimli Resim Segmenter örnek kodunda, segment
işlevleri InteractiveSegmenterHelper.kt
dosyasında tanımlanmıştır.
Sonuçları işleme ve görüntüleme
Çıkarım çalıştırıldıktan sonra, Etkileşimli Resim Segmenter görevi segmentasyon görevinin sonuçlarını içeren bir ImageSegmenterResult
nesnesi döndürür. Çıkışın içeriği, görevi yapılandırırken ayarladığınız ayarlara bağlı olarak bir kategori maskesi, güven maskesi veya her ikisini birden içerebilir.
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.