speechrecognition库仅封装底层引擎,不自带在线识别能力;recognize_google()依赖网络且中文支持差,易报错;推荐用recognize_whisper()或直接调whisper实现离线高精度中文识别,注意音频格式、模型选择与language参数。

SpeechRecognition 库本身不提供在线语音识别能力,它只是个封装器,真正干活的是底层引擎(如 Google Web Speech API、Whisper、Vosk 等)。直接调用 recognize_google() 在无网络或中文支持差时会失败,且默认不支持离线高精度识别。
为什么 recognize_google() 经常报错或识别不准
这个函数依赖 Google 的在线服务,返回的是英文结果(即使音频是中文),且对中文支持极弱;没有网络时抛出 RequestError 或 UnknownValueError;还可能因音频过短、信噪比低被判定为“无法识别”。
- 中文音频传给
recognize_google(),大概率返回空字符串或乱码英文 - 未设置
language='zh-CN'参数时,默认按en-US解析,强行匹配导致错误 - Google 接口有调用频率限制,本地脚本反复运行容易触发 403 或超时
用 recognize_whisper() 实现本地中文语音转文字
SpeechRecognition 从 3.10 版本起内置 Whisper 支持(需额外装 whisper 和 torch),全程离线、中文友好、无需 API Key。但要注意模型加载耗内存,首次运行慢。
- 安装依赖:
pip install SpeechRecognition whisper torch - 代码中必须显式指定模型大小:
recognize_whisper(audio, model="small", language="zh") -
"tiny"模型快但中文识别率偏低;"base"或"small"更平衡;"medium"以上需至少 6GB 显存 - 音频格式必须是单声道、16kHz WAV —— 用
pydub转换:audio.export("out.wav", format="wav", bitrate="16k")
绕过 SpeechRecognition 直接调用 Whisper 的更稳写法
当需要控制分段、时间戳或自定义 prompt 时,跳过 SpeechRecognition 封装更可靠。它的 recognize_whisper() 内部只是简单调用 whisper.load_model().transcribe(),自己调反而能避开音频预处理黑箱。
- 直接加载模型:
model = whisper.load_model("small") - 传入 WAV 文件路径或 numpy array:
result = model.transcribe("input.wav", language="zh", fp16=False) -
fp16=False是关键:某些 CPU 环境下开启半精度会崩溃 - 结果里的
result["text"]是纯文本,result["segments"]包含每句起止时间,适合做字幕
真正卡住的往往不是“怎么调接口”,而是音频采样率不匹配、中文 language 参数漏写、模型下载中断后静默失败——这些不会报错,但返回空结果。建议先用 5 秒清晰录音验证 pipeline,再上长音频。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











