Python 適用的語音分類指南

MediaPipe 音訊分類器工作可讓您對音訊資料執行分類。你可以 使用這項工作,從一組已訓練的類別中找出聲音事件。這些 的操作說明,就會顯示音訊分類器與 Python 搭配使用的方式。

進一步瞭解功能、模型和設定選項 請參閱總覽

程式碼範例

音訊分類器的範例程式碼提供完整的實作 執行相關作業這個程式碼可協助您測試這項工作 並開始建立自己的音訊分類器您可以查看、執行及修改 音訊分類器範例 程式碼 只要使用網路瀏覽器搭配 Google Colab 即可。您可以查看 這個例子 GitHub

如果您要實作 Raspberry Pi 的音訊分類器,請參閱 Raspberry Pi 範例 app

設定

本節說明設定開發環境的重要步驟,以及 專門使用 Audio Classifier 的程式碼專案。如需 設定開發環境以使用 MediaPipe 工作,包括: 平台版本需求,請參閱這份指南 Python

套件

音訊分類器會指定 mediapipe pip 套件。如要安裝 依附元件如下:

$ python -m pip install mediapipe

匯入

匯入下列類別以存取音訊分類器工作函式:

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

型號

MediaPipe 音訊分類器工作需要經過訓練且與此模型相容的模型。 工作。如要進一步瞭解音訊分類器可用的已訓練模型,請參閱: 工作總覽的「模型」一節

選取並下載模型,然後儲存至本機目錄。別擔心!您可以使用 建議使用 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 設定任務的執行模式。音訊分類器提供兩種模式:

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

音訊分類器程式碼範例示範如何顯示分類 此工作傳回的結果,請參閱 示例