6

Attualmente sto scrivendo un programma AI che riceve input da Dragon NaturallySpeaking (usando Natlink), lo elabora e restituisce un output parlato. Sono stato in grado di creare un Receiver GrammarBase che cattura tutti gli input da Dragon e lo invia al mio parser.Reindirizzare tutti gli input da Dragon NaturallySpeaking a Python? (Utilizzo di 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() 

Questo codice funziona come previsto, ma ci sono diversi problemi:

  1. Drago elabora l'ingresso prima di inviarlo al mio programma. Ad esempio, se dovessi pronunciare "Apri Google Chrome", aprirà Google Chrome e quindi invierà l'input a Python. C'è un modo per inviare l'input a Python senza prima elaborarlo?

  2. Quando chiamo waitForSpeech(), viene visualizzata una finestra di messaggio che indica che l'interprete Python è in attesa di input. È possibile (per estetica e praticità) impedire che la finestra di messaggio venga visualizzata, e invece terminare il processo di raccolta vocale dopo una significativa pausa da parte dell'utente?

Grazie!

risposta

3

Rispetto alla prima domanda, si scopre che DNS utilizza l'espritance "Apri ..." come parte del suo processo di risoluzione dei comandi internamente. Ciò significa che DNS risolve il parlato ed esegue il comando prima che natlink abbia una possibilità. L'unico modo per farlo è cambiare l'espressione da "Apri ..." a "Trigger ..." nella tua grammatica natlink (o ad un altro enunciato che DNS non usa oltre a "Trigger").

Alcuni degli sviluppatori natlink si trovano su speechcomputing.com. Potresti ottenere migliori risposte lì.

Buona fortuna!

+0

OK, capito! Grazie mille per il tuo aiuto, evviva! – Jian

+0

speechcomputing.com sembra fatto per Google. Per quanto posso dire è vuoto di contenuti utili. – Harry

+1

Sfortunatamente, quel sito non viene più mantenuto. Controlla invece il gruppo Yahoo del voicecoder. – reckoner

Problemi correlati