Web için ses sınıflandırma kılavuzu

MediaPipe Ses Sınıflandırıcı görevi, ses verileri üzerinde sınıflandırma gerçekleştirmenizi sağlar. Bu görevi eğitilmiş bir dizi kategoriden ses etkinliklerini tanımlamak için kullanabilirsiniz. Bu talimatlar, Düğüm ve web uygulamaları için Ses Sınıflandırıcı'nın nasıl kullanılacağını gösterir.

Demoyu izleyerek bu görevi çalışırken görebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.

Kod örneği

Ses Sınıflandırıcı için örnek kod, size referans olması açısından bu görevin JavaScript'te eksiksiz bir uygulamasını sunmaktadır. Bu kod, bu görevi test etmenize ve kendi ses sınıflandırma uygulamanızı oluşturmaya başlamanıza yardımcı olur. Ses Sınıflandırıcı örnek kodunu 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ı kurmanın temel adımları açıklanmaktadır. Projelerinizi özel olarak Ses Sınıflandırıcı'yı kullanmak için kodlayın. 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

Ses Sınıflandırıcı kodu, MediaPipe @mediapipe/tasks-audio 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 @mediapipe/tasks-audio

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:

<!-- Replace "my-cdn-service.com" with your CDN -->
<head>
  <script src="https://my-cdn-service.com/npm/@mediapipe/tasks-audio/audio_bundle.js"
    crossorigin="anonymous"></script>
</head>

Model

MediaPipe Ses Sınıflandırıcı görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Ses Sınıflandırıcı 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. Örneğin:

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

Görevi oluşturma

Çıkarımları çalıştırma görevi hazırlamak için Ses Sınıflandırıcı 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 Ses Sınıflandırıcı'yı ö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:

const audio = await FilesetResolver.forAudioTasks(
    "https://my-cdn-service.com/npm/@mediapipe/tasks-audio/wasm"
  );

const audioClassifier = await AudioClassifier.createFromOptions(audio, {
    baseOptions: {
      modelAssetPath:
        "https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite"
    }
  });

Ses Sınıflandırıcı örnek kod uygulaması, kullanıcının işleme modları arasında seçim yapmasına olanak tanır. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale getirir ve sizin kullanım alanınıza uygun olmayabilir. example code öğesinin runAudioClassification() ve runStreamingAudioClassification() işlevlerinde farklı modları görebilirsiniz.

Yapılandırma seçenekleri

Bu görev, Web ve JavaScript uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
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
maxResults İsteğe bağlı olarak döndürülecek en yüksek puanlı sınıflandırma sonuçlarının isteğe bağlı maksimum sayısını ayarlar. < 0 ise mevcut tüm sonuçlar döndürülür. Pozitif sayılar -1
scoreThreshold Model meta verilerinde belirtilen eşiği (varsa) geçersiz kılan tahmin puanı eşiğini ayarlar. Bu değerin altındaki sonuçlar reddedilir. [0,0, 1,0] Belirlenmedi
categoryAllowlist İsteğe bağlı olarak izin verilen kategori adları listesini ayarlar. Boş değilse kategori adı bu grupta yer almayan 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ı hataya neden olur. Herhangi bir dize Belirlenmedi
categoryDenylist İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede yer alan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek categoryAllowlist ile birlikte kullanılamaz ve her iki sonucun da kullanılması hataya neden olur. Herhangi bir dize Belirlenmedi

Verileri hazırlama

Ses Sınıflandırıcı, ses klipleriyle ve ses akışlarıyla çalışır. Ayrıca, ana makine tarayıcısının desteklediği herhangi bir biçimdeki ses dosyalarıyla da çalışabilir. Görev; yeniden örnekleme, arabelleğe alma ve çerçeveleme dahil, veri girişlerinin ön işlemesini üstlenir.

Görevi çalıştırma

Ses Sınıflandırıcı, ses klibi dosyaları veya ses akışları için çıkarımlar yapmak üzere classify() yöntemini kullanır. Audio Classifier API, giriş sesinde tanınan ses etkinlikleri için olası kategorileri döndürür.

Ses Sınıflandırıcı classify() yöntemine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı arayüzü iş parçacığını engeller. Cihazın mikrofonundan gelen sesi sınıflandırırsanız her sınıflandırma ana iş parçacığını engeller. Web çalışanlarını, classify() öğesini başka bir iş parçacığında çalıştıracak şekilde uygulayarak bunu önleyebilirsiniz.

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

Ses klipleri

// Create audio buffer
const sample = await response.arrayBuffer();
const audioBuffer = await audioCtx.decodeAudioData(sample);

// Use AudioClassifier to run classification
const results = audioClassifier.classify(
  audioBuffer.getChannelData(0),
  audioBuffer.sampleRate
);
  

Ses akışı

stream = await navigator.mediaDevices.getUserMedia(constraints);
audioCtx = new AudioContext({ sampleRate: 16000 });

const source = audioCtx.createMediaStreamSource(stream);
const scriptNode = audioCtx.createScriptProcessor(16384, 1, 1);

scriptNode.onaudioprocess = function (audioProcessingEvent) {
  const inputBuffer = audioProcessingEvent.inputBuffer;
  let inputData = inputBuffer.getChannelData(0);

  // Classify the audio
  const result = audioClassifier.classify(inputData);
  const categories = result[0].classifications[0].categories;
};
  

Bir Ses Sınıflandırıcı 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ırmasını tamamladıktan sonra Ses Sınıflandırıcı görevi, giriş sesindeki nesneler için olası kategorilerin listesini içeren bir AudioClassifierResult nesnesi döndürür.

AudioClassifierResult:
  Timestamp in microseconds: 100
  ClassificationResult #0:
    Timestamp in microseconds: 100  
    Classifications #0 (single classification head):
      head index: 0
      category #0:
        category name: "Speech"
        score: 0.6
        index: 0
      category #1:
        category name: "Music"
        score: 0.2
        index: 1

Ses 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.