我正在用DragonflyforPython为Windows的辅助功能应用程序制作一个原型。令人沮丧的是,Windows语音识别(WSR)可以识别来自计算机的音频,这对我来说是一个巨大的问题,因为它可以识别由自己的引擎生成的语音。例如,使用speak
:
e = dragonfly.get_engine()
e.speak("Welcome. What can I do for you today? Please say a command.")
WSR以其无穷的智慧,从计算机扬声器中听到"Please say"
,并将其解释为"Yes"
。我已经改变了提示的措辞,但这与原型的许多部分都存在一致的问题。我也不希望将我的提示改为"Affirmative"
而忘记{
我的简单响应类如下所示:
^{pr2}$我对禁用或规避这个不需要的“特性”的各种方法持开放态度。我试过使用不同的上下文,但是^{speaking
属性来防止这种情况发生,但似乎不起作用。这是对speaking
属性的测试:
class SingleWordResponse(CompoundRule):
spec = "<word>"
extras = [Choice("word", {"no":0, "yes":1, "ready":1, "okay":1,"repeat":2})]
speaking = False
def _process_recognition(self, node, extras):
if self.speaking == False:
print "command recognized"
#process command
#otherwise do nothing
我在e.speak()
调用之前立即将SingleWordResponse.speaking
设置为True
,然后紧接着将其设置为False
,但没有用。在
一个可能的解决方案是规则.禁用()和规则.启用(). 这至少可以阻止你的规则在你不想被认可的时候被认可。在
但是,它不处理WSR从speak()函数识别自己的语音。也就是说,当您使用speak()函数时,仍然会得到随机的文本插入。我以为你可能有麦克风质量问题,所以我测试了你的代码,我把我的扬声器音量调高或关小。似乎你是正确的,尽管你称这是一个WSR的问题:我仍然有问题,即使没有扬声器。在
顺便说一句,出于各种原因,我不想建议“投入更多的钱”解决方案,但是Dragon与Natlink+Dragonfly自然不会有这种反馈问题(至少WindowsXP/7上的DNS版本11/12,没有在其他地方测试)。WSR只是不够聪明。在
相关问题 更多 >
编程相关推荐