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 görüntü verileri olarak döndürür. Bu talimatlarda, Etkileşimli Görüntü Segmentleyici'nin Android uygulamalarıyla nasıl kullanılacağı gösterilmektedir. Bu talimatlarda açıklanan kod örneğini GitHub'da bulabilirsiniz. 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
MediaPipe Tasks kod örneği, Android için etkileşimli resim segmentleyici uygulamasının basit bir uygulamasıdır. Bu ö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. Etkileşimli Görüntü Segmentleyici örnek kodu GitHub'da barındırılır.
Kodu indirme
Aşağıdaki talimatlarda, git komut satırı aracını kullanarak örnek kodun yerel bir kopyasının nasıl oluşturulacağı gösterilmektedir.
Ö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 seyrek kontrol kullanacak şekilde yapılandırın. Böylece, yalnızca Etkileşimli Görüntü Segmentörü örnek uygulamasının dosyalarına sahip olursunuz:
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 segmentasyonu örnek uygulamasının önemli kodunu içerir:
- InteractiveSegmentationHelper.kt: Etkileşimli Görüntü Segmentörü görevini başlatır ve modeli ve temsilci seçimini yönetir.
- OverlayView.kt: Segmentasyon sonuçlarını işler ve biçimlendirir.
Kurulum
Bu bölümde, geliştirme ortamınızı ve kod projelerinizi, 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 Android için kurulum kılavuzu başlıklı makaleyi inceleyin.
Bağımlılıklar
Etkileşimli Resim Segmentleyici, com.google.mediapipe:tasks-vision
kitaplığını kullanır. Bu bağımlılık, Android uygulama geliştirme projenizin build.gradle
dosyasına eklenmelidir. Aşağıdaki kodla gerekli bağımlılıkları içe aktarın:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Model
MediaPipe Etkileşimli Görüntü Segmentleyici 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 göz atın.
Modeli seçip indirin ve proje dizininizde saklayın:
<dev-project-root>/src/main/assets
Modelin kullandığı yolu belirtmek için BaseOptions.Builder.setModelAssetPath()
yöntemini kullanın. Bu yöntem, sonraki bölümdeki kod örneğinde gösterilmektedir.
Etkileşimli Görüntü Segmentleyici örnek kodunda model, setupInteractiveSegmenter()
işlevindeki InteractiveSegmenterHelper.kt
sınıfında tanımlanır.
Görevi oluşturun
Görevi oluşturmak için createFromOptions
işlevini kullanabilirsiniz. createFromOptions
işlevi, maske çıkış türleri 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ış başlıklı makaleyi inceleyin.
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ındaki setupInteractiveSegmenter()
işlevine bakın.
Yapılandırma seçenekleri
Bu görevde, Android uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan değer |
---|---|---|---|
outputCategoryMask |
True olarak ayarlanırsa çıkış, her piksel değerinin pikselin ilgi alanı |
{True, False } |
False |
outputConfidenceMasks |
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 |
displayNamesLocale |
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 |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | Yok | Ayarlanmadı |
Verileri hazırlama
Etkileşimli Görüntü Segmentörü, resimlerle çalışır ve görev; yeniden boyutlandırma, döndürme ve değer normalleştirme dahil olmak üzere veri girişi ön işleme işlemlerini yönetir.
Giriş resmini göreve iletmeden önce 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 Segmentleyici örnek kodunda veri hazırlama işlemi, segment()
işlevi tarafından InteractiveSegmenterHelper
sınıfında gerçekleştirilir.
Görevi çalıştırma
Tahmini çalıştırmak ve segment oluşturmak için segment
işlevini çağırın.
Etkileşimli Görüntü Segmentörü görevi, giriş resmindeki 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 Segmentleyici örnek kodunda segment
işlevleri InteractiveSegmenterHelper.kt
dosyasında tanımlanır.
Sonuçları işleme ve görüntüleme
Tahmin çalıştırıldığında Etkileşimli Görüntü Segmentörü görevi, segmentasyon görevinin sonuçlarını içeren bir ImageSegmenterResult
nesnesi döndürür. Görevi yapılandırırken belirlediğinize bağlı olarak, çıktının içeriği bir kategori maskesi, güven maskesi veya her ikisi olabilir.
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.
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.