Web için görüntü segmentasyon kılavuzu

MediaPipe Image Segmenter görevi, arka plan bulanıklaştırma gibi görsel efektler uygulamak için resimleri önceden tanımlanmış kategorilere göre bölgelere ayırmanıza olanak tanır. Bu talimatlarda, Node ve web uygulamaları için resim segmentleyicinin nasıl kullanılacağı gösterilmektedir. 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

Resim Segmenteri'nin örnek kodunda, bu görevin JavaScript'te tam bir uygulaması referans olarak sunulmaktadır. Bu kod, bu görevi test etmenize ve kendi görüntü segmentasyon uygulamanızı oluşturmaya başlamanıza yardımcı olur. Görüntü segmentasyon örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz. Bu örneğin kodunu GitHub'da da inceleyebilirsiniz.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Resim Segmentleyici'yi kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü şartları da dahil olmak üzere, MediaPipe görevlerini kullanmak için geliştirme ortamınızı ayarlama hakkında genel bilgi için Web için kurulum kılavuzu başlıklı makaleyi inceleyin.

JavaScript paketleri

Resim segmentleyici kodu, MediaPipe @mediapipe/tasks-vision NPM paketi aracılığıyla kullanılabilir. Bu kitaplıkları, platformun Kurulum kılavuzundaki bağlantılardan bulabilir ve indirebilirsiniz.

Aşağıdaki komutu kullanarak yerel hazırlık için gerekli paketleri 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 etiketine 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 Görüntü Segmentleyici görevi, bu görevle uyumlu bir eğitimli model gerektirir. 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 bakın.

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

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

Görevi oluşturun

Görevi çıkarım çalıştırmaya hazırlamak için Görüntü Segmentörü createFrom...() işlevlerinden birini kullanın. Eğitilmiş model dosyasının göreli veya mutlak yoluyla createFromModelPath() işlevini kullanın. Modeliniz zaten belleğe yüklenmişse createFromModelBuffer() yöntemini kullanabilirsiniz.

Aşağıdaki kod örneğinde, görevi ayarlamak için createFromOptions() işlevinin kullanımı gösterilmektedir. createFromOptions işlevi, resim segmentörünü yapılandırma seçenekleriyle özelleştirmenize olanak tanır. Görev yapılandırması hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.

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

runningMode = "IMAGE";

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

  imageSegmenter = await ImageSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421",
    },
    outputCategoryMask: true,
    outputConfidenceMasks: false
    runningMode: runningMode
  });
}
createImageSegmenter();

Resim segmentleyici görevi oluşturmanın daha kapsamlı bir uygulaması için kod örneğine bakın.

Yapılandırma seçenekleri

Bu görevde, web 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 kazanan kategori değerini gösterdiği uint8 görüntü olarak bir segmentasyon maskesi içerir. {True, False} False
outputConfidenceMasks True olarak ayarlanırsa çıkış, her kayan nokta değerinin kategorinin güven puanı haritasını 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
resultListener Sonuç dinleyiciyi, resim segmentörü LIVE_STREAM modundayken segmentasyon sonuçlarını asenkron olarak alacak şekilde ayarlar. Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. Yok Yok

Verileri hazırlama

Resim segmentleyici, ana tarayıcı tarafından desteklenen tüm biçimlerdeki resimlerdeki nesneleri segmentlere ayırabilir. Görev, yeniden boyutlandırma, döndürme ve değer normalleştirme dahil olmak üzere veri girişi ön işleme işlemlerini de yönetir.

Resim Segmentleyici segment() ve segmentForVideo() yöntemlerine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı arayüzü ileti dizisini engeller. Bir cihazın kamerasından video karelerindeki nesneleri segmentlere ayırırsanız her segmentasyon görevi ana iş parçacığını engeller. segment() ve segmentForVideo()'yi başka bir iş parçacığında çalıştıracak web işçileri uygulayarak bunu önleyebilirsiniz.

Görevi çalıştırma

Resim segmentleyici, çıkarım tetiklemek için resim modunda segment() yöntemini ve video modunda segmentForVideo() yöntemini kullanır. Görüntü Segmentör, algılanan segmentleri görev için çı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 kodda, görev modeliyle işlemenin nasıl yürütüleceği gösterilmektedir:

Resim

const image = document.getElementById("image") as HTMLImageElement;
imageSegmenter.segment(image, callback);

Video

async function renderLoop(): void {
  const video = document.getElementById("video");
  let startTimeMs = performance.now();

  imageSegmenter.segmentForVideo(video, startTimeMs, callbackForVideo);

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Resim segmentleyici görevi çalıştırmanın daha kapsamlı bir uygulaması için kod örneğine bakın.

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

Görüntü segmentörü görevi, çıkarım çalıştırıldığında bir geri çağırma işlevine segment görüntü verilerini döndürür. Çıktının içeriği, görevi yapılandırırken belirlediğiniz outputType değerine bağlıdır.

Aşağıdaki bölümlerde, bu görevden elde edilen çıkış verilerine örnekler verilmiştir:

Kategori güveni

Aşağıdaki resimlerde, bir kategori güven maskesi için görev çıktısının görselleştirmesi gösterilmektedir. Güven maskesi çıkışı, [0, 1] arasında kayan değerler içerir.

Ata binen iki kız ve atın yanında yürüyen bir kız Önceki fotoğraftaki kızların ve atın şeklini ana hatlarıyla gösteren resim maskesi. Resmin sol yarısının dış çizgisi yakalanmış ancak sağ yarısı yakalanmamış

Orijinal resim ve kategori güven maskesi çıkışı. Pascal VOC 2012 veri kümesinden kaynak resim.

Kategori değeri

Aşağıdaki resimlerde, bir kategori değeri maskesi için görev çıktısının görselleştirmesi gösterilmektedir. Kategori maskesi aralığı [0, 255]'tür ve her piksel değeri, model çıktısının kazanan kategori dizinidir. Kazanan kategori dizini, modelin tanıyabildiği kategoriler arasında en yüksek puana sahip olan kategoridir.

Ata binen iki kız ve atın yanında yürüyen bir kız Önceki resimdeki kızların ve atın şeklini ana hatlarıyla gösteren resim maskesi. Üç kızın ve atın şekli doğru şekilde maskelenmelidir.

Orijinal resim ve kategori maskesi çıkışı. Pascal VOC 2012 veri kümesinden kaynak resim.

Resim Segmentleyici örnek kodunda, görevden döndürülen segmentasyon sonuçlarının nasıl görüntüleneceği gösterilmektedir. Ayrıntılar için kod örneğine bakın.