Transformers.js 文件
在 Node.js 中進行伺服器端音訊處理
並獲得增強的文件體驗
開始使用
在 Node.js 中進行伺服器端音訊處理
為 Web 編寫程式碼的一大好處是可以使用現代瀏覽器中提供的眾多 API。然而,在編寫伺服器端程式碼時,我們卻沒有這種便利,因此必須另尋他法。在本教程中,我們將設計一個簡單的 Node.js 應用程式,該程式使用 Transformers.js 和 Whisper 進行語音識別,並在此過程中學習如何在伺服器上處理音訊。
我們需要解決的主要問題是,Node.js 中無法使用 Web Audio API,這意味著我們不能使用 AudioContext
類來處理音訊。因此,我們需要安裝第三方庫來獲取原始音訊資料。在本例中,我們只考慮 .wav
檔案,但同樣的原則也適用於其他音訊格式。
本教程將以 ES 模組的形式編寫,但您可以輕鬆地將其改為使用 CommonJS。更多資訊,請參閱 Node 教程。
實用連結
先決條件
開始
讓我們從建立一個新的 Node.js 專案開始,並透過 NPM 安裝 Transformers.js
npm init -y npm i @huggingface/transformers
請記得在您的 package.json
檔案中新增 "type": "module"
,以表明您的專案使用 ECMAScript 模組。
接下來,讓我們安裝 wavefile
包,我們將用它來載入 .wav
檔案
npm i wavefile
建立應用程式
首先,建立一個名為 index.js
的新檔案,它將作為我們應用程式的入口點。同時,匯入必要的模組
import { pipeline } from '@huggingface/transformers';
import wavefile from 'wavefile';
在本教程中,我們將使用 Xenova/whisper-tiny.en
模型,但您也可以從 Hugging Face Hub 中選擇其他 Whisper 模型。讓我們用以下程式碼建立 pipeline
let transcriber = await pipeline('automatic-speech-recognition', 'Xenova/whisper-tiny.en');
接下來,讓我們載入一個音訊檔案,並將其轉換為 Transformers.js 所需的格式
// Load audio data
let url = 'https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/jfk.wav';
let buffer = Buffer.from(await fetch(url).then(x => x.arrayBuffer()))
// Read .wav file and convert it to required format
let wav = new wavefile.WaveFile(buffer);
wav.toBitDepth('32f'); // Pipeline expects input as a Float32Array
wav.toSampleRate(16000); // Whisper expects audio with a sampling rate of 16000
let audioData = wav.getSamples();
if (Array.isArray(audioData)) {
if (audioData.length > 1) {
const SCALING_FACTOR = Math.sqrt(2);
// Merge channels (into first channel to save memory)
for (let i = 0; i < audioData[0].length; ++i) {
audioData[0][i] = SCALING_FACTOR * (audioData[0][i] + audioData[1][i]) / 2;
}
}
// Select first channel
audioData = audioData[0];
}
最後,讓我們執行模型並測量執行時長。
let start = performance.now();
let output = await transcriber(audioData);
let end = performance.now();
console.log(`Execution duration: ${(end - start) / 1000} seconds`);
console.log(output);
現在您可以透過 node index.js
執行該應用程式。請注意,首次執行指令碼時,下載和快取模型可能需要一些時間。後續請求將使用快取的模型,模型載入會快得多。
您應該會看到類似以下的輸出
Execution duration: 0.6460317999720574 seconds
{
text: ' And so my fellow Americans ask not what your country can do for you. Ask what you can do for your country.'
}
就這樣!您已成功建立了一個使用 Transformers.js 和 Whisper 進行語音識別的 Node.js 應用程式。現在您可以以此為起點來構建您自己的應用程式。
< > 在 GitHub 上更新