good Speech recognition API

72,901

I think desktop recognition is starting because you are using a shared desktop recognizer. You should use an inproc recognizer for your application only. you do this by instantiating a SpeechRecognitionEngine() in your application.

Since you are using the dictation grammar and the desktop windows recognizer, I believe it can be trained by the speaker to improve its accuracy. Go through the Windows 7 recognizer training and see if the accuracy improves.

To get started with .NET speech, there is a very good article that was published a few years ago at http://msdn.microsoft.com/en-us/magazine/cc163663.aspx. It is probably the best introductory article I’ve found so far. It is a little out of date, but very helfpul. (The AppendResultKeyValue method was dropped after the beta.)

Here is a quick sample that shows one of the simplest .NET windows forms app to use a dictation grammar that I could think of. This should work on Windows Vista or Windows 7. I created a form. Dropped a button on it and made the button big. Added a reference to System.Speech and the line:

using System.Speech.Recognition;

Then I added the following event handler to button1:

private void button1_Click(object sender, EventArgs e)
{         
    SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
    Grammar dictationGrammar = new DictationGrammar();
    recognizer.LoadGrammar(dictationGrammar);
    try
    {
        button1.Text = "Speak Now";
        recognizer.SetInputToDefaultAudioDevice();
        RecognitionResult result = recognizer.Recognize();
        button1.Text = result.Text;
    }
    catch (InvalidOperationException exception)
    {
        button1.Text = String.Format("Could not recognize input from default aduio device. Is a microphone or sound card available?\r\n{0} - {1}.", exception.Source, exception.Message);
    }
    finally
    {
        recognizer.UnloadAllGrammars();
    }                          
}

A little more information comparing the various flavors of speech engines and APIs shipped by Microsoft can be found at What is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition??

Share:
72,901

Related videos on Youtube

swordfish
Author by

swordfish

Open Source Enthusiast and Start Up Evangelist working for a corporate, with a start up culture, and an Agile Preacher.

Updated on July 09, 2022

Comments

  • swordfish
    swordfish almost 2 years

    I am working on a college project in which I am using speech recognition. Currently I am developing it on Windows 7 and I'm using system.speech API package which comes along with .net and I am doing it on C#.

    The problem I am facing is dictation recognition is not accurate enough. Then whenever I start my application the desktop speech recognition starts automatically. This is a big nuicance to me. As already the words I speak are not clear enough and conflicting recognition are interpreted as commands and actions like application switching minimize is being carried out.

    This is a critical part of my app and i kindly request you to suggest any good speech API for me other than this Microsoft blunder. It will be good even if it can understand just simple dictation grammar.

    • Tedd Hansen
      Tedd Hansen about 13 years
      There is no magic potion. Buy a better microphone and train the speech recognition engine. It also helps a lot to train on how you speak to it. Clear pronounciation is key. Also try to keep it in either command mode or dictation mode. It needs either a small set of commands, or to use sentence buildup to guess what words it heard. Mixing these will make it perform badly.
    • swordfish
      swordfish about 13 years
      Yes keeping them spearate did increase the accuracy of recognition a bit. Thanks...
    • Saeed A Suleiman
      Saeed A Suleiman almost 9 years
      Do you use a word list ? or do you want it to recognize any word ?
  • swordfish
    swordfish about 13 years
    thank you... i still have a long way to go but the time for my demonstration is getting closer... i think id have to train my system harder and faster. thanks for your help.
  • Viku
    Viku about 10 years
    Nice explanation mate . really helped me a lot.
  • Drew Noakes
    Drew Noakes about 9 years
    As SpeechRecognitionEngine is disposable, it should be in a using block. No doubt it uses native resources internally.