В настоящее время я пишу программу ИИ, которая получает входные данные от 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()
Этот код работает как положено, но есть несколько проблем:
Dragon обрабатывает ввод, прежде чем отправить его в мою программу. Например, если бы я сказал «Открыть Google Chrome», он бы открыл Google Chrome, а затем отправил ввод в Python. Есть ли способ отправить ввод в Python без предварительной его обработки?
Когда я вызываю функцию waitForSpeech(), появляется окно сообщения о том, что интерпретатор Python ожидает ввода. Можно ли (для эстетики и удобства) предотвратить отображение окна сообщения и вместо этого прекратить процесс сбора речи после значительной паузы пользователя?
Спасибо!