Transformers.js 文档
Node.js 中的服务器端音频处理
并获得增强的文档体验
开始使用
Node.js 中的服务器端音频处理
为 Web 编写代码的一个主要好处是您可以访问现代浏览器中提供的众多 API。不幸的是,在编写服务器端代码时,我们无法享受这种便利,因此我们必须找到另一种方法。在本教程中,我们将设计一个简单的 Node.js 应用程序,该应用程序使用 Transformers.js 和 Whisper 进行语音识别,并在过程中学习如何在服务器上处理音频。
我们需要解决的主要问题是 Web Audio API 在 Node.js 中不可用,这意味着我们无法使用 AudioContext
类来处理音频。因此,我们将需要安装第三方库来获取原始音频数据。在本示例中,我们仅考虑 .wav
文件,但相同的原理适用于其他音频格式。
本教程将以 ES 模块的形式编写,但您可以轻松地将其调整为使用 CommonJS。有关更多信息,请参阅 node 教程。
实用链接
先决条件
入门指南
让我们从创建一个新的 Node.js 项目并通过 NPM 安装 Transformers.js 开始
npm init -y npm i @huggingface/transformers
请记住将 "type": "module"
添加到您的 package.json
中,以表明您的项目使用 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.'
}
就是这样!您已成功创建了一个 Node.js 应用程序,该应用程序使用 Transformers.js 和 Whisper 进行语音识别。您现在可以将其用作您自己应用程序的起点。
< > 在 GitHub 上更新