ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vosk 离线语音识别实战:一次转完 100 小时会议录音

Vosk 离线语音识别实战:一次转完 100 小时会议录音 Vosk 离线语音识别实战一次转完 100 小时会议录音【免费下载链接】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你有一批访谈录音要出文字稿又不想把音频传到云上在线转写服务按分钟计费也不划算。用 Vosk 离线语音识别工具包识别可以完全跑在自己的机器里模型只有几十 MB加载后断网也能工作覆盖中文、英文等 20 多种语言文件转写和零延迟流式识别都支持。下面以 Python 为例从安装到接麦克风逐步演示每一步都给出可运行的脚本。它凭什么适合你全部离线数据不出机器。录音、会议纪要、客服语音这类敏感内容只有下载模型那一次需要联网之后在完全断网的环境里照样工作隐私场景不用再做安全评审。模型小但词表是大词表。它不受限命令词能做连续转写。你拿到的是一个既能塞进树莓派、手机也能扩到服务器集群的识别引擎同一套 API 通吃。流式 API 零延迟。音频按块喂进去临时结果实时吐出来边说边出字的体验天然成立做语音助手、会议实时字幕都不会卡顿。一份核心库多语言绑定。除了 Python仓库里还有 Java、Go、C#、Node、Kotlin、Ruby 以及 iOS/Android 的封装核心 C 库在 src/Go 绑定 也是独立维护的。已有服务迁移过去只需要一层薄薄的胶水代码。Vosk 离线语音识别终端输出带词级时间戳的字幕结果装好并跑起来 按环境、包、模型三步走顺序别乱。第一步环境只需要 Python 3 和 pip。vosk 以 wheel 形式分发原生库是预编译好的你不需要装 C 工具链。第二步安装 Python 包pip install vosk如果你要改源码或用 C/C/Node 等其它绑定就克隆仓库git clone https://gitcode.com/GitHub_Trending/vo/vosk-api再到对应语言目录里编译。第三步获取模型。两种办法手动下载对应语言的模型压缩包并解压把路径指向解压出来的内层目录或者直接用 Python 封装的自动下载比如Model(langzh)它会拉取中文模型并缓存到本地目录下次启动直接复用。模型名带-small后缀的是轻量版占用更小、速度更快适合资源受限的设备。第一次出结果 识别本地音频文件先确认音频是 16kHz、16bit、单声道 PCM不是的话用 ffmpeg 加-ar 16000 -ac 1转一下。下面这段脚本按块读取 WAV 并打印结果完整版可对照 test_simple.pyimport wave from vosk import Model, KaldiRecognizer audio wave.open(test.wav, rb) model Model(vosk-model-zh-cn-0.22) rec KaldiRecognizer(model, audio.getframerate()) while True: chunk audio.readframes(4000) if not chunk: break if rec.AcceptWaveform(chunk): print(rec.Result()) print(rec.FinalResult())注意三点识别器传入的采样率必须和音频一致AcceptWaveform返回真值表示一段语音已定稿Result()给出 JSON循环结束后一定要补一次FinalResult()否则末句丢失。接麦克风实时识别麦克风版用 sounddevicepip install sounddevice在回调里采集 16k/16bit/单声道数据块入队主线程喂给识别器import queue import sounddevice as sd from vosk import Model, KaldiRecognizer q queue.Queue() def on_block(indata, frames, time_info, status): q.put(indata.copy()) model Model(vosk-model-zh-cn-0.22) rec KaldiRecognizer(model, 16000) with sd.RawInputStream(samplerate16000, blocksize8000, dtypeint16, channels1, callbackon_block): while True: block q.get() if rec.AcceptWaveform(block): print(rec.Result()) else: print(rec.PartialResult())说话时PartialResult输出临时文字定稿后Result()输出整句CtrlC 退出。参考实现见 test_microphone.py它额外支持指定设备和落盘录音。进阶玩法 ⚙️一行生成 SRT 字幕给视频配字幕不用自己算时间轴。先用 ffmpeg 把音轨统一重采样为 16k 单声道原始数据再交给SrtResult它会按词级时间戳切分生成 SRTfrom vosk import Model, KaldiRecognizer rec KaldiRecognizer(Model(vosk-model-zh-cn-0.22), 16000) rec.SetWords(True) with open(audio_16k_mono.raw, rb) as raw: print(rec.SrtResult(raw))批量场景建议直接用安装包附带的vosk-transcriber命令行工具CLI 源码 里可以看到它支持整目录转写、txt/srt/json 三种输出和多任务并行。中英文模型怎么切Vosk 没有切换语言这个动作语言是跟着模型走的。做法是每种语言各建一个Model比如Model(langen-us)和Model(langzh)各自配独立的识别器同一条音频流中途换语言时先对识别器调Reset()清掉旧状态再继续喂音频。注意两个模型同时驻留会翻倍内存不用的模型及时释放。避坑清单 ⚠️结果是空串或文字全错现象脚本跑通了但Result()一直是空串或者输出完全对不上语音。 原因音频采样率或声道数与识别器配置不匹配最常见是 44.1kHz 立体声直接喂进去。 解法先用 ffprobe 确认采样率不是 16000Hz 单声道就先ffmpeg -ar 16000 -ac 1 -f s16le统一重采样。模型加载失败现象构造Model时抛 Failed to create a model。 原因路径指向了 zip 本身或解压不完整——可用模型目录里必须有 am/final.mdl 等文件。 解法解压后把路径指到内层目录下载中断的话删掉残文件重新拉取。转写总是少最后一句现象文件转写结果比实际内容短恰好缺结尾。 原因最后一段音频还没被判为定稿仍留在识别器缓冲区里。 解法读循环结束后补调FinalResult()把返回的文本拼到结果末尾。弱设备上比实时还慢现象树莓派或低配服务器上1 分钟录音要跑 2 分钟才出结果。 解法对应的原因是大模型单帧计算太重换-small轻量模型立竿见影有 GPU 的话改走批量识别接口或用 transcriber 的多任务参数把文件切开并行处理。Vosk 离线语音识别的本质就是把下载模型 → 按块喂音频 → 拿到带时间戳的文字这条链路压到十几行代码。现在就去拉一个中文模型把上面的文件识别脚本跑起来——10 分钟内你能拿到第一份转写稿。【免费下载链接】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),仅供参考
返回列表