添加语法导致语音识别失败
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
文件引用相同的编码标准,扩展名似乎归结为个人喜好。
我对如何在 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
文件引用相同的编码标准,扩展名似乎归结为个人喜好。