如何将Dragon NaturallySpeaking的所有输入重定向到Python?(使用Natlink)
我现在正在写一个人工智能程序,它可以接收来自Dragon NaturallySpeaking的输入(使用Natlink),处理这些输入,然后返回语音输出。我已经创建了一个接收器GrammarBase,可以捕捉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()
这段代码按预期工作,但有几个问题:
Dragon在将输入发送给我的程序之前会先处理这些输入。比如说,如果我说“打开谷歌浏览器”,它会先打开谷歌浏览器,然后再把输入发送给Python。有没有办法在不先处理的情况下直接把输入发送给Python呢?
当我调用waitForSpeech()时,会弹出一个消息框,显示Python解释器在等待输入。有没有办法(为了美观和方便)让这个消息框不显示,而是在用户长时间没有说话后,直接结束语音收集的过程呢?
谢谢!
1 个回答
3
关于你第一个问题,DNS在内部处理命令时,会使用“打开...”这个说法。这意味着DNS会先理解这个语音指令并执行命令,而在natlink有机会处理之前就已经完成了。解决这个问题的办法就是把你的natlink语法中的“打开...”改成“触发...”或者其他DNS没有使用的说法(除了“触发...”)。
一些natlink的开发者会在speechcomputing.com上交流,你可以去那里寻求更好的帮助。
祝你好运!