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

MediaPipe Etkileşimli Görüntü 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, Düğüm ve web uygulamaları için Etkileşimli Resim Segmenti Aracı'nın nasıl kullanılacağını gösterir. 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 Segmenter örnek kodu, size referans olması açısından bu görevin JavaScript'te eksiksiz bir şekilde uygulanmasını sağlar. Bu kod, bu görevi test etmenize ve kendi etkileşimli resim segmentasyon uygulamanızı oluşturmaya başlamanıza yardımcı olur. Etkileşimli Resim Segmenter örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz. Bu örnekle ilgili kodu GitHub'da da inceleyebilirsiniz.

Kurulum

Bu bölümde, geliştirme ortamınızı kurmanın önemli adımları ve projelerinizi özel olarak Etkileşimli Resim Segmenter'ı kullanacak şekilde kodlamak 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 Web için kurulum kılavuzuna bakın.

JavaScript paketleri

Etkileşimli Resim Segmenter kodu, MediaPipe @mediapipe/tasks-vision NPM paketi aracılığıyla kullanılabilir. Bu kitaplıkları, platform Kurulum rehberinde sağlanan bağlantılardan bulup indirebilirsiniz.

Aşağıdaki komutu kullanarak gerekli paketleri yerel hazırlık için aşağıdaki kodla yükleyebilirsiniz:

npm install --save @mediapipe/tasks-vision

Görev kodunu bir içerik yayınlama ağı (CDN) hizmeti aracılığıyla içe aktarmak istiyorsanız HTML dosyanızdaki etikete aşağıdaki kodu ekleyin:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

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.

Bir model seçip indirin ve ardından proje dizininizde depolayın:

<dev-project-root>/app/shared/models/

Görevi oluşturma

Görevi çıkarım yapmaya hazırlamak için Etkileşimli Görüntü Segmenter createFrom...() işlevlerinden birini kullanın. createFromModelPath() işlevini, eğitilen model dosyasına giden göreli veya mutlak bir yolla kullanın. Modeliniz belleğe zaten yüklenmişse createFromModelBuffer() yöntemini kullanabilirsiniz.

Aşağıdaki kod örneği, görevi ayarlamak için createFromOptions() işlevinin kullanımını gösterir. createFromOptions işlevi, yapılandırma seçenekleriyle Etkileşimli Resim Segmenter'ı özelleştirmenizi sağlar. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri bölümüne bakın.

Aşağıdaki kod, görevin özel seçeneklerle nasıl oluşturulacağını ve yapılandırılacağını gösterir:

async function createSegmenter() {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
  );

  interactiveSegmenter = await InteractiveSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-tasks/interactive_segmenter/ptm_512_hdt_ptm_woid.tflite"
    },
  });
}
createSegmenter();

Yapılandırma seçenekleri

Bu görev, Web 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

Verileri hazırlama

Etkileşimli Resim Segmenter, resimlerdeki nesneleri ana makine tarayıcısının desteklediği herhangi bir biçimde segmentlere ayırabilir. Görev; yeniden boyutlandırma, döndürme ve değer normalleştirmesi dahil olmak üzere, veri girişi ön işlemesini de yönetir.

Etkileşimli Resim Segmenteri segment() ve segmentForVideo() yöntemlerine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı arayüzü iş parçacığını engeller. Video karelerindeki nesneleri cihazın kamerasından segmentlere ayırırsanız her segmentasyon görevi ana iş parçacığını engeller. segment() ve segmentForVideo() öğelerini başka bir iş parçacığında çalıştırmak için web çalışanlarını uygulayarak bunu önleyebilirsiniz.

Görevi çalıştırma

Etkileşimli Resim Segmenter, çıkarımları tetiklemek için segment() yöntemini kullanır. Etkileşimli Resim Segmenteri, algılanan segmentleri, görev için bir çıkarımı çalıştırırken ayarladığınız bir geri çağırma işlevine görüntü verileri olarak döndürür.

Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüleceğini gösterir:

const image = document.getElementById("image") as HTMLImageElement;
interactiveSegmenter.segment(
  image,
  {
    keypoint: {
      x: event.offsetX / event.target.width,
      y: event.offsetY / event.target.height
    }
  },
  callback);

Etkileşimli Resim Segmenter görevi çalıştırmayla ilgili daha kapsamlı bir uygulama için kod örneğine bakın.

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

Çıkarım çalıştırıldıktan sonra, Etkileşimli Resim Segmenter görevi segment resim verilerini bir geri çağırma işlevine döndürür. Çıkışın içeriği görüntü verileridir ve görevi yapılandırırken ayarladığınız ayara bağlı olarak bir kategori maskesi, güven maskeleri veya her ikisini de 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.

Etkileşimli Görüntü Segmenter örnek kodu, görevden döndürülen sınıflandırma sonuçlarının nasıl görüntüleneceğini gösterir. Ayrıntılar için kod örneğine bakın.