将所有输入从Dragon NaturallySpeaking重定向到Python?(使用Natlink)

将所有输入从Dragon NaturallySpeaking重定向到Python?(使用Natlink),python,speech-recognition,speech,speech-to-text,naturallyspeaking,Python,Speech Recognition,Speech,Speech To Text,Naturallyspeaking,我目前正在编写一个AI程序,它从Dragon NaturallySpeaking(使用Natlink)接收输入,处理它,并返回语音输出。我能够想出一个接收语法库,它捕获来自Dragon的所有输入并将其发送到我的解析器 class Receiver(GrammarBase): gramSpec = """ <start> exported = {emptyList}; """ def initialize(self):

我目前正在编写一个AI程序,它从Dragon NaturallySpeaking(使用Natlink)接收输入,处理它,并返回语音输出。我能够想出一个接收语法库,它捕获来自Dragon的所有输入并将其发送到我的解析器

    class Receiver(GrammarBase):

        gramSpec = """ <start> exported = {emptyList}; """

        def initialize(self):
            self.load(self.gramSpec, allResults = 1)
            self.activateAll()

        def gotResultsObject(self, recogType, resObj):
            if recogType == 'reject':
                inpt, self.best_guess = [], []
            else:
                inpt = extract_words(resObj)
                inpt = process_input(inpt) # Forms a list of possible interpretations
                self.best_guess = resObj.getWords(0)
            self.send_input(inpt)

        def send_input(self, inpt):
            send = send_to_parser(inpt) # Sends first possible interpretation to parser
            try:
                while True:
                    send.next() # Sends the next possible interpretation if the first is rejected
            except StopIteration: # If all interpretations are rejected, try sending the input to Dragon
                try:
                    recognitionMimic(parse(self.best_guess))
                except MimicFailed: # If that fails too, execute all_failed
                    all_failed()
类接收器(语法数据库):
gramSpec=“”导出={emptyList};””
def初始化(自):
self.load(self.gramSpec,allResults=1)
self.activateAll()
def gotResultsObject(self、recogType、resObj):
如果recogType==“拒绝”:
输入,self.best_guess=[],[]
其他:
输入=提取单词(resObj)
inpt=过程输入(inpt)#形成可能的解释列表
self.best_guess=resObj.getWords(0)
自发送输入(inpt)
def发送_输入(自身、输入):
send=send_to_解析器(inpt)#向解析器发送第一个可能的解释
尝试:
尽管如此:
send.next()#如果第一个解释被拒绝,则发送下一个可能的解释
除了StopIteration:#如果所有解释都被拒绝,请尝试将输入发送到Dragon
尝试:
识别模拟(解析(自我最佳猜测))
除了模拟失败外:#如果这也失败,则执行所有失败的
全部失败()
此代码按预期工作,但存在几个问题:

  • Dragon在将输入发送到我的程序之前对其进行处理。例如,如果我说“打开Google Chrome”,它会打开Google Chrome,然后将输入发送到Python。有没有一种方法可以在不首先处理输入的情况下将其发送到Python

  • 调用waitForSpeech()时,会弹出一个消息框,指出Python解释器正在等待输入。是否可能(为了美观和方便)阻止消息框显示,而在用户暂停一段时间后终止语音采集过程


  • 谢谢大家!

    关于你的第一个问题,DNS在内部使用“Open…”语句作为其命令解析过程的一部分。这意味着DNS解析语音并在natlink有机会之前执行命令。解决这个问题的唯一方法是将natlink语法中的语句从“Open…”更改为“Trigger…”(或者更改为DNS除了“Trigger”之外没有使用的其他语句)

    一些natlink开发者在speechcomputing.com上闲逛。你可能会得到更好的回应


    祝你好运

    speechcomputing.com看起来像是为谷歌制作的。据我所知,它没有有用的内容。不幸的是,该网站不再被维护。改为查看语音编码器Yahoo组。