Web için görüntü sınıflandırma kılavuzu

MediaPipe Görüntü Sınıflandırıcı görevi, görüntüler üzerinde sınıflandırma yapmanıza olanak tanır. Bu görevi, eğitim sırasında tanımlanan bir dizi kategori arasından bir resmin neyi temsil ettiğini belirlemek için kullanabilirsiniz. Bu talimatlarda, Düğüm ve web uygulamaları için Resim Sınıflandırıcı'nın nasıl kullanılacağı gösterilmektedir.

Demoyu görüntüleyerek bu görevin nasıl yerine getirildiğini öğrenebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış bölümünü inceleyin.

Kod örneği

Resim Sınıflandırıcı örnek kodu, referans olması için bu görevin JavaScript'te eksiksiz bir şekilde uygulanmasını sağlar. Bu kod, bu görevi test etmenize ve kendi görüntü sınıflandırma uygulamanızı oluşturmaya başlamanıza yardımcı olur. Yalnızca web tarayıcınızı kullanarak Resim Sınıflandırıcı örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.

Kurulum

Bu bölümde, geliştirme ortamınızı oluşturmaya yönelik temel adımlar ve özellikle Görüntü Sınıflandırıcı'yı kullanmak için proje kodlama açıklanmaktadır. Platform sürümü gereksinimleri de dahil olmak üzere MediaPipe görevlerini kullanmak üzere geliştirme ortamınızı ayarlama hakkında genel bilgiler için Web için kurulum kılavuzuna bakın.

JavaScript paketleri

Resim Sınıflandırıcı kodu, MediaPipe @mediapipe/tasks-vision NPM paketi aracılığıyla kullanılabilir. Bu kitaplıkları, platform Kurulum kılavuzunda sağlanan bağlantılardan bulup indirebilirsiniz.

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

npm install @mediapipe/tasks-vision

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

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Model

MediaPipe Görüntü Sınıflandırıcı görevi, bu görevle uyumlu olan eğitilmiş bir model gerektirir. Resim Sınıflandırıcı için eğitilmiş modeller hakkında daha fazla bilgi için göreve genel bakış Modeller bölümüne bakın.

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

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

Görevi oluşturma

Çıkarımları çalıştırmak üzere görevi hazırlamak için createFrom...() Resim Sınıflandırıcı işlevlerinden birini kullanın. createFromModelPath() işlevini, eğitilen model dosyasının göreli veya mutlak yoluyla kullanın. Modeliniz belleğe zaten yüklüyse createFromModelBuffer() yöntemini kullanabilirsiniz.

Aşağıdaki kod örneğinde, görevi ayarlamak için createFromOptions() işlevinin nasıl kullanıldığı gösterilmektedir. createFromOptions işlevi, Resim Sınıflandırıcı'yı yapılandırma seçenekleriyle özelleştirmenize olanak tanır. 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 createImageClassifier {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
  );
  imageClassifier = await ImageClassifier.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite`
    },
  });
}

Yapılandırma seçenekleri

Bu görev, web 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. İki mod vardır:

IMAGE: Tek resimli girişlerin modu.

VİDEO: Bir videonun kodu çözülmüş kareleri veya giriş verilerinin canlı akışı (ör. kameradan) için kullanılan mod.
{IMAGE, VIDEO} IMAGE
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 dil en şeklindedir. TensorFlow Lite Metadata Writer API'yi kullanarak özel modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz. Yerel ayar kodu en
maxResults Döndürülecek isteğe bağlı maksimum puanlı sınıflandırma sonucu sayısını ayarlar. 0'dan küçükse tüm mevcut sonuçlar döndürülür. Pozitif sayılar -1
scoreThreshold Model meta verilerinde (varsa) belirtilen eşiği geçersiz kılan tahmin puanı eşiğini belirler. Bu değerin altındaki sonuçlar reddedilir. Herhangi bir kayan nokta Belirlenmedi
categoryAllowlist İzin verilen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede bulunmayan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek, categoryDenylist ile birlikte kullanılamaz ve her iki sonucun da kullanılmasında hatayla sonuçlanır. Tüm dizeler Belirlenmedi
categoryDenylist İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede bulunan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek categoryAllowlist ile karşılıklı olarak hariç tutulup her iki sonucun da hatalı olarak kullanılmasıdır. Tüm dizeler Belirlenmedi
resultListener Sonuç işleyiciyi, Görüntü Sınıflandırıcı canlı yayın modundayken sınıflandırma sonuçlarını eşzamansız olarak alacak şekilde ayarlar. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir Yok Belirlenmedi

Verileri hazırlama

Resim Sınıflandırıcı, resimlerdeki nesneleri ana makine tarayıcısı tarafından desteklenen herhangi bir biçimde sınıflandırabilir. Görev ayrıca yeniden boyutlandırma, döndürme ve değer normalleştirmesi dahil veri girişi ön işlemesini de gerçekleştirir.

Görüntü Sınıflandırıcı classify() ve classifyForVideo() 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 sınıflandırırsanız her sınıflandırma ana iş parçacığını engeller. Web çalışanlarını başka bir iş parçacığında classify() ve classifyForVideo() çalıştıracak şekilde uygulayarak bunu önleyebilirsiniz.

Görevi çalıştırma

Resim Sınıflandırıcı, çıkarımları tetiklemek için görüntü moduyla classify() yöntemini ve video moduyla classifyForVideo() yöntemini kullanır. Image Classifier API, giriş görüntüsündeki nesneler için olası kategorileri döndürür.

Aşağıdaki kod, işlemin görev modeliyle nasıl yürütüldüğünü gösterir:

Resim

const image = document.getElementById("image") as HTMLImageElement;
const imageClassifierResult = imageClassifier.classify(image);

Video

const video = document.getElementById("video");
await imageClassifier.setOptions({ runningMode: "VIDEO" });

const timestamp = performance.now();
const classificationResult = await imageClassifier.classifyForVideo(
    video,
    timestamp
  );

Resim Sınıflandırıcı 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

Çıkarım çalıştırıldıktan sonra Görüntü Sınıflandırıcı görevi, giriş görüntüsü veya çerçevesindeki nesneler için olası kategorilerin listesini içeren bir ImageClassifierResult nesnesi döndürür.

Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:

ImageClassifierResult:
 Classifications #0 (single classification head):
  head index: 0
  category #0:
   category name: "/m/01bwb9"
   display name: "Passer domesticus"
   score: 0.91406
   index: 671
  category #1:
   category name: "/m/01bwbt"
   display name: "Passer montanus"
   score: 0.00391
   index: 670

Bu sonuç, aşağıdaki cihazda Bird Classifier çalıştırılarak elde edilmiştir:

Görüntü Sınıflandırıcı ö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.