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

MediaPipe Etkileşimli Resim Segmenter görevi, bir görüntüdeki konumu alır ve bir nesneye döner ve nesne segmentasyonunu şu şekilde döndürür: resim verileri. Bu talimatlar, Etkileşimli Resim Segmenter'i kullanarak Android uygulamaları. Bu talimatlarda açıklanan kod örneğini şu adreste bulabilirsiniz: GitHub'a gidin. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.

Kod örneği

MediaPipe Tasks kod örneği, bir Etkileşimli Resim Segmenterinin basit bir uygulamasıdır Android için uygulama. . Örnek, cihaz galerisinden seçilen resimlerle çalışır.

Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Etkileşimli Resim Segmenter örnek kodu, GitHub'a gidin.

Kodu indirme

Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.

Örnek kodu indirmek için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. İsteğe bağlı olarak, git örneğinizi seyrek ödeme yöntemini kullanacak şekilde yapılandırın, Böylece, yalnızca Etkileşimli Resim Segmenter örnek uygulamasına ait dosyaları kullanabilirsiniz:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/interactive_segmentation/android
    

Örnek kodun yerel sürümünü oluşturduktan sonra projeyi içe aktarabilirsiniz. Android Studio'ya gidip uygulamayı çalıştırın. Talimatlar için Android için Kurulum Kılavuzu.

Temel bileşenler

Aşağıdaki dosyalar bu resim için önemli kodu içeriyor segmentasyon örneği uygulaması:

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili kullanmak için projelerin kodlanması. Ş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 Android için kurulum kılavuzu.

Bağımlılıklar

Etkileşimli Resim Segmenter, com.google.mediapipe:tasks-vision kitaplığını kullanır. Bunu ekle dosyanızın build.gradle dosyasına bağımlılığı Android uygulama geliştirme projesi. Gerekli bağımlılıkları şu kodu kullanın:

dependencies {
    ...
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

Model

MediaPipe Etkileşimli Resim Segmenter görevi, bu görevi görebilir. Etkileşimli Resim Segmenter için eğitilmiş modeller hakkında daha fazla bilgi için bkz. göreve genel bakış Modeller bölümü.

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

<dev-project-root>/src/main/assets

Yolu belirtmek için BaseOptions.Builder.setModelAssetPath() yöntemini kullanın modeli tarafından kullanılır. Bu yöntem, bölümüne bakın.

Etkileşimli Resim Segmenter'de örnek kod, model, InteractiveSegmenterHelper.kt sınıfını görüntülemek için setupInteractiveSegmenter() işlevine ekleyin.

Görevi oluşturma

Görevi oluşturmak için createFromOptions işlevini kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan createFromOptions işlevi, şunlar dahil yapılandırma seçeneklerini kabul eder: maske çıkış türleri. Yapılandırma hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış bölümüne göz atı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 setupInteractiveSegmenter() sınıf işlevi.

Yapılandırma seçenekleri

Bu görev, Android 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
outputCategoryMask True olarak ayarlanırsa çıkışta segmentasyon maskesi bulunur. Bu bir uint8 resmi gibi, burada her bir piksel değeri pikselin alakalı bölgede bulunan nesne. {True, False} False
outputConfidenceMasks True olarak ayarlanırsa çıkışta segmentasyon maskesi bulunur. her kayan değerin güveni temsil ettiği bir kayan değer resmi olarak pikselin ilgili alanda bulunan nesnenin parçası olduğunu doğrulayın. {True, False} True
displayNamesLocale 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
errorListener İsteğe bağlı bir hata işleyici ayarlar. Yok Ayarlanmadı

Verileri hazırlama

Etkileşimli Resim Segmenteri, resimlerle çalışır. Görev, veri girişini işler yeniden boyutlandırma, döndürme ve değer normalleştirmesi dahil olmak üzere ön işlemeyi içerir. Giriş resmini com.google.mediapipe.framework.image.MPImage nesnesini görevi görebilir.

import com.google.mediapipe.framework.image.BitmapImageBuilder;
import com.google.mediapipe.framework.image.MPImage;

// Load an image on the users device as a Bitmap object using BitmapFactory.

// Convert an Androids Bitmap object to a MediaPipes Image object.
MPImage mpImage = new BitmapImageBuilder(bitmap).build();
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ı olarak kaydedebilirsiniz.

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

Çıkarım çalıştırıldığında, Etkileşimli Resim Segmenter görevi bir ImageSegmenterResult nesnesi Segmentasyon görevi görebilir. Çıktının içeriğinde bir kategori maskesi, güvenlik maskesi ya da her ikisi de Görevi yapılandırmış demektir.

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

Kategori maskesi

Aşağıdaki resimlerde, bir kategori için görev çıkışının görselleştirmesi gösterilmektedir değer maskesi oluşturmanız gerekir. Her piksel bir uint8 pikselin, alanında bulunan nesnenin bir parçası olup olmadığını gösteren değer ilgi alanı. İkinci resimdeki siyah beyaz daire, seçilen önemli bir noktadır.

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

Güven maskesi

Güven maskesinin çıktısı, şunlar için [0, 1] arasında kayan noktalı değerler içerir: her bir resim giriş kanalına bağlanır. Daha yüksek değerler, resim pikseli, ilgilenilen alanda bulunan nesnenin bir parçasıdır.