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