Panduan klasifikasi audio untuk web

Tugas Pengklasifikasi Audio MediaPipe memungkinkan Anda melakukan klasifikasi pada data audio. Anda dapat gunakan tugas ini untuk mengidentifikasi peristiwa deteksi suara dari serangkaian kategori terlatih. Ini menunjukkan cara menggunakan Pengklasifikasi Audio untuk Node dan aplikasi web.

Anda dapat melihat cara kerja tugas ini dengan melihat demo. Untuk mengetahui informasi selengkapnya terkait kemampuan, model, dan opsi konfigurasi. tugas ini, lihat Ringkasan.

Contoh kode

Kode contoh untuk Pengklasifikasi Audio menyediakan implementasi lengkap dari tugas di JavaScript untuk referensi Anda. Kode ini membantu Anda menguji tugas ini dan mulai membangun aplikasi klasifikasi audio Anda sendiri. Anda dapat melihat, menjalankan, dan edit kode contoh Pengklasifikasi Audio hanya dengan menggunakan {i>browser<i} web.

Penyiapan

Bagian ini menjelaskan langkah-langkah utama untuk menyiapkan lingkungan pengembangan dan membuat kode project secara khusus untuk menggunakan Pengklasifikasi Audio. Untuk informasi umum tentang menyiapkan lingkungan pengembangan untuk menggunakan tugas MediaPipe, termasuk persyaratan versi platform, lihat Panduan penyiapan untuk web.

Paket JavaScript

Kode Pengklasifikasi Audio tersedia melalui MediaPipe @mediapipe/tasks-audio NPM. Anda dapat menemukan dan mendownload library ini dari link yang disediakan dalam platform Panduan penyiapan.

Anda dapat menginstal paket yang diperlukan dengan kode berikut untuk staging lokal menggunakan perintah berikut:

npm install @mediapipe/tasks-audio

Jika Anda ingin mengimpor kode tugas melalui jaringan penayangan konten (CDN) tambahan, tambahkan kode berikut dalam tag di file HTML Anda:

<!-- 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

Tugas Pengklasifikasi Audio MediaPipe memerlukan model terlatih yang kompatibel dengan tugas Anda. Untuk informasi selengkapnya tentang model terlatih yang tersedia untuk Pengklasifikasi Audio, lihat ringkasan tugas bagian Model.

Pilih dan download model, lalu simpan di direktori project Anda, misalnya:

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

Membuat tugas

Gunakan salah satu fungsi createFrom...() Pengklasifikasi Audio untuk mempersiapkan tugas untuk menjalankan inferensi. Menggunakan createFromModelPath() dengan jalur relatif atau absolut ke file model terlatih. Jika model sudah dimuat ke dalam memori, Anda dapat menggunakan Metode createFromModelBuffer().

Contoh kode di bawah ini menunjukkan penggunaan fungsi createFromOptions() untuk menyiapkan tugas. Fungsi createFromOptions memungkinkan Anda menyesuaikan Pengklasifikasi Audio dengan opsi konfigurasi. Untuk informasi selengkapnya tentang konfigurasi opsi, lihat Opsi konfigurasi.

Kode berikut menunjukkan cara membangun dan mengonfigurasi tugas dengan opsi:

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

Penerapan kode contoh Pengklasifikasi Audio memungkinkan pengguna memilih di antara mode pemrosesan. Pendekatan ini membuat kode pembuatan tugas lebih rumit dan mungkin tidak sesuai untuk kasus penggunaan Anda. Anda bisa melihat mode di runAudioClassification() dan runStreamingAudioClassification() fungsi dari example code

Opsi konfigurasi

Tugas ini memiliki opsi konfigurasi berikut untuk Web dan JavaScript aplikasi:

Nama Opsi Deskripsi Rentang Nilai Nilai Default
displayNamesLocale Menyetel bahasa label yang akan digunakan untuk nama tampilan yang diberikan di metadata model tugas, jika tersedia. Defaultnya adalah en untuk Bahasa Inggris. Anda dapat menambahkan label yang dilokalkan ke metadata model kustom menggunakan TensorFlow Lite Metadata Writer API Kode lokal id
maxResults Menetapkan jumlah maksimum opsional untuk hasil klasifikasi dengan skor tertinggi ke kembali. Jika < 0, semua hasil yang tersedia akan ditampilkan. Semua angka positif -1
scoreThreshold Menetapkan ambang batas skor prediksi yang menggantikan skor yang diberikan dalam metadata model (jika ada). Hasil di bawah nilai ini ditolak. [0,0, 1,0] Tidak ditetapkan
categoryAllowlist Menetapkan daftar opsional untuk nama kategori yang diizinkan. Jika tidak kosong, hasil klasifikasi yang nama kategorinya tidak ada dalam kumpulan ini akan disaring. Nama kategori duplikat atau yang tidak diketahui akan diabaikan. Opsi ini sama-sama bersifat eksklusif dengan categoryDenylist dan menggunakan keduanya akan menghasilkan {i>error<i}. String apa pun Tidak ditetapkan
categoryDenylist Menetapkan daftar opsional nama kategori yang tidak diizinkan. Jika hasil klasifikasi yang tidak kosong, yang nama kategorinya dalam rangkaian ini akan difilter posisi-posisi ini. Nama kategori duplikat atau yang tidak diketahui akan diabaikan. Opsi ini sama-sama eksklusif dengan categoryAllowlist dan menggunakan keduanya akan menyebabkan error. String apa pun Tidak ditetapkan

Menyiapkan data

Pengklasifikasi Audio berfungsi dengan klip audio dan streaming audio, serta dapat berfungsi dengan audio file dalam format apa pun yang didukung oleh {i>browser<i} {i>host<i}. Tugas tersebut menangani data pra-pemrosesan input, termasuk resampling, buffering, dan framing.

Menjalankan tugas

Pengklasifikasi Audio menggunakan metode classify() guna menjalankan inferensi untuk klip audio file atau streaming audio. Audio Classifier API menampilkan kemungkinan untuk peristiwa audio yang dikenali dalam audio input.

Panggilan ke metode classify() Pengklasifikasi Audio berjalan secara sinkron dan memblokir thread antarmuka pengguna. Jika Anda mengklasifikasikan audio dari mikrofon perangkat, setiap klasifikasi akan memblokir thread utama. Anda dapat mencegah hal ini dengan menerapkan pekerja web untuk menjalankan classify() di thread lain.

Kode berikut menunjukkan cara mengeksekusi pemrosesan dengan model tugas:

Klip audio

// 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
);
  

Streaming audio

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

Untuk implementasi yang lebih lengkap dalam menjalankan tugas Pengklasifikasi Audio, lihat contoh kode.

Menangani dan menampilkan hasil

Setelah Anda menyelesaikan proses inferensi, tugas Pengklasifikasi Audio akan menampilkan Objek AudioClassifierResult yang berisi daftar kemungkinan kategori untuk objek dalam audio input.

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

Kode contoh Pengklasifikasi Audio menunjukkan cara menampilkan klasifikasi hasil yang ditampilkan dari tugas, lihat contoh kode untuk mengetahui detailnya.