Программисты Dragon NaturallySpeaking - PullRequest
9 голосов
/ 02 июня 2010

Есть ли способ включить 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?

К вашему сведению: я знаю, что логичным решением было бы просто переключиться на Microsoft Speech, но давайте предположим, просто ради ухмылки, что это не вариант.

ОБНОВЛЕНИЕ - Кто-нибудь купил SDK? Вы нашли это полезным?

1 Ответ

8 голосов
/ 15 июня 2010

Решение: скачать 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 без использования параметра timeout был бы фантастическим.

...