无需服务器!5分钟实现浏览器端实时语音转文字:基于transformers.js的Whisper模型实战
你还在为语音识别需要昂贵的云服务而烦恼吗?还在担心用户语音数据传输的隐私安全问题吗?本文将带你零成本实现浏览器本地运行的实时语音转文字功能,无需后端服务器,所有处理都在用户设备上完成。读完本文,你将掌握如何使用transformers.js和Whisper模型构建一个安全、高效的语音识别应用。
技术原理概述
transformers.js是一个专为Web平台优化的机器学习库,它允许开发者在浏览器中直接运行预训练模型。而Whisper是由OpenAI开发的通用语音识别模型,能够将多种语言的语音准确地转换为文本。
通过结合这两项技术,我们可以实现完全在客户端运行的语音识别功能。下面是这个方案的核心优势:
| 传统云服务方案 | transformers.js方案 |
|---|---|
| 需要后端服务器支持 | 纯浏览器本地运行 |
| 存在数据隐私泄露风险 | 语音数据永不离开用户设备 |
| 受网络延迟影响 | 无网络也能正常工作 |
| 按调用次数收费 | 完全免费 |
实现步骤
1. 准备工作
首先,我们需要从项目仓库获取示例代码:
git clone https://gitcode.com/GitHub_Trending/tr/transformers.js
cd transformers.js/examples/webgpu-whisper
npm install
这个示例项目已经包含了所有必要的配置和依赖,相关代码可以在examples/webgpu-whisper/目录中找到。
2. 核心实现原理
下面是实时语音识别的工作流程图:
sequenceDiagram
participant 用户
participant 浏览器
participant Web Audio API
participant Whisper模型
participant 结果显示
用户->>浏览器: 授权麦克风访问
浏览器->>Web Audio API: 获取音频流
Web Audio API->>Web Audio API: 音频处理与采样
Web Audio API->>Whisper模型: 音频数据
Whisper模型->>Whisper模型: 语音识别处理
Whisper模型->>结果显示: 识别文本
结果显示->>用户: 实时展示文字
3. 关键代码解析
3.1 初始化Worker
为了避免UI阻塞,我们使用Web Worker在后台线程中处理模型加载和语音识别任务:
// [examples/webgpu-whisper/src/App.jsx](https://gitcode.com/GitHub_Trending/tr/transformers.js/blob/1538e3a1544a93ef323e41c4e3baef6332f4e557/examples/webgpu-whisper/src/App.jsx?utm_source=gitcode_repo_files#L37-L45)
useEffect(() => {
if (!worker.current) {
// 创建Worker
worker.current = new Worker(new URL('./worker.js', import.meta.url), {
type: 'module'
});
}
// ...
}, []);
3.2 加载Whisper模型
当用户点击"Load model"按钮时,我们会向Worker发送加载模型的请求:
// [examples/webgpu-whisper/src/App.jsx](https://gitcode.com/GitHub_Trending/tr/transformers.js/blob/1538e3a1544a93ef323e41c4e3baef6332f4e557/examples/webgpu-whisper/src/App.jsx?utm_source=gitcode_repo_files#L211-L214)
<button
onClick={() => {
worker.current.postMessage({ type: 'load' });
setStatus('loading');
}}
>
Load model
</button>
3.3 获取麦克风权限并录音
获取用户麦克风权限,并使用MediaRecorder API录制音频:
// [examples/webgpu-whisper/src/App.jsx](https://gitcode.com/GitHub_Trending/tr/transformers.js/blob/1538e3a1544a93ef323e41c4e3baef6332f4e557/examples/webgpu-whisper/src/App.jsx?utm_source=gitcode_repo_files#L120-L127)
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
setStream(stream);
recorderRef.current = new MediaRecorder(stream);
audioContextRef.current = new AudioContext({ sampleRate: WHISPER_SAMPLING_RATE });
// ...
})
3.4 音频处理与识别
将录制的音频数据发送给Worker进行识别:
// [examples/webgpu-whisper/src/App.jsx](https://gitcode.com/GitHub_Trending/tr/transformers.js/blob/1538e3a1544a93ef323e41c4e3baef6332f4e557/examples/webgpu-whisper/src/App.jsx?utm_source=gitcode_repo_files#L171-L180)
fileReader.onloadend = async () => {
const arrayBuffer = fileReader.result;
const decoded = await audioContextRef.current.decodeAudioData(arrayBuffer);
let audio = decoded.getChannelData(0);
if (audio.length > MAX_SAMPLES) {
audio = audio.slice(-MAX_SAMPLES);
}
worker.current.postMessage({ type: 'generate', data: { audio, language } });
}
4. 运行应用
启动开发服务器:
npm run dev
打开浏览器访问http://localhost:5173,你将看到如下界面:
- 点击"Load model"按钮加载Whisper模型
- 授权麦克风访问
- 开始说话,实时看到语音转文字的结果
性能优化建议
-
模型选择:根据需求选择不同大小的Whisper模型,如base、small、medium或large。较小的模型加载更快,但识别准确率可能较低。
-
WebGPU加速:确保浏览器支持WebGPU以获得最佳性能。相关实现可参考src/backends/webgpu/目录下的代码。
-
音频预处理:适当调整音频采样率和时长,平衡识别效果和性能。
总结
通过transformers.js和Whisper模型,我们可以在浏览器中实现高效、安全的实时语音转文字功能。这个方案不仅保护了用户隐私,还消除了服务器成本和网络延迟问题。
你可以进一步扩展这个示例,比如添加多语言支持、实时翻译功能,或者集成到你的现有Web应用中。完整的代码示例可以在examples/webgpu-whisper/目录中找到。
现在就尝试构建你自己的浏览器端语音识别应用吧!如有任何问题,可以查阅官方文档docs/source/index.md或参考项目中的其他示例。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00