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.