10

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

微软有能力编写一个(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 那样做?

仅供参考:我知道合乎逻辑的解决方案是简单地切换到 Microsoft Speech,但让我们假设,只是为了笑容和咯咯笑,这不是一个选择。

更新 - 有人购买了 SDK 吗?你觉得有用吗?

4

1 回答 1

8

解决方案:下载 Natlink - http://qh.antenna.nl/unimacro/installation/installation.html 它不像 SAPI 那样灵活使用,但它涵盖了基础知识,我几乎可以从中获得所需的一切。此外,请注意,需要为您机器上的所有用户下载它和 Python,否则它将无法正常工作,并且它适用于 Python 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() 创建的迷你窗口以单击“关闭”,然后才能安全退出程序。一种在不使用超时参数的情况下从 python 发出关闭窗口的信号会很棒。

于 2010-06-15T15:03:43.137 回答