Dragon NaturallySpeaking程序员

时间:2010-06-01 20:02:29

标签: python speech-recognition speech naturallyspeaking

有没有将Dragon NaturallySpeaking纳入事件驱动程序?如果我使用DNS录制用户语音输入而不将其写入屏幕并将其直接保存到XML,我的老板会非常喜欢它。我已经进行了几天的研究,如果没有(非常昂贵的)SDK,我无法看到这种情况发生,我甚至不知道它会起作用。

Microsoft能够编写一个(Python)程序,它的语音识别器可以等到检测到语音事件然后处理它。它还具有方便的质量,能够为其认为最好的猜测和记录.wav文件建议替代短语供以后使用。示例代码:

spEngine = MsSpeech()
spEngine.setEventHandler(RecoEventHandler(spEngine.context))

class RecoEventHandler(SpRecoContext):
def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result):
    res = win32com.client.Dispatch(Result)
    phrase = res.PhraseInfo.GetText()
    #from here I would save it as XML

    # write reco phrases
    altPhrases = reco.Alternates(NBEST)
    for phrase in altPhrases:
        nodePhrase = self.doc.createElement(TAG_PHRASE)

我似乎无法让DNS做到这一点。我能做的最接近的是:

while keepGoing == True:
    yourWords = raw_input("Your input: ")
    transcript_el = createTranscript(doc, "user", yourWords)
    speech_el.appendChild(transcript_el)
    if yourWords == 'bye':
        break

甚至还有一个可怕的副作用,就是让用户在每句话后说出“新行”!根本不是首选的解决方案!有没有让DNS做Microsoft Speech所做的事情?

仅供参考:我知道合乎逻辑的解决方案是简单地切换到微软语音,但我们假设,只是为了笑话和笑声,这不是一种选择。

更新 - 有没有人购买过SDK?你觉得它有用吗?

1 个答案:

答案 0 :(得分:8)

解决方案:下载Natlink - http://qh.antenna.nl/unimacro/installation/installation.html 它不像SAPI那样灵活,但它涵盖了基础知识,我几乎得到了我需要的一切。另外,需要为你机器上的所有用户下载它,它和Python,否则它将无法正常工作,它适用于每个版本的Python BUT 2.4。

下载后,可在C:\ NatLink \ NatLink \ MiscScripts \ natlink.txt下找到所有支持命令的文档。它位于文件顶部的所有更新之下。

示例代码:

#make sure DNS is running before you start
if not natlink.isNatSpeakRunning():
  raiseError('must start up Dragon NaturallySpeaking first!')
  shutdownServer()
  return
#connect to natlink and load the grammer it's supposed to recognize
natlink.natConnect()
loggerGrammar = LoggerGrammar()
loggerGrammar.initialize()
if natlink.getMicState() == 'off':
   natlink.setMicState('on')
userName = 'Danni'
natlink.openUser(userName)
#natlink.waitForSpeech() continuous loop waiting for input. 
#Results are sent to gotResultsObject method of the logger grammar
natlink.waitForSpeech()
natlink.natDisconnect()

代码的严格缩写来自我的生产版本,但我希望你明白这个想法。现在唯一的问题是我仍然必须返回迷你窗口natlink.waitForSpeech()创建单击'关闭'才能安全退出程序。一种在不使用timeout参数的情况下用信号通知窗口关闭python的方法非常棒。