有没有将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?你觉得它有用吗?
答案 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的方法非常棒。