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 yapmanıza olanak tanır. Şunları yapabilirsiniz: bu görevi, eğitilmiş bir grup kategoriden ses etkinliklerini belirlemek için kullanın. Bu talimatlarda, Düğüm ve web uygulamaları için Ses Sınıflandırıcı'nın nasıl kullanılacağı gösterilmektedir.

Bu görevi, demo. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.

Kod örneği

Ses Sınıflandırıcı için örnek kod, bu görevi aşağıda bulabilirsiniz. Bu kod, görevi test etmenize Kendi ses sınıflandırma uygulamanızı geliştirmeye başlayın. Bu projeleri görüntüleyebilir, çalıştırabilir, değerini değiştirin ve Ses Sınıflandırıcı örnek kodu yalnızca web tarayıcınızı kullanarak.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Ses Sınıflandırıcı'yı kullanmak için özel olarak kod projeleri. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı daha fazla bilgi için Web için kurulum kılavuzu.

JavaScript paketleri

Ses Sınıflandırıcı kodu MediaPipe @mediapipe/tasks-audio üzerinden kullanılabilir NPM paketi. Şunları yapabilirsiniz: bu kitaplıkları, platformda sağlanan bağlantılardan bulup indirin Kurulum kılavuzu.

Yerel hazırlık için gerekli paketleri aşağıdaki kodla yükleyebilirsiniz kullanabilirsiniz:

npm install @mediapipe/tasks-audio

Görev kodunu içerik yayınlama ağı (CDN) aracılığıyla içe aktarmak istiyorsanız hizmetini kullanmak için, 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örevi görebilir. Ses Sınıflandırıcı için eğitilmiş mevcut modeller hakkında daha fazla bilgi için bkz. göreve genel bakış Modeller bölümü.

Bir model seçip indirin ve bu modeli proje dizininizde depolayın. örneğin:

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

Görevi oluşturma

Şu işlemler için Ses Sınıflandırıcı createFrom...() işlevlerinden birini kullanın: çıkarımları yapmaya hazır hale getirebilirsiniz. createFromModelPath() kullanın işlevi, eğitilen model dosyasına giden göreli veya mutlak bir yolla Modeliniz belleğe zaten yüklenmişse aşağıdakileri kullanabilirsiniz: createFromModelBuffer() yöntemini çağırın.

Aşağıdaki kod örneğinde, createFromOptions() işlevinin görevi ayarlayın. createFromOptions işlevi, Yapılandırma seçenekleri olan Ses Sınıflandırıcı. Yapılandırma hakkında daha fazla bilgi için Yapılandırma seçenekleri bölümüne bakın.

Aşağıdaki kod, görevin özel seçenekler:

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 farklı olabilir. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale kullanım alanınıza uygun olmayabilir. Farklı modları görebilirsiniz. runAudioClassification() ve runStreamingAudioClassification() içinde işlevleri example code.

Yapılandırma seçenekleri

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

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
displayNamesLocale görev modelinin meta verileri (varsa). Şunun için varsayılan: en İngilizce. Özel bir modelin meta verilerine yerelleştirilmiş etiketler ekleyebilirsiniz TensorFlow Lite Metadata Writer API'yi kullanarak Yerel ayar kodu en
maxResults İsteğe bağlı maksimum puanlı sınıflandırma sonucu sayısını şu değere ayarlar: dön. < 0 ise tüm mevcut sonuçlar döndürülür. Pozitif sayılar -1
scoreThreshold Şu kriterde sağlanan tahmini geçersiz kılan bir tahmin puanı eşiğini belirler: model meta verileri (varsa). 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 bulunmayan sınıflandırma sonuçları filtrelendi. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek categoryDenylist ile birlikte kullanılamaz ve her ikisi de hataya neden olur. Tüm dizeler Ayarlanmadı
categoryDenylist İzin verilmeyen kategori adlarının isteğe bağlı listesini ayarlar. Eğer Boş olmayan, kategori adı bu kümede bulunan sınıflandırma sonuçları filtrelenir çıkar. Yinelenen veya bilinmeyen kategori adları yoksayılır. Bu seçenek birlikte hariç tutmanın yanı sıra her iki sonucun da hatalı olarak kullanılmasıdır.categoryAllowlist Tüm dizeler Ayarlanmadı

Verileri hazırlama

Ses Sınıflandırıcı, ses klipleri ve ses akışlarıyla çalışır ve seslerle çalışabilir tarafından desteklenen herhangi bir biçimde olması gerekir. Görev, verileri işler giriş ön işlemesi (yeniden örnekleme, arabelleğe alma ve çerçeveleme dahil).

Görevi çalıştırma

Ses Sınıflandırıcı, ses klibine ilişkin çıkarımları çalıştırmak için classify() yöntemini kullanır dosyalar veya ses akışları olabilir. Audio Classifier API, mümkün olan giriş sesinde tanınan sesli etkinliklerin kategorileri.

classify() Ses Sınıflandırıcı yöntemine yapılan çağrılar eşzamanlı olarak çalışır ve kullanıcı arayüzü iş parçacığı. Bir cihazın mikrofonundan gelen sesi sınıflandırırsanız her sınıflandırma ana iş parçacığını engeller. Bu durumu önlemek için başka bir iş parçacığında classify() çalıştırmak için web çalışanları uygulanıyor.

Aşağıdaki kod, görev modeliyle işlemin 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 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örevi çalıştırmayla ilgili daha kapsamlı bilgi için bkz. kod örneği hakkında daha fazla bilgi edinin.

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 bir Olası kategorilerin listesini içeren AudioClassifierResult nesnesi sesteki nesneler için kullanılabilir.

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, sınıflandırmanın nasıl görüntüleneceğini gösterir. daha fazla bilgi edinmek için kod örneği inceleyebilirsiniz.