In un post di qualche giorno fa ho accennato al fatto che il riconoscimento vocale di Speech Server .NET è basato su grammatiche. Una grammatica, nella sua concezione più semplice, è costituita dall'elenco dei termini che il motore di ASR è in grado di riconoscere. Utilizzando il .NET Framework 3.0 è semplicissimo definire una grammatica e utilizzarla per riconoscere i comandi pronunciati dall'utente:
1 using (SpeechRecognitionEngine sre = new SpeechRecognitionEngine())
2 {
3 Choices choices = new Choices();
4 choices.Add("One");
5 choices.Add("Two");
6 choices.Add("Turn on the light");
7 choices.Add("Turn off the light");
8 //Altri termini da riconoscere...
9
10 Grammar grammar = new Grammar(choices.ToGrammarBuilder());
11 sre.LoadGrammar(grammar);
12 sre.SetInputToWaveStream(ms);
13
14 RecognitionResult result = sre.Recognize();
15 //A questo punto 'result.text' contiene il testo riconosciuto.
16 }
La variabile ms, utilizzata nella riga 12, è un oggetto di tipo MemoryStream che contiene il parlato da riconoscere: in questo esempio, infatti, si suppone che l'input dell'utente sia stato precedemente registrato e copiato in memoria.
La definizione di una grammatica richiede la creazione di un oggetto di tipo Choices, che deve essere popolato specificando i termini da riconoscere. Nel costruttore della classe SpeechRecognitionEngine è possibile indicare la lingua del riconoscitore che si intende utilizzare. Il riconoscimento vocale è disponibile solo nelle seguenti versioni di Windows Vista: inglese, francese, tedesco, spagnolo, giapponese e cinese (tradizionale e semplificato). Se si utilizza Windows XP, invece, installando lo Speech API 5.1 SDK si ha a disposizione un sistema di ASR nelle lingue inglese, giapponese e cinese semplificato.