網頁版語音分類指南

MediaPipe 音訊分類器工作可讓您對音訊資料執行分類。你可以 使用這項工作,從一組已訓練的類別中找出聲音事件。這些 操作說明,示範如何使用節點版和網頁應用程式適用的音訊分類器。

您可以前往 demo」。 進一步瞭解功能、模型和設定選項 請參閱總覽

程式碼範例

音訊分類器的範例程式碼提供完整的實作 方便您參考。這個程式碼可協助您測試這項工作 即可開始打造自己的音訊分類應用程式您可以查看、執行 然後編輯 音訊分類器程式碼範例 只要使用網路瀏覽器即可。

設定

本節說明設定開發環境的重要步驟,以及 專門使用 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/

建立工作

使用其中一個音訊分類器 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

音訊分類器程式碼範例示範如何顯示分類 查看工作傳回的結果 程式碼範例