2010-06-01 11 views
9

Esiste comunque un modo per incorporare Dragon NaturallySpeaking in un programma basato su eventi? Il mio capo mi piacerebbe molto se usassi il DNS per registrare l'input vocale dell'utente senza scriverlo sullo schermo e salvarlo direttamente in XML. Ho fatto ricerche per diversi giorni e non riesco a vedere un modo per farlo senza l'SDK (molto costoso), non so nemmeno che funzionerebbe allora.Programmatori Dragon NaturallySpeaking

Microsoft ha la capacità di scrivere un programma (Python) in cui il riconoscimento vocale può attendere fino a quando rileva un evento vocale e quindi elaborarlo. Ha anche la qualità utile di essere in grado di suggerire frasi alternative a quella che ritiene sia la migliore ipotesi e di registrare il file .wav per un uso successivo. Esempio di codice:

spEngine = MsSpeech() 
spEngine.setEventHandler(RecoEventHandler(spEngine.context)) 

class RecoEventHandler(SpRecoContext): 
def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result): 
    res = win32com.client.Dispatch(Result) 
    phrase = res.PhraseInfo.GetText() 
    #from here I would save it as XML 

    # write reco phrases 
    altPhrases = reco.Alternates(NBEST) 
    for phrase in altPhrases: 
     nodePhrase = self.doc.createElement(TAG_PHRASE) 

Non riesco a fare DNS farlo. Il più vicino che posso fare-succhiotto a è:

while keepGoing == True: 
    yourWords = raw_input("Your input: ") 
    transcript_el = createTranscript(doc, "user", yourWords) 
    speech_el.appendChild(transcript_el) 
    if yourWords == 'bye': 
     break 

Essa ha anche l'effetto collaterale orribile di rendere l'utente dire "nuova linea" dopo ogni frase! Non la soluzione preferita a tutti! Esiste comunque la possibilità che DNS faccia ciò che Microsoft Speech fa?

FYI: So che la soluzione logica sarebbe semplicemente passare a Microsoft Speech ma supponiamo, solo per ghigni e risatine, che quella non è un'opzione.

AGGIORNAMENTO - Qualcuno ha acquistato l'SDK? Lo hai trovato utile?

+3

@WarrenP: Questo ragazzo lo usa per il 40% -60% del suo sviluppo. È vero che out of the box non è utile, ma usando Natlink e VI/Emacs ha una configurazione piuttosto dolce. http://www.youtube.com/watch?v=8SkdfdXWYaI –

+0

@WarrenP Hai mai provato? Lo uso sempre ed è molto più veloce dell'uso della tastiera (anche se uso le tastiere dal momento che ho 6 anni significa che ho un WPM piuttosto alto). Per la programmazione sono d'accordo sul fatto che ha bisogno di miglioramenti, ma è comunque utile. Vedi [Come possiamo utilizzare Dragon NaturallySpeaking per codificare in modo più efficiente?] (Http://productivity.stackexchange.com/q/3605/2476) –

+0

Posso scrivere a 120 WPM. Non ho mai visto gli utenti di testo in lingua inglese colpiti da 40 WPM. Definisci HIGH wpm? –

risposta

8

Soluzione: download Natlink - http://qh.antenna.nl/unimacro/installation/installation.html Non è così flessibile da utilizzare come SAPI ma copre le nozioni di base e ho ottenuto quasi tutto ciò di cui avevo bisogno. Inoltre, heads up, it e Python devono essere scaricati per tutti gli utenti sulla tua macchina o non funzionerà correttamente e funziona per ogni versione di Python BUT 2.4.

La documentazione per tutti i comandi supportati si trova in C: \ NatLink \ NatLink \ MiscScripts \ natlink.txt dopo averlo scaricato. È sotto tutti gli aggiornamenti nella parte superiore del file.

codice Esempio:

#make sure DNS is running before you start 
if not natlink.isNatSpeakRunning(): 
    raiseError('must start up Dragon NaturallySpeaking first!') 
    shutdownServer() 
    return 
#connect to natlink and load the grammer it's supposed to recognize 
natlink.natConnect() 
loggerGrammar = LoggerGrammar() 
loggerGrammar.initialize() 
if natlink.getMicState() == 'off': 
    natlink.setMicState('on') 
userName = 'Danni' 
natlink.openUser(userName) 
#natlink.waitForSpeech() continuous loop waiting for input. 
#Results are sent to gotResultsObject method of the logger grammar 
natlink.waitForSpeech() 
natlink.natDisconnect() 

del codice gravemente abbreviato dalla mia versione di produzione, ma spero che si ottiene l'idea. Unico problema ora è che devo ancora tornare alla mini-finestra natlink.waitForSpeech() crea per fare clic su 'Chiudi' prima di poter uscire in sicurezza dal programma. Un modo per segnalare alla finestra di chiudere da Python senza utilizzare il parametro timeout sarebbe fantastico.

Problemi correlati