You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:14:59