如何使用Python结合speech recognition与DeepSpeech开发离线语音助手
Python结合SpeechRecognition + DeepSpeech实现离线语音识别开发步骤
1. 前置依赖安装
首先安装需要的Python库:
- 音频采集依赖:
pyaudio用于麦克风音频流读取 - 语音识别封装库:
SpeechRecognition简化音频采集逻辑 - DeepSpeech推理库:
deepspeech离线语音识别推理 - 数组处理依赖:
numpy处理音频格式转换
安装命令:
pip install pyaudio SpeechRecognition deepspeech numpy
注:如果pyaudio安装失败,Linux系统可先执行sudo apt install portaudio19-dev,Mac系统执行brew install portaudio后再重试安装
2. 本地模型准备
提前下载DeepSpeech官方预训练模型文件到本地,需要两个文件:
- 模型结构文件:后缀为
.pbmm - 语言评分文件:后缀为
.scorer
将两个文件放到项目根目录的deepspeech_model文件夹下备用。
3. 单次识别实现代码
import speech_recognition as sr import numpy as np from deepspeech import Model # 配置参数 MODEL_PATH = "./deepspeech_model/output_graph.pbmm" SCORER_PATH = "./deepspeech_model/kenlm.scorer" # 音频参数:DeepSpeech要求16kHz采样率,单声道 SAMPLE_RATE = 16000 # 初始化DeepSpeech模型 ds_model = Model(MODEL_PATH) ds_model.enableExternalScorer(SCORER_PATH) # 初始化麦克风采集器 r = sr.Recognizer() mic = sr.Microphone(sample_rate=SAMPLE_RATE) print("请开始说话,说完暂停自动识别:") with mic as source: # 自动校准环境噪音 r.adjust_for_ambient_noise(source) # 采集音频,停顿1秒自动停止采集 audio = r.listen(source) # 将SpeechRecognition采集的音频转为DeepSpeech需要的numpy数组 audio_data = np.frombuffer(audio.get_raw_data(), dtype=np.int16) # 执行离线识别 text = ds_model.stt(audio_data) print(f"识别结果:{text}")
4. 连续流识别优化(适配语音助手场景)
如果需要实时连续识别而不是单次采集,直接使用DeepSpeech的流处理接口即可,修改采集逻辑如下:
- 用
pyaudio直接开音频流,每次读取1024帧音频块 - 调用
ds_model.createStream()创建推理流 - 循环将音频块喂入
feedAudioContent方法 - 间隔固定时间调用
intermediateDecode()获取实时识别结果 - 检测到用户停止说话后调用
finishStream()获取最终结果
常见问题排查
- 识别准确率低:可以替换对应语种的自定义scorer文件,或者调整噪音校准的时长
- 采集延迟高:可以调小单次读取的音频块大小,降低流识别的返回间隔
- 模型加载失败:检查模型文件版本是否和安装的deepspeech库版本匹配
内容的提问来源于stack exchange,提问作者Echu
相关产品推荐
相关产品推荐

