プログラムと通信するために、C# と Windows の音声認識を使用しています。認識される唯一の単語は「はい」です。これは私のプログラムでは正常に機能します。唯一の問題は、音声認識がアクティブになっているため、私が言っていることを入力することです。音声認識プログラムを認識のみに制限する方法はありますか一言、この場合は「はい」という言葉ですか?
ありがとうございました
プログラムと通信するために、C# と Windows の音声認識を使用しています。認識される唯一の単語は「はい」です。これは私のプログラムでは正常に機能します。唯一の問題は、音声認識がアクティブになっているため、私が言っていることを入力することです。音声認識プログラムを認識のみに制限する方法はありますか一言、この場合は「はい」という言葉ですか?
ありがとうございました
「音声認識が有効になっているので、私が言っていることを入力します」とはどういう意味ですか? デスクトップ認識エンジンは引き続き実行され、コマンドを処理するということですか? おそらく、共有認識エンジンではなく、インプロセス認識エンジンを使用する必要があります (「System.Speech.Recognition を使用すると、Windows 音声認識が開きます」を参照してください) 。
ディクテーション文法を使用していますか? 限られた一連の単語またはコマンドのみを認識したい場合は、口述文法を使用しないでください。GrammarBuilder (または同様のもの) を使用して、単純な文法を作成します。http://msdn.microsoft.com/en-us/library/hh361596を参照してください。
数年前に公開された非常に優れた記事がhttp://msdn.microsoft.com/en-us/magazine/cc163663.aspxにあります。これはおそらく、これまでに見つけた中で最高の紹介記事です。少し時代遅れですが、非常に便利です。(AppendResultKeyValue メソッドは、ベータ版の後に削除されました。) Pizza を注文するための文法を構築する方法の例を見てください。
心に留めておくべきことの 1 つは、単語が 1 つの文法では多くの誤検知が発生する可能性があることです (認識エンジンが文法内の何かと一致させようとするため)。少なくとも「はい」と「いいえ」を入れて、比較できるようにすることをお勧めします。
コードが次のような場合:
SpeechRecognitionEngine recognitionEngine = new SpeechRecognitionEngine();
recognitionEngine.SetInputToDefaultAudioDevice();
recognitionEngine.SpeechRecognized += (s, args) =>
{
foreach (RecognizedWordUnit word in args.Result.Words)
{
Console.WriteLine(word.Text);
}
};
recognitionEngine.LoadGrammar(new DictationGrammar());
if ステートメントを使用するだけです。
foreach (RecognizedWordUnit word in args.Result.Words)
{
if (word.Text == "yes")
Console.WriteLine(word.Text);
}
RecognitionEngine.SpeechRecognized は、単語を認識するたびに発生するイベント ハンドラーであり、次のような他の方法で使用できることに注意してください。
{
recognitionEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
}
//this method is static because I called it from a console main method. It can be changed.
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Console.WriteLine(e.Result.Text);
}
私の例はコンソールにありますが、GUI でも同じように機能します。