Thursday 20 October 2011

Speech Recognition in .Net using C#

Speech recognition is a much more difficult task than simply making the computer speak. So you would think that it would mean that there would be a good 100 to 200 lines of code required to get the task done. But with .Net it's more like 8.

   1: SpeechRecognitionEngine RecognitionEngine = new SpeechRecognitionEngine();
   2: RecognitionEngine.LoadGrammar(new DictationGrammar());
   3: RecognitionResult Result = RecognitionEngine.Recognize();
   4: StringBuilder Output = new StringBuilder();
   5: foreach (RecognizedWordUnit Word in Result.Words)
   6: {
   7:     Output.Append(Word.Text);
   8: }

The code above should be pretty obvious as to what is going on, with one exception. The LoadGrammar line might give you some pause. The system basically needs to know what to be looking for and has two modes. The first mode is dictation. This is what you would use for something like Word (and is what I show above). The second mode is command mode. In that case you have to build your own grammar (passing in text words, etc. for it to look for). The main reason to use this if you wanted to control an application with specific phrases. Other things to note is that the code above is synchronous. If you wanted to, you can do this async and have it notify you when it's done. We have other options as well, such as the ability to tie it to a wave file, etc. just like the text to speech bit of code.

Anyway, the SpeechRecognitionEngine is apart of the System.Speech.Recognition namespace. It's basically our gateway to the built in speech recognition software that Microsoft uses. Well, sort of anyway... Normally when Microsoft puts something in .Net, it means that it will work.

Speech recognition doesn't seem to want to on Windows Server 2008... I spent the better part of a day trying to get it to work with nothing to show for it. Anyway, on Vista and Windows 7, this code will give you speech recognition. With XP, you have to download and install the Speech SDK from Microsoft. Windows Server 2003 seems to also work with that download, but Windows Server 2008 seems busted at this point (and I'm guessing there is no rush to fix that).

There are claims out there that you can get it to work but none of them have worked for me thus far. Anyway, I hope this helps someone. Give it a try, leave feedback, and happy coding.

No comments:

Post a Comment