3. 使用 Vosk 进行语音识别(离线)
Vosk 是一个轻量级的语音转文本(STT)引擎,支持多种语言,并可在 Raspberry Pi 上**完全离线运行**。 您只需在首次下载语言模型时连接网络,之后即可在无网络环境下正常使用。
在本课程中,我们将安装并测试 Vosk,并选择合适的语言模型。
测试 Vosk
运行程序
cd ~/sunfounder-voice-assistant/examples sudo python3 stt_vosk_stream.py
首次使用某种语言运行该程序时,Vosk 将会:
自动下载语言模型 (默认下载轻量版本)。
输出支持的语言列表。
开始通过麦克风**监听音频输入**。
终端中将显示类似以下内容:
vosk-model-small-en-us-0.15.zip: 100%|███████████████████| 39.3M/39.3M [00:05<00:00, 7.85MB/s]
['ar', 'ar-tn', 'ca', 'cn', 'cs', 'de', 'en-gb', 'en-in', 'en-us', 'eo', 'es', 'fa', 'fr', 'gu', 'hi', 'it', 'ja', 'ko', 'kz', 'nl', 'pl', 'pt', 'ru', 'sv', 'te', 'tg', 'tr', 'ua', 'uz', 'vn']
Say something
这表示:
语言模型文件(
vosk-model-small-en-us-0.15)已成功下载。已输出支持的语言列表。
系统已进入监听状态——请对着 Pironman 5 Pro MAX 的麦克风说话,识别结果会显示在终端中。
提示:
将麦克风保持在 15–30 cm 距离内,以获得更好的识别效果。
选择与您的语言和口音匹配的模型。
在安静环境中使用可提高识别准确率。
代码
from sunfounder_voice_assistant.stt import Vosk as STT
stt = STT(language="en-us")
while True:
print("Say something")
for result in stt.listen(stream=True):
if result["done"]:
print(f"final: {result['final']}")
else:
print(f"partial: {result['partial']}", end="\r", flush=True)
代码说明:
stt.listen(stream=True)— 启动流式语音识别,在您说话的过程中持续返回中间识别结果。result["partial"]— 显示**实时识别文本** (会不断更新)。result["final"]— 当您停止说话时,显示**最终识别出的完整句子**。循环会持续运行,从而实现**免手动操作的实时语音转写**。
提示:这种流式模式非常适合用于 语音助手、语音命令控制 或 实时语音转写。
故障排查
No such file or directory(运行 `arecord` 时出现)
可能是使用了错误的声卡/设备编号。 运行:
arecord -l然后将
1,0替换为您 USB 麦克风对应的设备编号。录音文件没有声音
打开混音器并检查麦克风音量:
alsamixer
按 F6 选择您的 USB 麦克风。
确保 Mic/Capture 未被静音(显示为 [OO] 而不是 [MM])。
使用 ↑ 键提高音量。
Vosk 无法识别语音
确保 语言代码 与模型一致(例如英语使用
en-us,中文使用zh-cn)。将麦克风保持在 15–30 cm 距离,并避免背景噪声。
说话清晰、语速适中。
识别延迟较高 / 速度较慢
默认自动下载的是 small 模型 (速度较快,但准确率略低)。
如果仍然较慢,可以关闭其他程序以释放 CPU 资源。