Transformers.js 文件

在 Node.js 中進行伺服器端音訊處理

您正在檢視的是需要從原始碼安裝。如果您想使用常規的 npm install,請檢視最新的穩定版本 (v3.0.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

在 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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.