MediaPipe Resim Segmenter görevi, görüntüleri önceden tanımlanmış öğelere göre bölgelere bölmenizi sağlar. kategorilerden en iyi şekilde yararlanabilirsiniz. Bu talimatlarında, Android uygulamalarında Resim Segmenter'ın nasıl kullanılacağı gösterilmektedir. Kod bu talimatlarda açıklanan örneği şurada 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 Android için Resim Segmenter uygulaması:
Örnekler, fiziksel bir Android cihazın kamerasını kullanarak canlı kamera feed'inde resim segmentasyonu yapabilir veya cihaz galerisinden video ekleyin. Bu uygulamaları ekip üyelerinizle birlikte konuşup veya mevcut bir uygulamada değişiklik yaparken bu uygulamalara başvurabilirsiniz. İlgili içeriği oluşturmak için kullanılan Resim Segmenter örnek kodu şurada barındırılır: GitHub'a gidin.
Aşağıdaki bölümlerde, Kategori maskesi içeren Resim Segmenter'ı uygulamasını indirin.
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:
- 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 ödeme yöntemini kullanacak şekilde yapılandırın,
Böylece, yalnızca Resim Segmenter örnek uygulamasına ait dosyaları bulursunuz:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/image_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ı:
- ImageSegmenterHelper.kt - Resim Segmenter görevini başlatır, modeli ve yetki verme işlemini yürütür seçim.
- CameraFragment.kt - Kamera için kullanıcı arayüzü ve kontrol kodunu sağlar.
- GalleryFragment.kt: Resim ve video seçimi için kullanıcı arayüzü ve kontrol kodunu sağlar dosyası olarak da kaydedebilir.
- OverlayView.kt - Segmentasyon sonuçlarını ele alır ve biçimlendirir.
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Resim Segmenter'ı kullanmak için proje kodlayın. Ş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
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 Resim Segmenter görevi bu görevi görebilir. Resim Segmenter için eğitilmiş mevcut modeller hakkında daha fazla bilgi için 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.
Resim Segmenter'de
örnek kod,
model, ImageSegmenterHelper.kt
sınıfını görüntülemek için setupImageSegmenter()
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, maske çıkışı dahil yapılandırma seçeneklerini kabul eder
bulunur. Görev yapılandırması hakkında daha fazla bilgi için bkz.
Yapılandırma seçenekleri.
Resim Segmenter görevi şu giriş verisi türlerini destekler: sabit resimler, video dosyaları ve canlı video akışları kullanılabilir. Koşu modunu belirtmelisiniz giriş veri türünüze karşılık gelen bir e-posta alırsınız. Sekmeyi seçin bu görevin nasıl oluşturulacağını görebilirsiniz.
Resim
ImageSegmenterOptions options = ImageSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setRunningMode(RunningMode.IMAGE) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .build(); imagesegmenter = ImageSegmenter.createFromOptions(context, options);
Video
ImageSegmenterOptions options = ImageSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setRunningMode(RunningMode.VIDEO) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .build(); imagesegmenter = ImageSegmenter.createFromOptions(context, options);
Canlı yayın
ImageSegmenterOptions options = ImageSegmenterOptions.builder() .setBaseOptions( BaseOptions.builder().setModelAssetPath("model.tflite").build()) .setRunningMode(RunningMode.LIVE_STREAM) .setOutputCategoryMask(true) .setOutputConfidenceMasks(false) .setResultListener((result, inputImage) -> { // Process the segmentation result here. }) .setErrorListener((result, inputImage) -> { // Process the segmentation errors here. }) .build() imagesegmenter = ImageSegmenter.createFromOptions(context, options)
Resim Segmenter örnek kod uygulaması, kullanıcının
farklı olabilir. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale
kullanım alanınıza uygun olmayabilir. Bu kodu
ImageSegmenterHelper
setupImageSegmenter()
işlevine göre sınıflandırılır.
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 |
---|---|---|---|
runningMode |
Görev için çalışma modunu ayarlar. Üç tane var
modlar: IMAGE: Tek resimli giriş modu. VIDEO: Bir videonun kodu çözülmüş karelerine yönelik mod. LIVE_STREAM: Giriş canlı yayını modu kameradan alınan veriler gibi. Bu modda, resultListener, sonuçları almak üzere bir dinleyici ayarlamak için çağrıldı eşzamansız olarak ayarlayabilirsiniz. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
outputCategoryMask |
True olarak ayarlanırsa çıkışta segmentasyon maskesi bulunur.
her piksel değeri kazanan kategoriyi gösteren bir uint8 resmi olarak
değer. |
{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
ve puan eşlemesini seçin. |
{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 |
resultListener |
Sonuç işleyiciyi segmentasyon sonuçlarını alacak şekilde ayarlar
Resim segmentleyici LIVE_STREAM modundayken eşzamansız olarak.
Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir |
Yok | Yok |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | Yok | Ayarlanmadı |
Verileri hazırlama
Resim Segmenter; resimler, video dosyaları ve canlı video yayınları ile çalışır. Görev yeniden boyutlandırma, döndürme ve değer de dahil olmak üzere veri girişi ön işlemesini gerçekleştirir. yapabilirsiniz.
Giriş resmini veya çerçevesini
com.google.mediapipe.framework.image.MPImage
nesnesini
Resim Segmenter.
Resim
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. Image mpImage = new BitmapImageBuilder(bitmap).build();
Video
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load a video file on the user's device using MediaMetadataRetriever // From the video’s metadata, load the METADATA_KEY_DURATION and // METADATA_KEY_VIDEO_FRAME_COUNT value. You’ll need them // to calculate the timestamp of each frame later. // Loop through the video and load each frame as a Bitmap object. // Convert the Android’s Bitmap object to a MediaPipe’s Image object. Image mpImage = new BitmapImageBuilder(frame).build();
Canlı yayın
import com.google.mediapipe.framework.image.MediaImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Create a CameraX’s ImageAnalysis to continuously receive frames // from the device’s camera. Configure it to output frames in RGBA_8888 // format to match with what is required by the model. // For each Android’s ImageProxy object received from the ImageAnalysis, // extract the encapsulated Android’s Image object and convert it to // a MediaPipe’s Image object. android.media.Image mediaImage = imageProxy.getImage() Image mpImage = new MediaImageBuilder(mediaImage).build();
Resim Segmenter örnek kodunda, veri hazırlığı
ImageSegmenterHelper
segmentLiveStreamFrame()
işlevine göre sınıflandırılır.
Görevi çalıştırma
Kullandığınız koşu moduna göre farklı bir segment
işlevini çağırıyorsunuz.
Resim Segmenter işlevi,
giriş resmini veya çerçevesini seçin.
Resim
ImageSegmenterResult segmenterResult = imagesegmenter.segment(image);
Video
// Calculate the timestamp in milliseconds of the current frame. long frame_timestamp_ms = 1000 * video_duration * frame_index / frame_count; // Run inference on the frame. ImageSegmenterResult segmenterResult = imagesegmenter.segmentForVideo(image, frameTimestampMs);
Canlı yayın
// Run inference on the frame. The segmentations results will be available via // the `resultListener` provided in the `ImageSegmenterOptions` when the image // segmenter was created. imagesegmenter.segmentAsync(image, frameTimestampMs);
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken şunları da yapmanız gerekir: Resim Segmenter görevine giriş çerçevesinin zaman damgasını sağlar.
- Resim veya video modunda çalışırken Resim Segmenter görevi giriş resmini işlemeyi tamamlayana kadar geçerli iş parçacığını engeller veya çerçeve. Kullanıcı arayüzünü engellememek için işlemeyi arka plan ileti dizisi.
- Canlı yayın modunda çalışırken Resim Segmenter görevi,
devam eder, ancak hemen geri döner. Sonucunu çağırır
algılama sonucuyla birlikte bir izleme sunucusuyla
giriş çerçevesine sahip. Resim Segmenter aracı olduğunda
segmentAsync
işlevi çağrılırsa görev başka bir kareyi işlemekle meşgulse görev, yeni giriş çerçevesini yoksayar.
Resim Segmenter örnek kodunda, segment
işlevleri
ImageSegmenterHelper.kt
dosyası olarak kaydedebilirsiniz.
Sonuçları işleme ve görüntüleme
Çıkarım çalıştırıldığında, Resim Segmenter görevi bir ImageSegmenterResult
döndürür.
segmentasyon görevinin sonuçlarını içeren nesne. The content of the
çıkış, yapılandırma sırasında ayarladığınız outputType
değerine bağlıdır.
Görevi yapılandırdınız.
Aşağıdaki bölümlerde, bu görevden elde edilen çıkış verilerine örnekler gösterilmektedir:
Kategori güveni
Aşağıdaki resimlerde, bir kategori için görev çıkışının görselleştirmesi gösterilmektedir
güven maskesi oluşturabilirsiniz. Güven maskesi çıkışı,
[0, 1]
Orijinal resim ve kategori güven maskesi çıktısı. Şuradaki kaynak resim: VOC 2012'nin Paskalası veri kümesiyle birlikte kullanılamaz.
Kategori değeri
Aşağıdaki resimlerde, bir kategori için görev çıkışının görselleştirmesi gösterilmektedir
ve değer maskeniz olsun. Kategori maskesi aralığı [0, 255]
ve her piksel değeri
model çıkışının kazanan kategori dizinini temsil eder. Kazanan kategori
indeks, modelin tanıyabileceği kategoriler arasında en yüksek puana sahiptir.
Orijinal resim ve kategori maskesi çıktısı. Şuradaki kaynak resim: VOC 2012'nin Paskalası veri kümesiyle birlikte kullanılamaz.