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
音訊分類器程式碼範例示範如何顯示分類 查看工作傳回的結果 程式碼範例 。