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.