
如何用 Vosk 跑通 50MB 离线语音识别从本地加载到流式转写的完整落地【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-apiVosk 是开源的离线语音识别工具箱把 ASR 模型直接跑在本机模型 50MBPython、Java、Node、Go、C 都能调用支持 20 多种语言边说话边出字不依赖网络。以一场 2 小时的评审会为例人工整理纪要约 1.5 小时约 75 元走云端 ASR 则要把录音传给第三方服务器费用和隐私都卡住。Vosk 的做法是把识别搬到本地音频不进云端转写只花处理时间。为什么离线识别值得单独做一套云端 ASR 按量计费、数据出本机、网络往返带来延迟大模型如本地 Whisper体积动辄数百 MB 到 GB树莓派和手机装不下。Vosk 用 Kaldi开源语音识别工具包训练的 50MB 小模型换来了三件事体积小小模型约 50MB能塞进 Android 手机、树莓派这类端侧设备流式零延迟streaming API 边收音频边出字不用等整段说完一套内核多语言绑定Python、Java、Node、Go、C、C#、Kotlin、Ruby 包的是同一个 C 内核换语言不用换模型。整体架构一览音频按固定大小的块连续喂给识别器每块都会尝试出结果话没说完时给中间结果partial停顿时才给整句最后FinalResult收尾。核心模块拆解选对模型语言、名称与本地路径模型有三种加载方式lang按语言自动下载model_name按名称、Model(路径)按本地文件夹加载。小模型体积约 50MB是端侧首选from vosk import Model, SetLogLevel SetLogLevel(-1) # 关闭调试日志生产环境建议 model Model(langen-us) # 按语言自动下载约 50MB # model Model(model_namevosk-model-en-us-0.21) # 按名称加载 # model Model(models/en) # 按本地路径加载产出一个Model对象后续所有识别器共享它。输入规格统一为 16kHz 单声道 PCM原始未压缩采样音频不符合会识别失败。流式识别主循环怎么喂、出什么参考 python/example/test_simple.py核心是AcceptWaveform返回值的分叉返回True表示句末给整句否则给当前中间结果。开SetWords后还能拿到每个词的时间戳rec KaldiRecognizer(model, wf.getframerate()) rec.SetWords(True) # 输出词级时间戳 while True: buf wf.readframes(4000) # 每次读 4000 字节 if not buf: break if rec.AcceptWaveform(buf): # True 句末返回整句 print(json.loads(rec.Result())[text]) else: print(json.loads(rec.PartialResult())[partial]) # 实时中间结果配什么16kHz 单声道wave文件怎么跑每轮读 4000 字节喂入产出说话中的实时字幕 句末整句。批量转写与字幕导出整目录一键出 SRT单文件够用但会议纪要、访谈录音往往是几十上百个文件。仓库自带转写器 python/vosk/transcriber/cli.py 支持整目录并行转写直接输出 SRT 字幕、TXT 或 JSON# 整目录转写输出 SRT 字幕10 个并行任务 python -m vosk.transcriber.cli \ --model models/en \ --input audio_dir/ \ --output srt_out/ \ --output-type srt \ --tasks 10产出与输入音频同名的.srt文件词级时间戳已对齐--tasks调高可加速批量处理。底层 C API所有绑定都包它上层语言绑定其实都包同一个 C 内核。看 c/test_vosk.c 就明白整个识别流程只有四个函数建模、喂块、取结果、释放。换语言时不用重新理解模型只换调用封装#include vosk_api.h VoskModel *m vosk_model_new(model); // 加载模型 VoskRecognizer *r vosk_recognizer_new(m, 16000.0); // 16kHz 识别器 char buf[3200]; int n; while ((n fread(buf, 1, sizeof(buf), wavin)) 0) { if (vosk_recognizer_accept_waveform(r, buf, n)) printf(%s\n, vosk_recognizer_result(r)); } printf(%s\n, vosk_recognizer_final_result(r)); vosk_recognizer_free(r); vosk_model_free(m); // 释放资源效果验证训练与转写的实测口径training/目录提供基于 Kaldi 的自训管线入口 training/run.sh其结果文件里的 WER字错误率Word Error Rate越低越好是衡量模型质量的硬指标指标数值说明模型体积50 MB小模型端侧可运行采样率16 kHz 单声道标准输入规格WER基线解码14.10%首次解码结果WER语言模型重打分12.67%重打分后约每 100 词错 13 个解读WER 从 14.10% 降到 12.67% 说明语言模型重打分有效对会议转写这类场景这是可接受的起点可通过扩大词典和语言模型进一步压低。上生产打包方式与最小集成打包Python 侧pip install vosk模型解压为文件夹约 50MB其他语言用各自包管理器引入模型是同一份。最小集成示例安装后可直接运行共 13 行# pip install vosk 后整段运行 from vosk import Model, KaldiRecognizer, SetLogLevel import wave, json SetLogLevel(-1) model Model(langen-us) # 首次运行自动下载 50MB 模型 wf wave.open(test.wav, rb) # 必须 16kHz 单声道 PCM rec KaldiRecognizer(model, wf.getframerate()) while True: buf wf.readframes(4000) if not buf: break if rec.AcceptWaveform(buf): print(json.loads(rec.Result())[text]) print(json.loads(rec.FinalResult())[text])关键性能指标模型体积 50 MB内存占用与其成正比建议部署前用tracemalloc或系统工具实测输入规格 16 kHz 单声道 PCM其他采样率需先用 ffmpeg 重采样实时率RTFReal-Time Factor要求 1即处理 10 秒音频不到 10 秒转写器会用xRT打印实测值。后续方向Vosk 把 50MB 离线语音识别从云端搬到了本地流式出字、多语言绑定、端侧可跑都已跑通。后续两个方向比较实际一是用training/管线针对行业词汇医学术语、产品名重训压低 WER二是把 C 内核封装进树莓派或手机的常驻服务做离线会议纪要。欢迎在评论区交流你的实测数据和踩坑点。【免费下载链接】vosk-apiOffline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考