使用SpeechRecognition包调用语法时触发RuntimeError错误
解决recognize_sphinx使用grammar参数时出现RuntimeError: Decoder_set_fsg returned -1的问题
我之前也碰到过这个错误,大概率是你的语法文件格式不符合Sphinx的要求,或者路径配置出了问题。咱们一步步来排查解决:
先把你的代码补全(方便后续参考):
# Dependencies: import speech_recognition as sr # Collect audio sample r = sr.Recognizer() print('Please say "perquisition":') with sr.Microphone() as source: audio_en = r.listen(source) print('Processing...') # Attempt to convert the speech to text try: print(r.recognize_sphinx(audio_en, grammar='perquisition.gram')) except RuntimeError as e: print(f"Error occurred: {e}")
错误原因分析
Decoder_set_fsg returned -1这个错误本质是Sphinx无法正确加载你指定的语法文件,常见触发场景有这几个:
- 语法文件(
.gram)的格式不符合Sphinx支持的JSGF规范 - 语法文件的路径不正确,程序找不到文件
- pocketsphinx依赖安装不完整或版本不兼容
具体解决方案
1. 修正语法文件格式
Sphinx的语法文件必须遵循**JSGF(Java Speech Grammar Format)**规范,不是随便写个单词就行。针对你的需求,perquisition.gram应该写成这样:
#JSGF V1.0; grammar perquisition; public <target_word> = perquisition;
- 第一行是JSGF的版本声明,必须存在
grammar perquisition;定义语法的名称,建议和文件名保持一致public <target_word> = perquisition;定义公开的识别规则,这里就是匹配"perquisition"这个单词
2. 确认语法文件路径
确保perquisition.gram和你的Main.py在同一个目录下,如果不在,要传入完整的绝对路径,比如:
# 替换成你的实际路径 print(r.recognize_sphinx(audio_en, grammar='/Users/yourname/project/perquisition.gram'))
3. 重新安装依赖(排除版本问题)
有时候依赖安装不完整也会导致这个错误,你可以尝试重新安装相关包:
pip uninstall -y pocketsphinx speechrecognition pip install speechrecognition pocketsphinx
4. 用最小示例测试
先写个简单的测试代码,排除麦克风或音频采集的干扰,比如用预先录制好的音频文件测试:
import speech_recognition as sr r = sr.Recognizer() # 替换成你录制的包含"perquisition"的音频文件路径 with sr.AudioFile("test_audio.wav") as source: audio = r.record(source) try: result = r.recognize_sphinx(audio, grammar='perquisition.gram') print(f"识别结果:{result}") except RuntimeError as e: print(f"错误信息:{e}")
按照上面的步骤排查,基本就能解决这个问题了。
内容的提问来源于stack exchange,提问作者user3303504
相关产品推荐
相关产品推荐

