2012-01-17 12 views
1

私は、パラレルポートを介してリレーを制御するための簡単な音声認識アプリケーションを使用していました。これは、動作するはずの基本プログラムです。.NETでの音声認識が動作しない

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Speech.Synthesis; 
using Microsoft.Speech.Recognition; 

namespace speechHardware 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Create a new SpeechRecognitionEngine instance. 
      var sre = new SpeechRecognitionEngine(); 
      SpeechSynthesizer s = new SpeechSynthesizer(); 
      Console.WriteLine("starting recognizer......."); 
      s.Speak("starting recognizer."); 

      // Create a simple grammar that recognizes "light on", "light off", or "fan on","fan off". 
      Choices colors = new Choices(); 
      Console.WriteLine("option list......."); 
      colors.Add("light on"); 
      colors.Add("light off"); 
      colors.Add("fan on"); 
      colors.Add("fan off"); 

      GrammarBuilder gb = new GrammarBuilder(); 
      gb.Append(colors); 
      Console.WriteLine("starting grammer builder......."); 

      // Create the actual Grammar instance, and then load it into the speech recognizer. 
      Grammar g = new Grammar(gb); 
      sre.LoadGrammar(g); 

      // Register a handler for the SpeechRecognized event. 
      sre.SpeechRecognized += SreSpeechRecognized; 
      //sre.SetInputToWaveFile("C:\Users\Raghavendra\Documents\MATLAB\test.wav"); 
      sre.SetInputToDefaultAudioDevice(); 
      Console.WriteLine("input device recognised.......");   
      s.Speak("input device recognised."); 
     sre.RecognizeAsync(RecognizeMode.Multiple); 
      Console.ReadLine(); 
      Console.WriteLine("stopping recognizer....."); 
      sre.RecognizeAsyncStop(); 

     } 
     static void SreSpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
     { 
      SpeechSynthesizer s = new SpeechSynthesizer(); 
      Console.WriteLine("\nSpeech Recognized: \t{0}" + e.Result.Confidence, e.Result.Text); 

      if (e.Result.Confidence < 0.85) 
       return; 

      switch (e.Result.Text) 
      { 
       case "light on": 
        light(1);      
        s.Speak("the light has been turned on."); 
        break; 
       case "light off": 
        light(0); 
        s.Speak("the light has been turned off."); 
        break; 
       case "fan on": 
        fan(1); 
        s.Speak("the fan has been turned on."); 
        break; 
       case "fan off": 
        fan(0); 
        s.Speak("the fan has been turned off."); 
        break; 
       default: 

        break; 
      } 
     } 
     static void light(int val) 
     { 
      Console.WriteLine("\nSpeech Recognized:light "); 
     } 

     static void fan(int val) 
     { 
      Console.WriteLine("\nSpeech Recognized: fan"); 
     } 


    } 
} 

これは私の友人のコンピュータ上で完璧に動作しますが、私のコンピュータでは、それは私が話す何を認識しない、多分それは、入力を取得されていません。私たちはどちらもほぼ同じ設定をしています。マイクもうまく働いていて、何が間違っているのか分かりません。

私がインストールされている Microsoft音声プラットフォーム - ソフトウェア開発キット(SDK)、バージョン10.2(のx86版) Microsoft音声プラットフォーム - サーバーランタイム、バージョン10.2(のx86版)

私を助けてください。

+0

信頼値を記録してみます。それが何を出力するか見る。 – WoLfulus

+0

"どちらもほぼ同じ設定です"。違いは?構成を同じにして、問題がなくなるかどうか確認してください。あなたは何が違うかを知ると、問題が原因であるかどうかを知ることができます。 – ChrisF

+0

コントロールパネルの音声認識で「コンピュータを訓練して理解していますか?」を実行しましたか? –

答えて

0

自信を持って低い値を入力してください。多分あなたのマイクはあまりにも多くのノイズを持っているか、ミュートさえしていますか:)

+0

マイクを本当に閉じた状態に保っていました。 それは私の友人に私のほとんど0.9を与えていた 私もF11を使用してデバッグし、それは正常に動作します。私は何が間違っているのか分かりません。 –

1

あなたはsre.RecognizeAsyncStop()を呼び出しています。それが何らかの発言を認識する機会を得る前に。 asyncはブロックしないことを覚えておいてください。そうすれば、音声が認識されるまで待つことはありません。その行を削除すると正常に動作するはずです。

+0

私はConsole.ReadLine()を保持しました。私はそれが問題ではないと思うので、私はそれがプログラムが進むいくつかの入力を与えるときだけステートメント。 –

2

私はMicrosoft.Speech.RecognitionをSystem.Speech.Recognitionに置き換えただけです。

何が問題なのか理解していない。

0

あなたの友人はWindows XPを実行していると思われます。あなたはVistaまたは7を実行しています。私はマイクロソフトが実際にxpではなく、osパッケージの一部として音声認識を実際に含むと思います。これは、MicrosoftからSystemにインクルードを変​​更しなければならなかった理由の可能性があります。