Перенаправить весь ввод с Dragon NaturallySpeaking на Python? (Используя Natlink) - PullRequest
6 голосов
/ 31 декабря 2011

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

Спасибо!

1 Ответ

3 голосов
/ 03 января 2012

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

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

Удачи!

...