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

MediaPipe Audio Classifier görevi, ses verilerinde sınıflandırma yapmanıza olanak tanır. Bu görevi, eğitilmiş bir dizi kategorideki sesli etkinlikleri belirlemek için kullanabilirsiniz. Bu talimatlarda, Node ve web uygulamaları için Audio Classifier'ın nasıl kullanılacağı açıklanmaktadır.

Bu görevin nasıl çalıştığını görmek için demoyu inceleyebilirsiniz. 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

Audio Classifier'ın örnek kodu, bu görevin JavaScript'te eksiksiz bir uygulamasını referansınız için sağlar. Bu kod, 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ı ö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ı kurma ve kod projelerinizi özellikle Audio Classifier'ı kullanacak şekilde ayarlama ile 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

Audio Classifier kodu, MediaPipe @mediapipe/tasks-audio 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 @mediapipe/tasks-audio

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:

<!-- 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ısı görevi için bu görevle uyumlu, eğitilmiş bir model gerekir. Ses sınıflandırıcı için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi edinmek istiyorsanız görev genel bakışındaki Modeller bölümüne bakın.

Bir modeli seçip indirin ve ardından proje dizininizde saklayın. Örneğin:

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

Görevi oluşturma

Görevleri çıkarım çalıştırmaya hazırlamak için createFrom...()Ses Sınıflandırıcı 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 Ses Sınıflandırıcı'yı özelleştirmenize olanak tanır. Yapılandırma seçenekleri 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:

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"
    }
  });

Tam örneği example code adresinde 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 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
maxResults Döndürülecek isteğe bağlı maksimum en yüksek puanlı sınıflandırma sonucu sayısını ayarlar. Sayı < 0 ise mevcut tüm sonuçlar döndürülür. Pozitif sayılar -1
scoreThreshold Model meta verilerinde (varsa) sağlanan tahmini puan eşiğini geçersiz kılan eşiği ayarlar. Bu değerin altındaki sonuçlar reddedilir. [0,0, 1,0] Ayarlanmadı
categoryAllowlist İzin verilen kategori adlarının isteğe bağlı listesini ayarlar. Boş değilse kategori adı bu kümede olmayan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yok sayılır. Bu seçenek, categoryDenylist ile birlikte kullanılamaz ve ikisinin birlikte kullanılması hataya neden olur. Tüm dizeler Ayarlanmadı
categoryDenylist İzin verilmeyen isteğe bağlı kategori adları listesini ayarlar. Boş değilse kategori adı bu kümede olan sınıflandırma sonuçları filtrelenir. Yinelenen veya bilinmeyen kategori adları yok sayılır. Bu seçenek categoryAllowlist ile birlikte kullanılamaz ve ikisinin birlikte kullanılması hataya neden olur. Tüm dizeler Ayarlanmadı

Verileri hazırlama

Ses Sınıflandırıcı, ses klipleri ve ses akışlarıyla çalışır. Ayrıca, ana makine tarayıcısı tarafından desteklenen herhangi bir formattaki ses dosyalarıyla da çalışabilir. Görev, yeniden örnekleme, arabelleğe alma ve çerçeveleme dahil olmak üzere veri girişi ön işlemesini gerçekleştirir.

Görevi çalıştırma

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

Audio Classifier classify() yöntemine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı arayüzü iş parçacığını engeller. Bir cihazın mikrofonundan gelen sesi sınıflandırırsanız her sınıflandırma ana iş parçacığını engeller. classify() öğesini başka bir iş parçacığında çalıştıracak web işçileri uygulayarak bunu önleyebilirsiniz.

Aşağıdaki kodda, görevi işleme modelini kullanarak işlemenin nasıl yürütüleceği gösterilmektedir:

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 yayını

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;
};
  

Ses sınıflandırıcı görevini çalıştırmanın daha eksiksiz bir uygulaması için örneğe bakın.

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

Bir çıkarım çalıştırmasını tamamladığınızda 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

Audio Classifier ö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 örneğe bakın.