OpenClaw语音控制之使用 Vosk 实现离线语音控制

张开发
2026/4/5 0:35:12 15 分钟阅读

分享文章

OpenClaw语音控制之使用 Vosk 实现离线语音控制
10.1 Vosk 简介与特性10.1.1 什么是 VoskVosk 是一个离线开源语音识别工具包,基于 Kaldi 语音识别框架开发。它能够在无需网络连接的情况下,为应用程序提供实时、准确的语音识别能力。Vosk 由 Alpha Cephei Inc 开发和维护,采用 Apache 2.0 开源协议,允许在商业和个人项目中免费使用。与云端语音识别服务(如百度语音识别、科大讯飞等)相比,Vosk 的最大优势在于完全离线运行。这意味着用户的语音数据不会上传到任何服务器,既保护了隐私,又避免了网络延迟带来的响应滞后。对于需要快速响应的语音控制场景,Vosk 是一个理想的选择。10.1.2 Vosk 的核心特性Vosk 具备以下显著特性,使其在离线语音识别领域脱颖而出:1. 多语言支持Vosk 支持超过 20 种语言和方言(官方确认 25+ 种),包括但不限于: - 中文(普通话) - 英语(美式、英式、印度英语) - 日语、韩语 - 德语、法语、西班牙语、葡萄牙语 - 俄语、阿拉伯语、印地语 - 意大利语、荷兰语、土耳其语、乌克兰语、瑞典语等这种广泛的语言支持使得 Vosk 可以服务于全球不同地区的用户。2. 轻量级部署Vosk 的小型模型(Small Model)仅约 40-50MB,却能在资源受限的设备上运行,包括: - 树莓派(Raspberry Pi) - Android 智能手机 - iOS 设备 - 嵌入式 Linux 系统小型模型在运行时内存占用约 300MB(基于实践经验,非官方规格),非常适合边缘计算场景。3. 简单易用的安装Vosk 可以通过 pip 一键安装:pip3 install vosk无需复杂的依赖配置,也无需编译安装,大大降低了使用门槛。4. 流式 API 支持Vosk 提供流式(Streaming)API,支持实时语音识别。与传统的整段音频识别不同,流式 API 可以在用户说话的同时进行识别,实现零延迟响应。这对于需要即时反馈的语音控制应用至关重要。5. 动态词汇重配置小型模型支持在运行时动态修改识别词汇表(Grammar),允许开发者根据应用场景限制识别范围,从而提高特定领域的识别准确率。例如,可以配置只识别“打开微信”、“发送消息”等特定命令。注意: Grammar 设置的 JSON 格式规范请参考 Vosk 官方文档,本文示例格式待进一步验证。6. 说话人识别除了语音识别,Vosk 还支持说话人识别(Speaker Identification),可以区分不同说话人的声音特征。这一功能在多用户场景下非常有用,例如区分不同家庭成员的语音命令。7. 多语言绑定Vosk 不仅支持 Python,还提供了 Java、C#、Node.js、C++、Rust、Go 等多种编程语言的绑定,方便不同技术栈的开发者集成。10.1.3 Vosk 的模型类型Vosk 提供两种类型的模型,分别适用于不同的应用场景:小型模型(Small Models)大小:约 40-50MB(官方数据:vosk-model-small-cn-0.22 为 41.9MB)内存需求:约 300MB(基于实践经验)适用场景:移动应用、IoT 设备、实时语音控制特点:支持动态词汇重配置,响应速度快代表模型:vosk-model-small-cn-0.22(中文小型模型,41.9MB) -[官方验证]vosk-model-small-en-us-0.15(美式英语小型模型,39.3MB) -[官方验证]大型模型(Big Models)大小:1GB - 4GB(官方数据:vosk-model-cn-0.22 为 1.3GB)内存需求:最高 16GB(基于实践经验,非官方规格)适用场景:服务器端高精度转录、离线字幕生成特点:识别准确率更高,但不支持动态词汇修改代表模型:vosk-model-cn-0.22(中文大型模型,1.3GB) -[官方验证]vosk-model-en-us-0.22(美式英语大型模型,1.8GB) -[官方验证]对于 OpenClaw 语音控制场景,推荐使用小型模型,因为它们在资源占用和响应速度之间取得了良好的平衡。词错误率说明: 文章中提及的词错误率数据(如 23.54%)来源于第三方测试,具体来源待验证。10.1.4 Vosk 的应用场景Vosk 可以广泛应用于以下场景:智能家居语音控制:通过语音命令控制灯光、空调、窗帘等智能设备聊天软件快捷操作:语音唤起微信、QQ、钉钉,发送消息或进行语音通话虚拟助手:构建个人语音助手,执行日程管理、天气查询等任务视频字幕生成:为视频内容自动生成字幕会议记录转录:实时转录会议内容,生成文字记录语音输入法:为特定应用提供离线语音输入功能10.2 安装与配置10.2.1 系统要求在安装 Vosk 之前,请确保系统满足以下要求:操作系统- Linux(Ubuntu 18.04+、Debian 10+、CentOS 7+) - Windows 10/11 - macOS 10.14+Python 版本- Python 3.5-3.9(官方支持范围) - 推荐:Python 3.7+ 以获得更好的兼容性注意: 官方文档明确支持 Python 3.5-3.9。pip 版本需 20.3 及以上。硬件要求- 内存:至少 1GB(推荐 2GB 以上) - 存储:至少 500MB 可用空间(用于模型存储) - 麦克风:用于语音输入平台支持Vosk 通过 pip 提供以下平台的预编译包: - Linux x86_64 - Raspbian (Raspberry Pi 3/4) - Linux arm64 - macOS (x86 和 M1) - Windows x86 和 x64不支持的平台: ARMv6 (Raspberry Pi Zero)、Windows ARM6410.2.2 安装 VoskVosk 可以通过 pip 松安装:# 使用 pip3 安装 Vosk pip3 install vosk # 验证安装 python3 -c "import vosk; print(vosk.__file__)"安装过程中,pip 会自动下载并安装 Vosk 及其依赖项(官方 pip 依赖): -cffi:用于调用 C 语言库 -requests:用于下载模型 -srt:用于生成字幕文件 -tqdm:用于显示下载进度 -websockets:用于 WebSocket 支持10.2.3 安装音频处理依赖为了实现实时麦克风输入,可以选择以下音频库:方式一:使用 sounddevice(官方推荐)Vosk 官方示例使用sounddevice库:pip install sounddevice官方说明: 参考 test_microphone.py 注释:“prerequisites: python modulesounddevice”方式二:使用 pyaudio# Ubuntu/Debian sudo apt-get update sudo apt-get install python3-pyaudio portaudio19-dev # CentOS/RHEL sudo yum install python3-pyaudio portaudio-devel # macOS brew install portaudio pip3 install pyaudio安装完成后,验证音频库是否正常工作:# 使用 sounddevice import sounddevice as sd print(sd.query_devices()) # 或使用 pyaudio import pyaudio p = pyaudio.PyAudio() print(f"音频设备数量: {p.get_device_count()}") for i in range(p.get_device_count()): info = p.get_device_info_by_index(i) print(f"设备 {i}: {info['name']}") p.terminate()10.2.4 下载语音模型Vosk 需要下载预训练的语音模型才能进行识别。模型可以通过以下几种方式获取:方式一:自动下载(推荐)Vosk 支持在代码中自动下载模型:from vosk import Model # 自动下载中文小型模型(根据 lang 参数自动选择) model = Model(lang="zh-cn") # 或指定具体模型名称 model = Model(model_name="vosk-model-small-cn-0.22")首次运行时会自动从https://alphacephei.com/vosk/models/下载模型并缓存到本地。方式二:手动下载访问 Vosk 模型下载页面(https://alphacephei.com/vosk/models),选择适合的模型手动下载:模型名称大小(官方)适用场景vosk-model-small-cn-0.2241.9MB移动端/嵌入式vosk-model-cn-0.221.3GB服务器端下载完成后解压到指定目录:# 创建模型目录 mkdir -p ~/.cache/vosk # 解压模型 cd ~/.cache/vosk unzip vosk-model-small-cn-0.22.zip10.2.5 模型存储路径配置Vosk 会按以下顺序查找模型(官方源代码定义):环境变量VOSK_MODEL_PATH指定的路径/usr/share/vosk~/AppData/Local/vosk(Windows)~/.cache/vosk(Linux/macOS)可以通过设置环境变量来自定义模型存储位置:export VOSK_MODEL_PATH=/path/to/your/models10.2.6 验证安装创建一个测试脚本验证 Vosk 是否安装成功:#!/usr/bin/env python3 # test_vosk_installation.py import vosk import sys def main(): print("Vosk 安装验证") print("=" * 40) # 检查版本 print(f"Vosk 路径: {vosk.__file__}") # 列出可用模型(需要网络连接) print("\n正在获取可用模型列表...") try: vosk.list_models() except Exception as e: print(f"获取模型列表失败: {e}") print("(可能需要网络连接,不影响本地使用)") # 列出支持的语言 print("\n支持的语言:") try: vosk.list_languages() except Exception as e: print(f"获取语言列表失败: {e}") print("\n验证完成!") if __name__ == "__main__": main()运行测试脚本:python3 test_vosk_installation.py如果看到模型列表和语言列表输出,说明 Vosk 安装成功。10.3 Python API 使用10.3.1 核心类介绍Vosk Python API 主要包含以下几个核心类(均已在官方源代码中验证):Model 类Model类用于加载和管理语音模型:from vosk import Model # 通过语言自动加载模型(官方推荐方式) model = Model(lang="zh-cn") # 通过模型名称加载 model = Model(model_name="vosk-model-small-cn-0.22") # 通过本地路径加载 model = Model(model_path="/path/to/model")KaldiRecognizer 类KaldiRecognizer是主要的识别器类,负责执行语音识别:from vosk import Model, KaldiRecognizer model = Model(lang="zh-cn") # 创建识别器,参数:模型、采样率 recognizer = KaldiRecognizer(model, 16000)SpkModel 类SpkModel用于说话人识别:from vosk import Model, SpkModel, KaldiRecognizer model = Model(lang="zh-cn") spk_model = SpkModel("/path/to/spk_model") recognizer = KaldiRecognizer(model, 16000) recognizer.Set

更多文章