Qualche tempo fa avevo mostrato come realizzare un sistema di riconoscimento vocale basato su grammatiche utilizzando il .NET Framework 3.0. In quell'occasione ho dimenticato di fare una precisazione importante: per impostazione predefinita, quando si crea una grammatica essa utilizza sempre la cultura del sistema operativo; nel caso in cui essa sia diversa da quella dei motori di riconoscimento installati (ad esempio Windows XP italiano con lo Speech API 5.1 SDK), nel momento in cui si esegue il metodo SpeechRecognitionEngine.LoadGrammar, si ottiene una InvalidOperationException perché La lingua della grammatica non corrisponde alla lingua del riconoscimento vocale. Per evitare questo problema, è necessario impostare manualmente la lingua della grammatica:
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 GrammarBuilder builder = choices.ToGrammarBuilder();
11 builder.Culture = CultureInfo.GetCultureInfo("en-US");
12 Grammar grammar = new Grammar(builder);
13 sre.LoadGrammar(grammar);
14 sre.SetInputToDefaultAudioDevice();
15
16 RecognitionResult result = sre.Recognize();
17 //"result.text" contiene il testo riconosciuto.
18 }
In questo esempio (riga 11) si specifica che la lingua della grammatica è l'inglese: essendo la stessa del motore di riconoscimento, il caricamento (riga 13) avviene ora senza problema, anche se il sistema operativo è in italiano.
Technorati Tags:
.NET,
Programming,
C#