0

ユーザーが相手側の受信機を手に取ったときに、ユーザーの声を検出する必要があります。

モデムは通常、最初のリングがそこに行くとファイル (再生端末) の再生を開始するためです。そのため、「こんにちは」と言うと音声認識を使用して、ファイルの再生を待つまでファイルの再生を開始できるようにすることを計画しました。

または、ノイズ干渉さえも話し始める可能性があります。

いくつかの設定でこれを達成しました。私が話しているときにエンジンが検出する一般的な単語と、エンジンが鳴っているときに来る単語をいくつか見つけました。スタンドアロン アプリケーションとしては正常に動作しますが、これを自分のアプリケーションに統合しようとすると、「SpeechHypotheized」イベントが発生しません。

なぜこれが起こるのか理解できません。

ブレークポイントを使用している場合、エンジンはデリゲートを割り当てており、呼び出しプロパティも適切に初期化されていますが、イベントが呼び出されていません。通話には C4F タピ マネージャーを使用し、音声認識には .Net 3.5 の System.Speech ライブラリを使用しています。

イベントのコードは次のとおりです。

 engine.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(engine_SpeechDetected);
 engine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(engine_SpeechRecognized);
 engine.SpeechHypothesized+=new EventHandler<SpeechHypothesizedEventArgs> (engine_SpeechHypothesized);                   
 engine.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(engine_SpeechRecognitionRejected);

speechhypothesized イベントを除くすべてのイベントが発生します。

なぜこれが起こるのか?

編集:

サービスによってエラーがスローされるのではなく、エラーをスローするのは Windows フォームです!!!

音声認識のコードは次のとおりです。

System.Collections.ObjectModel.ReadOnlyCollection<RecognizerInfo>

認識されたSpeeches = System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers(); if (recognizedSpeeches != null) {
Console.WriteLine("認識された音声:");
int 認識番号 = 0;

                    engine = new SpeechRecognitionEngine(recognizedSpeeches[recognizerNumber]);

                    engine.SetInputToDefaultAudioDevice();
                    engine.SpeechDetected -= new

EventHandler(engine_SpeechDetected); engine.SpeechRecognized -= 新しい EventHandler(engine_SpeechRecognized); engine.SpeechHypotheized -= 新しい EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected -= new EventHandler(engine_SpeechRecognitionRejected); engine.SpeechDetected += 新しい EventHandler(engine_SpeechDetected); engine.SpeechRecognized += 新しい EventHandler(engine_SpeechRecognized); engine.SpeechHypothesized+=new EventHandler(engine_SpeechHypothesized); engine.SpeechRecognitionRejected += new EventHandler(engine_SpeechRecognitionRejected); engine.LoadGrammar(新しい DictationGrammar());
RecognitionResult srResult = engine.Recognize(新しい TimeSpan(0, 0, 30)); }

どんな手掛かり????

4

1 に答える 1

0

フォームからコンソールアプリケーションを呼び出すことで、問題をある程度解決しました。Windowsフォームからコンソールアプリケーションを起動しても機能し、Windowsサービスでは機能しません。Windowsサービスが応答しない、または機能しない理由がわかりません。また、Windowsサービスがデフォルトでデスクトップで機能せず、仮説イベントがそれだけで発生する可能性があるか、この奇妙な動作を本当に理解していないか、理解できないためかもしれません。そして、私が見つけたSystem.Speechのもう1つの奇妙な動作は、SpeechRecognitionEngineを「InputToDefaultAudioDevice」に設定できないことです。関数「engine.SetInputToDefaultAudioDevice()」を使用しようとすると、エラーがスローされます(ウィンドウのフォームからのみ)。どうしてか分かりません???うーん、システム。音声クラスは、C#アプリケーションごとに動作が異なり、コンソールで最適です。この統計が儀式であるかどうかはわかりませんが、観察によれば、そのように聞こえます。

今のところ、フォームからコンソールアプリケーションを起動して認識し、問題を解決しました。これも正常に機能しています。

于 2010-03-04T08:11:24.950 に答える