Перенаправить весь ввод с Dragon NaturallySpeaking на Python? (Используя Natlink)

В настоящее время я пишу программу ИИ, которая получает входные данные от Dragon NaturallySpeaking (используя Natlink), обрабатывает их и возвращает устный вывод. Мне удалось создать Receiver 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()

Этот код работает как положено, но есть несколько проблем:

  1. Dragon обрабатывает ввод, прежде чем отправить его в мою программу. Например, если бы я сказал «Открыть Google Chrome», он бы открыл Google Chrome, а затем отправил ввод в Python. Есть ли способ отправить ввод в Python без предварительной его обработки?

  2. Когда я вызываю функцию waitForSpeech(), появляется окно сообщения о том, что интерпретатор Python ожидает ввода. Можно ли (для эстетики и удобства) предотвратить отображение окна сообщения и вместо этого прекратить процесс сбора речи после значительной паузы пользователя?

Спасибо!


person Jian    schedule 31.12.2011    source источник


Ответы (1)


Что касается вашего первого вопроса, выясняется, что DNS использует фразу «Открыть ...» как часть внутреннего процесса разрешения команд. Это означает, что DNS разрешает речь и выполняет команду до того, как у natlink появится шанс. Единственный способ обойти это — изменить фразу с «Открыть…» на «Триггер…» в вашей грамматике natlink (или на какую-то другую фразу, которую DNS не использует, кроме «Триггер»).

Некоторые разработчики natlink общаются на сайте speechcomputing.com. Там вы можете получить лучшие ответы.

Удачи!

person reckoner    schedule 03.01.2012
comment
speechcomputing.com выглядит так, как будто он был создан для Google. Насколько я могу судить, в нем нет полезного контента. - person Harry; 09.10.2014
comment
К сожалению, этот сайт больше не поддерживается. Вместо этого проверьте группу голосового кодировщика Yahoo. - person reckoner; 13.10.2014