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 önceden tanımlanmış kategorilere göre görüntüleri bölgelere ayırmanıza olanak tanır. Bu talimatlarda, Node ve web uygulamaları için Image Segmenter'ı nasıl kullanacağınız 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

Image Segmenter'ın örnek kodu, bu görevin JavaScript'te eksiksiz bir uygulamasını referans olarak sunar. Bu kod, bu görevi test etmenize ve kendi görüntü segmentasyonu uygulamanızı oluşturmaya başlamanıza yardımcı olur. Görüntü Segmentleyici örneğini yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.

Kurulum

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

JavaScript paketleri

Image Segmenter kodu, MediaPipe @mediapipe/tasks-vision NPM paketi üzerinden kullanılabilir. Bu kitaplıkları, platform Kurulum Kılavuzu'nda verilen bağlantılardan bulup indirebilirsiniz.

Aşağıdaki komutu kullanarak yerel hazırlama 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 üzerinden 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.mjs"
    crossorigin="anonymous"></script>
</head>

Model

MediaPipe Image Segmenter görevi için bu görevle uyumlu, eğitilmiş bir model gerekir. Image Segmenter için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi edinmek için görev genel bakışının Modeller bölümüne bakın.

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

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

Görevi oluşturma

Görevi çıkarım çalıştırmaya hazırlamak için Image Segmenter createFrom...() işlevlerinden birini kullanın. createFromModelPath() işlevini, eğitilmiş model dosyasına ait göreli veya mutlak bir yolla kullanın. Modeliniz zaten belleğe yüklendiyse createFromModelBuffer() yöntemini kullanabilirsiniz.

Aşağıdaki kod örneğinde, görevi ayarlamak için createFromOptions() işlevinin nasıl kullanılacağı gösterilmektedir. createFromOptions işlevi, yapılandırma seçenekleriyle Görüntü Segmentleyici'yi özelleştirmenize olanak tanır. Görev yapılandırması hakkında daha fazla bilgi 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();

Görüntü Segmenter görevi oluşturmanın daha eksiksiz bir uygulaması için kod örneğine bakın.

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 görüntüsü olarak bir segmentasyon maskesi içerir. Burada her piksel değeri, kazanan kategori değerini gösterir. {True, False} False
outputConfidenceMasks True olarak ayarlanırsa çıkış, kayan noktalı değer resmi olarak bir segmentasyon maskesi içerir. Burada her kayan noktalı değer, kategorinin güven puanı haritasını temsil eder. {True, False} True
displayNamesLocale Görev modelinin meta verilerinde varsa görünen adlar için kullanılacak etiketlerin dilini ayarlar. İngilizce için varsayılan değer en'dir. TensorFlow Lite Metadata Writer API'yi kullanarak özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz. Yer kodu en
resultListener Görüntü segmenter LIVE_STREAM modundayken segmentasyon sonuçlarını eşzamansız olarak almak için sonuç dinleyicisini ayarlar. Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. Yok Yok

Verileri hazırlama

Image Segmenter, ana makine tarayıcısı tarafından desteklenen herhangi bir biçimdeki 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şlemesini de gerçekleştirir.

Image Segmenter 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. Bir cihazın kamerasından alınan video karelerindeki nesneleri 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ıracak web işçileri uygulayarak bunu önleyebilirsiniz.

Görevi çalıştırma

Image Segmenter, çıkarımları tetiklemek için görüntü modunda segment() yöntemini, video modunda ise segmentForVideo() yöntemini kullanır. Image Segmenter, 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();
  });
}

Bir Image Segmenter görevi çalıştırmanın daha eksiksiz bir uygulaması için örneğe bakın.

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

Çıkarım çalıştırıldığında Image Segmenter görevi, segment görüntü verilerini bir geri çağırma işlevine döndürür. Çıkışı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 ilişkin örnekler gösterilmektedir:

Kategori güvenilirliği

Aşağıdaki görsellerde, kategori güven düzeyi maskesi için görev çıkışının görselleştirilmesi gösterilmektedir. Güven maskesi çıkışı, [0, 1] arasında kayan noktalı 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 belirten resim maskesi. Resmin ana hattının sol yarısı yakalanıyor ancak sağ yarısı yakalanmıyor

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

Kategori değeri

Aşağıdaki görseller, kategori değeri maskesi için görev çıkışının görselleştirilmesini göstermektedir. Kategori maskesi aralığı [0, 255] olup her piksel değeri, model çıktısının kazanan kategori indeksini temsil eder. Kazanan kategori indeksi, modelin tanıyabileceği kategoriler arasında en yüksek puana sahiptir.

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 belirten resim maskesi. Üç kızın ve atın şekli doğru şekilde maskelenmiş

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

Image Segmenter örnek kodu, görevden döndürülen segmentasyon sonuçlarının nasıl görüntüleneceğini gösterir. Ayrıntılar için örneğe bakın.