Python 音声分類ガイド

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

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

サンプルコード

音声分類器のサンプルコードでは、音声分類器の完全な実装を提供しています。 タスクを示しています。このコードは、このタスクをテストして、 独自の音声分類器の構築を始めました「新規顧客の獲得」目標を 音声分類器の例 コード ウェブブラウザだけで Google Colab を 利用できますこのアプリケーションのソースコードを この例を GitHub

Raspberry Pi 用に音声分類器を実装する場合は、 Raspberry Pi の例 アプリ

セットアップ

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

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

パッケージ

オーディオ分類器が mediapipe pip パッケージにタスクを実行します。kubectl の「get pods」 次のように置き換えます。

$ python -m pip install mediapipe

インポート

次のクラスをインポートして、音声分類タスク関数にアクセスします。

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

モデル

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

モデルを選択してダウンロードし、ローカル ディレクトリに保存します。次を使用: 推奨される Yamnet モデルです。

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'

次に示すように、Model Name パラメータ内にモデルのパスを指定します。

base_options = BaseOptions(model_asset_path=model_path)

タスクを作成する

create_from_options 関数を使用してタスクを作成します。「 create_from_options 関数は、実行などの構成オプションを受け入れます。 モード、表示名のロケール、結果の最大数、信頼度のしきい値、 拒否リストを使用できます。リソースの構成について 構成の概要をご覧ください。

音声分類タスクは、音声クリップと音声ストリームを入力としてサポートします。マイページ 入力データ型に対応する実行モードを指定する必要があります。 タスクを作成します。入力データタイプに対応するタブを選択すると、 推論を実行する方法を学びます。

音声クリップ

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=AudioRunningMode.AUDIO_CLIPS)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

音声ストリーム

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioClassifierResult = mp.tasks.audio.AudioClassifierResult
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

def print_result(result: AudioClassifierResult, timestamp_ms: int):
    print(AudioClassifierResult result: {}.format(result))

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=AudioRunningMode.AUDIO_STREAM,
    max_results=5,
    result_callback=print_result)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
  

音声で使用する音声分類器の作成の詳細な例については、 コード 例をご覧ください。

構成オプション

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

オプション名 説明 値の範囲 デフォルト値
running_mode タスクの実行モードを設定します。音声分類器には次の 2 つのモードがあります。

AUDIO_CLIPS: 独立したオーディオ クリップでオーディオ タスクを実行するためのモード。

AUDIO_STREAM: マイクからなどのオーディオ ストリームでオーディオ タスクを実行するためのモード。このモードでは、resultListener は 分類結果を受け取るリスナーを設定するために呼び出されます。 使用できます。
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale 指定された表示名に使うラベルの言語を設定します。 タスクのモデルのメタデータ(利用可能な場合)。デフォルトは en です。 英語。カスタムモデルのメタデータにローカライズされたラベルを追加できます。 TensorFlow Lite Metadata Writer API を使用 言語 / 地域コード en
max_results オプションの上位スコアの分類結果の最大数を設定します。 戻ります。<0 の場合、利用可能な結果がすべて返されます。 正の数 -1
score_threshold 予測スコアのしきい値を設定します。このしきい値は、 モデル メタデータ(存在する場合)この値を下回る結果は拒否されます。 [0.0、1.0] 未設定
category_allowlist 許可するカテゴリ名のオプション リストを設定します。空でない場合、 カテゴリ名がこのセットにない分類結果は、 フィルタで除外されます重複または不明なカテゴリ名は無視されます。 このオプションは category_denylist とは相互に排他的であり、 どちらの結果もエラーになります 任意の文字列 未設定
category_denylist 許可されていないカテゴリ名のオプション リストを設定します。条件 空でない場合、カテゴリ名がこのセットに含まれている分類結果はフィルタされます できます。重複または不明なカテゴリ名は無視されます。このオプションは category_allowlist と排他的であり、両方を使用するとエラーになります。 任意の文字列 未設定
result_callback 分類結果を受け取るように結果リスナーを設定します。 音声分類器が音声ストリーム内にある場合、非同期で行われます。 モードです。実行モードが AUDIO_STREAM に設定されている場合にのみ使用できます なし 未設定

データの準備

音声分類器は、音声クリップと音声ストリームで機能します。タスクは、 データ入力の前処理(リサンプリング、バッファリング、フレーミングなど)

入力を音声ファイルまたは numpy 配列として準備し、 MediaPipe AudioData オブジェクト。外部ライブラリを使用して、 SciPy: 入力音声を numpy 配列として読み込みます。

次の例は、処理対象のデータを準備する方法を説明し、 利用可能な各データ型は次のとおりです。

音声クリップ

import numpy as np
from scipy.io import wavfile

AudioData = mp.tasks.components.containers.AudioData

sample_rate, buffer = wavfile.read('/path/to/audio.wav')
audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

音声ストリーム

import numpy as np

AudioData = mp.tasks.components.containers.AudioData

# Read microphone data as np arrays, then call

audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

タスクを実行する

実行モードに対応する分類関数を呼び出して、 説明します。Audio Classifier API が音声のカテゴリを返す 入力オーディオ バッファ内のイベントです。

音声クリップ

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

音声ストリーム

# Send live audio data to perform audio classification.
# Results are sent to the `result_callback` provided in the `AudioClassifierOptions`
classifier.classify_async(audio_data, timestamp_ms)
    

次の点にご留意ください。

  • 音声ストリーム モードで実行する場合は、 音声分類器タスクは、入力音声データのタイムスタンプを処理します。
  • 音声クリップモデルで実行すると、音声分類タスクによって 入力音声の処理が完了するまで待機しません。

音声クリップを使用して音声分類器を実行する詳細な例については、 コード 例をご覧ください。

結果の処理と表示

推論を実行すると、オーディオ分類タスクは 有効なカテゴリのリストを含む 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

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