Vosk:实时语音识别,离线 ligne
Vosk(alphacep/vosk-api,采用 Apache 2.0 许可证,由 Alpha Cephei 开发)是一款离线语音识别引擎,可进行连续流式转写,每种语言的便携模型约为 50 MB——法语轻量模型 vosk-model-small-fr-0.22 的大小为 41 MB。它支持 20 种及以上语言,可在 Raspberry Pi 或智能手机上运行,但处理难以识别的音频时,准确度仍不如 Whisper:应仅用于语音命令和实时场景。
Vosk 是一个离线语音识别引擎,由 Alpha Cephei 公司开发,基于 Kaldi 引擎构建。它非常轻量,支持流式处理:使用大小为几十兆字节的模型,即使在性能不高的处理器上,也能随着说话过程持续转写。它在转写文本质量上无法与大型模型匹敌——它做的是另一件事,而它所做的并不容易被替代。本指南先详细介绍该项目公布的数据,包括两个官方法语模型的数据,再与 Whisper 进行客观比较。
#Vosk 有哪些不同的做法
作为标杆的转录模型处理的是文件:给它们一段完整录音,处理结束后才会返回文本。Vosk 处理的是音频流:它分块接收音频,随着说话过程先输出中间结果,再输出最终结果,并借助流式 API 将延迟降至接近零。项目官方介绍将这种“zero-latency response with streaming API”列为核心特性,与模型大小并列。
这种架构差异解释了其余特点:模型非常小,可轻松在处理器上运行,内存占用足以适应树莓派或入门级手机;但在处理难以识别或带有噪声的音频时,转录文本的质量不及大型模型。
#Vosk 的各项数据,包括法语识别数据
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 终身更新
该项目对自身提供的功能有明确说明。官方代码仓库宣称支持「20+ languages and dialects」的语音识别,提供 Python、Java、Node.js、C#、C++、Rust 和 Go 的语言绑定,以及大小为 50 MB 的「便携」模型;对于需要更高识别精度的用户,还提供体积明显更大的服务器模型。所有内容均以 Apache 2.0 许可证发布。当项目需要向法务部门说明其开源依赖时,这是一项有用的保障。
| 模型 | 大小 | 词错误率(数值越低越好) | 预期用途 |
|---|---|---|---|
| vosk-model-small-fr-0.22 | 41 MB | 23.95(Common Voice)· 19.30(MTEDX)· 27.25(播客) | 安卓、iOS、树莓派 |
| vosk-model-fr-0.22 | 1.4 GB | 14.72(Common Voice)· 11.64(MLS)· 13.10(MTEDX) | 服务器,精度更高 |
模型大小的差异(41 MB 对比 1.4 GB)带来了明显的准确率差距:视测试集而定,词错误率几乎翻倍。这是 Vosk 的核心权衡,有数字依据,而非凭空推测:模型越轻量,出错就越频繁;对于词汇范围有限的语音命令,这可以接受,但用于采访转录就难以接受得多。除了官方模型,由法国软件厂商 Linagora 推动的 LinTO 项目也发布了自行开发、兼容 Vosk 的法语模型——对于希望在选择前比较多个来源的法语项目,这是一个有用的参考。
四个测试集(Common Voice、MTEDX、播客、MLS)的详细结果,也应被视为方法上的提醒,而不只是一个可以原样记住的排名:同一模型在不同测试集上的词错误率可相差一倍,轻量版在 MTEDX 上为 19.30,在播客上为 27.25。无论选择哪个模型,干净的录音室音频与在环境噪声中录制的对话,所得的识别质量都不同——这也是应使用能代表实际用途的录音进行测试,而不是只相信产品介绍页上公布的单一平均值的又一个理由。
#实时处理,它真正的专长
- 延迟
- 文本在说话过程中实时显示,支持语音指令和实时字幕生成。
- 部分结果
- 应用可能在句子结束前就做出响应——这对于唤醒词或短指令至关重要。
- 占用空间
- 轻量法语模型为 41 MB,而服务器版本为 1.4 GB,大型通用模型通常则为数 GB。
- 限定识别词汇
- 可以将识别范围限定为一组预期词汇,从而显著提高对命令的识别准确率。
最后这一点常被低估。要通过语音控制应用,将词汇范围限制为五十条可能的命令,就能让一个表现一般的识别引擎变得非常可靠——而通用大模型仍会在相近的同音词之间犹豫。官方说明也印证了这一点:它将“reconfigurable vocabulary”(可重新配置的词汇表)与说话人识别一同列为引擎的原生功能,而如此小的引擎很少同时原生提供这两项能力。
#Vosk或Whisper
| 标准 | Vosk | Whisper及其衍生模型 |
|---|---|---|
| 模式 | 连续流 | 文件 |
| 延迟 | 几乎为零(API流式传输) | 处理完成后 |
| 模型大小 | 41MB至1.4GB,根据具体变体而定 | 数百MB到数GB |
| 硬件 | 性能有限的处理器、嵌入式处理器 | 性能尚可的处理器,最好配备 GPU |
| 处理难识别音频时的识别质量 | 准确度尚可,有实测数据(WER 约为 15–28,具体取决于模型和测试) | 明显更优 |
| 标点与格式 | 有限 | 良好 |
| 适用于 | 语音指令、实时处理、嵌入式应用 | 会议、访谈和视频的转录 |
没有一种方案在所有方面都胜出。成熟的处理流程往往会同时使用两者:在用户说话时,用 Vosk 检测指令或显示即时反馈;在录音结束且有可用计算资源后,用 Faster-Whisper 等更重的模型生成更准确的最终转录文本。
#它具有优势的场景
- 01用语音控制应用程序词汇范围有限,延迟极低,无需依赖网络。
- 02实时字幕生成内部会议、大会、实时无障碍支持。
- 03嵌入式硬件微型计算机或独立设备,适用于容纳不下大型模型的硬件——该项目明确将 Raspberry Pi 和 Android 列为目标平台。
- 04严格保密,无需 GPU一台普通电脑,没有显卡,而且不得向外发送任何数据。
这四种场景有一个共同点:它们可以接受尚可而非出色的文本质量,以换取几乎为零的延迟,以及适合配置较低硬件的资源占用。一旦要求反过来——必须达到最高质量,而几秒的延迟可以接受——像 Faster-Whisper 这样处理文件的模型就重新占据优势。这也解释了为什么在完整且设计合理的语音处理流程中,这两个工具通常会搭配使用,而不是相互替代。
#音频格式及文本导出
实际工作中,转录项目绝不只是调用识别引擎:需要读取收到的输入格式,必要时进行转换,再将结果写入下游可使用的格式,而且往往需要同时处理多个录音提供方。上文引用的研究所记录的处理流程展示了这一完整过程:通过 Python 预处理模块读取多种常见音频格式(WAV、MP3、FLAC、OGG),使用 Vosk 的 KaldiRecognizer 进行识别,再将得到的文本导出为可供审阅或归档的结构化文档。
这个细节很重要,因为 Vosk 本身要求输入的是特定格式的音频流(单声道 PCM,通常为 16 kHz),而不是任何未经处理的文件。因此,接收各种不同格式音频的项目——手机录音、视频会议导出的文件、来源各异的压缩文件——几乎总是需要在音频进入引擎前进行格式转换。本指南前面提到的那些导致识别效果下降、却没有明确报错的缺陷,往往就隐藏在这个转换环节,而不是引擎本身。
#定制语言模型
在底层,Vosk 的语音识别依赖其自身的 KaldiRecognizer,该组件源自 Kaldi 语音识别引擎。这解释了为什么该项目能继承 Kaldi 的整套定制工具生态,而不必每遇到一种新语言或一个新领域就从零开始。近期一项围绕定制 Vosk 流水线开展的相关研究测量了适配语言模型的实际效果:定制模型能降低词错误率,尤其是在涉及技术词汇、口音较重或音频含噪声的情况下。
对于法语项目,这提供了一条切实可行的路径,不再局限于在轻量模型和服务器模型之间做选择:将业务词汇(产品名称、内部行话、缩略语、本地专有名称)注入语言模型,而不是仅仅依赖通用词汇。相比直接下载模型,这需要更多工作,但这是最能让 Vosk 部署在特定领域接近大型模型质量的手段,同时无需承担大型模型的计算成本和延迟。
#实施部署
工作原理很简单:安装软件包(Python 中使用 pip install vosk),下载所需语言的模型,打开音频流,将音频片段送入引擎,先读取中间结果,再读取最终结果。Python、Java、Node.js、C#、C++、Rust 和 Go 都有相应的语言绑定;WebSocket 服务器还可将网页或移动应用连接到运行在您机器上的引擎。
投入生产前有两点需要注意:质量在很大程度上取决于所选的语言模型——上表只提供大致参考,在以此为基础构建方案之前,请先用您自己的录音进行测试——以及音频采样率必须符合模型的要求,否则识别效果会下降,却不会出现明确的错误提示。
- 本地语音助手:完整链路
- 本地快速转录文件
- 使用 Kokoro 让助手出声回答
- Whisper + Ollama:100% 离线转录
- 来源:Vosk 官方 GitHub 仓库
- 来源:Vosk 模型目录,包含模型大小和评分
- 来源:Vosk 语言模型个性化研究
#FAQ
Vosk是免费的吗?+
需要显卡吗?+
Vosk还是Whisper?+
支持法语吗?效果如何?+
能否限制识别的词汇范围?+
为嵌入式项目应选择何种模型大小?+
能否在不更换模型的情况下提升精度?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。