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

时间:2018-04-07 17:58:11

标签: python speech-recognition grammar speech-to-text cmusphinx

我对如何在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)

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

1 个答案:

答案 0 :(得分:2)

经过多次修补,并与project page中的一些例子进行比较后,我终于发现了这个错误。它归结为一个命名惯例,如果你不知道要找它或者你正在寻找什么,那么它很容易找到。这是一个不正确的文件:

<强> Numbers.jsgf

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

这是一个正确的文件:

<强> Numbers.jsgf

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

简单解释一下:

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

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