使用Dragonfly防止Windows语音识别识别计算机音频?

时间:2014-12-01 20:19:21

标签: python speech-recognition python-dragonfly

我正在使用Dragonfly for Python制作适用于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"并忘记"Yes",因为这似乎与无法访问相反。

这就是我的简单响应类:

class SingleWordResponse(CompoundRule):
    spec = "<word>"
    extras = [Choice("word", {"no":0, "yes":1, "ready":1, "okay":1,"repeat":2})]
    mode = 0
    def _process_recognition(self, node, extras):
        #here I use self.mode to keep track of what the user is doing and respond based on the context

我愿意采用各种方法来禁用或规避这种不必要的“功能”。我尝试过使用不同的上下文,但context documentation的使用并不十分清楚。我还尝试设置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

我在SingleWordResponse.speaking来电之前立即将True设置为e.speak(),然后立即将其设置为False,但无效。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用Rule.disable()和Rule.enable()获得创意。这至少会阻止你的规则在你不想要时被识别出来。

然而,它并没有处理WSR从speak()函数识别自己的语音。这意味着,当您使用speak()函数时,您仍然会获得随机文本插入。我以为你可能会遇到麦克风质量问题,所以我测试了你的代码,扬声器音量很高,然后关闭。虽然你把这称为WSR问题似乎是正确的:即使扬声器关闭,我仍然有问题。

顺便说一下,我讨厌建议&#34;投入更多的钱&#34;解决方案有多种原因,但Dragon NaturallySpeaking与Natlink + Dragonfly没有这个反馈问题(Windows XP / 7上的DNS版本11/12至少没有在其他地方测试过)。 WSR不够聪明。