添加语法导致语音识别失败

Adding grammar causes speech recognition to fail

我对如何在 Python 的 speech_recognition 包中使用语法文件感到很困惑。我试过在网上寻找解决方案,但信息 稀疏 至少可以说是关于语法的信息。这是我的设置:

main.py:

import speech_recognition as sr

converter = sr.Recognizer()
with sr.Microphone() as source:
    print('Please say "zero":')
    audio = converter.listen(source)

print('Without: ' + str(converter.recognize_sphinx(audio, show_all=False)))
print('With: ' + str(converter.recognize_sphinx(audio, show_all=False, grammar='Numbers.jsgf')))

Numbers.jsgf:

#JSGF V1.0;
grammar Numbers;
<Zero> = ( zero );

输出:

Please say "zero":
Without: zero
INFO: jsgf.c(706): Defined rule: <Numbers.g00000>
INFO: jsgf.c(706): Defined rule: <Numbers.Zero>

Process finished with exit code -1073741819 (0xC0000005)

我在 PyCharm 工作,使用 Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32。任何想法发生了什么?预先感谢您的帮助!

经过多次修改,并与 project page 中的一些示例进行比较,我终于发现了错误所在。它归结为一个命名约定,如果您不知道要查找它或您要查找的内容,则不容易找到。这是一个不正确的文件:

Numbers.jsgf

#JSGF V1.0;
grammar Values;
<Zero> = ( zero );

这是一个正确的文件:

Numbers.jsgf

#JSGF V1.0;
grammar Numbers;
<Numbers> = ( zero );

简单解释一下:

  • 文件名必须与语法名
  • 相同
  • 必须有一个语法规则(例如<Numbers>)与文件/语法名称
  • 同名

如果不满足其中任何一个条件,程序将无法理解该文件并崩溃。作为旁注,.jsgf.gram 文件引用相同的编码标准,扩展名似乎归结为个人喜好。