6

Actualmente estoy escribiendo un programa de IA que recibe información de Dragon NaturallySpeaking (usando Natlink), la procesa y devuelve una salida hablada. Pude crear un Receiver GrammarBase que captura todas las entradas de Dragon y las envía a mi analizador.Redirigir todas las entradas de Dragon NaturallySpeaking a Python? (Usando Natlink)

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() 

Este código funciona como se esperaba, pero hay varios problemas:

  1. Dragón procesa la entrada antes de enviarlo a mi programa. Por ejemplo, si tuviera que decir "Abrir Google Chrome.", Abriría Google Chrome y luego enviaría la entrada a Python. ¿Hay alguna forma de enviar la entrada a Python sin procesarla primero?

  2. Cuando llamo waitForSpeech(), aparece un cuadro de mensaje que indica que el intérprete de Python está esperando la entrada. ¿Es posible (por razones estéticas y de conveniencia) evitar que aparezca el cuadro de mensaje y, en su lugar, finalizar el proceso de recolección de voz después de una pausa significativa del usuario?

¡Gracias!

Respuesta

3

Con respecto a su primera pregunta, resulta que el DNS usa el enunciado "Abrir ..." como parte de su proceso de resolución de comandos internamente. Esto significa que DNS resuelve el discurso y ejecuta el comando antes de que natlink tenga la oportunidad de hacerlo. La única forma de evitar esto es cambiar el enunciado de "Abrir ..." a "Disparador ..." en su gramática natlink (o en algún otro enunciado que el DNS no esté usando además de "Disparador").

Algunos de los desarrolladores natlink pasan el rato en speechcomputing.com. Puede obtener mejores respuestas allí.

¡Buena suerte!

+0

Bien, lo tengo! Muchas gracias por su ayuda, ¡salud! – Jian

+0

speechcomputing.com parece que está hecho para Google. Por lo que yo sé, está vacío de contenido útil. – Harry

+1

Desafortunadamente, ese sitio ya no se mantiene. Verifique el grupo de Yahoo de voicecoder en su lugar. – reckoner

Cuestiones relacionadas