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

MediaPipe 音声分類タスクを使用すると、音声データの分類を実行できます。Google Chat では このタスクを使用して、トレーニング済みの一連のカテゴリからサウンドに関するイベントを特定します。これらの ここでは、Node アプリとウェブアプリで音声分類器を使用する方法について説明します。

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

サンプルコード

音声分類器のサンプルコードでは、音声分類器の完全な実装を提供しています。 タスクを示しています。このコードは、このタスクのテストと 独自の音声分類アプリの構築を始めましょう。BigQuery では 編集して 音声分類器のコード例 できます。

セットアップ

このセクションでは、開発環境をセットアップする主な手順と 特に音声分類器を使用するコード プロジェクトです。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 ウェブ用の設定ガイド

JavaScript パッケージ

音声分類器のコードは MediaPipe @mediapipe/tasks-audio から利用できます。 NPM パッケージ。Google Chat では プラットフォームに用意されているリンクから、これらのライブラリを検索してダウンロードします。 設定ガイド

<ph type="x-smartling-placeholder">

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

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 Audio Classifier タスクには、これと互換性のあるトレーニング済みモデルが必要です タスクを実行します。音声分類器で使用可能なトレーニング済みモデルについて詳しくは、以下をご覧ください。 タスクの概要のモデル セクションをご覧ください。

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

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

タスクを作成する

音声分類器の 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"
    }
  });

音声分類器のコード実装例では、ユーザーは以下のいずれかを選択できます。 処理モードを選択できますこのアプローチでは、タスク作成コードが複雑になり、 ユースケースに適さない場合がありますさまざまなモードと runAudioClassification()runStreamingAudioClassification() 関数の example code

構成オプション

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

オプション名 説明 値の範囲 デフォルト値
displayNamesLocale 指定された表示名に使うラベルの言語を設定します。 タスクのモデルのメタデータ(利用可能な場合)。デフォルトは en です。 英語。カスタムモデルのメタデータにローカライズされたラベルを追加できます。 TensorFlow Lite Metadata Writer 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

音声分類器のサンプルコードは、分類機能を表示する方法を示しています。 結果については、 コードサンプル をご覧ください。