ウェブ向け音声分類ガイド

MediaPipe Audio Classifier タスクを使用すると、音声データに対して分類を実行できます。このタスクを使用すると、トレーニング済みのカテゴリのセットから音響イベントを識別できます。この手順では、Node アプリとウェブアプリで Audio Classifier を使用する方法について説明します。

このタスクの動作については、デモをご覧ください。このタスクの機能、モデル、構成オプションの詳細については、概要をご覧ください。

サンプルコード

Audio Classifier のサンプルコードには、このタスクの完全な JavaScript 実装が記載されています。このコードは、このタスクをテストし、独自の音声分類アプリの構築を開始するのに役立ちます。ウェブブラウザのみを使用して、音声分類のを表示、実行、編集できます。

セットアップ

このセクションでは、Audio Classifier を使用するために開発環境とコード プロジェクトを設定する主な手順について説明します。プラットフォーム バージョンの要件など、MediaPipe タスクを使用するための開発環境の設定に関する一般的な情報については、ウェブの設定ガイドをご覧ください。

JavaScript パッケージ

音声分類子のコードは、MediaPipe @mediapipe/tasks-audio NPM パッケージで入手できます。これらのライブラリは、プラットフォームのセットアップ ガイドに記載されているリンクからダウンロードできます。

次のコマンドを使用して、ローカル ステージングに必要なパッケージを次のコードでインストールできます。

npm install @mediapipe/tasks-audio

コンテンツ配信ネットワーク(CDN)サービスを介してタスクコードをインポートする場合は、HTML ファイルの タグに次のコードを追加します。

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

モデル

MediaPipe 音声分類タスクには、このタスクと互換性のあるトレーニング済みモデルが必要です。音声分類で使用可能なトレーニング済みモデルの詳細については、タスクの概要のモデルのセクションをご覧ください。

モデルを選択してダウンロードし、プロジェクト ディレクトリに保存します。例:

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

タスクを作成する

Audio Classifier の createFrom...() 関数のいずれかを使用して、推論を実行するタスクを準備します。トレーニング済みモデル ファイルの相対パスまたは絶対パスを使用して、createFromModelPath() 関数を使用します。モデルがすでにメモリに読み込まれている場合は、createFromModelBuffer() メソッドを使用できます。

次のコード例は、createFromOptions() 関数を使用してタスクを設定する方法を示しています。createFromOptions 関数を使用すると、構成オプションを使用して音声分類をカスタマイズできます。構成オプションの詳細については、構成オプションをご覧ください。

次のコードは、カスタム オプションを使用してタスクをビルドして構成する方法を示しています。

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

完全な例は example code で確認できます。

構成オプション

このタスクには、ウェブ アプリケーションと JavaScript アプリケーション用の次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
displayNamesLocale タスクのモデルのメタデータで指定された表示名に使用するラベルの言語を設定します(利用可能な場合)。デフォルトは英語の場合は en です。TensorFlow Lite メタデータ ライター API を使用して、カスタムモデルのメタデータにローカライズされたラベルを追加できます。言語 / 地域コード en
maxResults 返される上位スコアの分類結果の最大数(省略可)を設定します。0 未満の場合、利用可能なすべての結果が返されます。 任意の正の数 -1
scoreThreshold モデル メタデータで指定された予測スコアのしきい値(存在する場合)をオーバーライドするしきい値を設定します。この値より小さい結果は拒否されます。 [0.0, 1.0] 未設定
categoryAllowlist 許可されるカテゴリ名のオプションのリストを設定します。空でない場合、カテゴリ名がこのセットに含まれていない分類結果はフィルタリングされます。重複するカテゴリ名または不明なカテゴリ名は無視されます。このオプションは categoryDenylist と相互に排他的です。両方を使用するとエラーが発生します。 任意の文字列 未設定
categoryDenylist 許可されないカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットに含まれる分類結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。このオプションは categoryAllowlist と相互排他的です。両方を使用するとエラーが発生します。 任意の文字列 未設定

データの準備

音声分類器は音声クリップと音声ストリームで動作し、ホストブラウザでサポートされている任意の形式の音声ファイルで動作できます。このタスクは、リサンプリング、バッファリング、フレーミングなどのデータ入力の前処理を処理します。

タスクを実行する

オーディオ分類器は、classify() メソッドを使用して、オーディオ クリップ ファイルまたはオーディオ ストリームの推論を実行します。Audio Classifier API は、入力音声で認識された音声イベントのカテゴリの候補を返します。

音声分類子の classify() メソッドの呼び出しは同期的に実行され、ユーザー インターフェース スレッドをブロックします。デバイスのマイクから音声分類を行う場合、各分類はメインスレッドをブロックします。これを防ぐには、ウェブ ワーカーを実装して別のスレッドで classify() を実行します。

次のコードは、タスクモデルを使用して処理を実行する方法を示しています。

音声クリップ

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

音声ストリーム

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

音声分類タスクの実行のより完全な実装については、サンプルをご覧ください。

結果を処理して表示する

推論実行が完了すると、音声分類タスクは、入力音声内のオブジェクトのカテゴリ候補のリストを含む AudioClassifierResult オブジェクトを返します。

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

音声分類ツールのサンプルコードは、タスクから返された分類結果を表示する方法を示しています。詳しくは、サンプルをご覧ください。