c# - Windows 服务中的语音识别引擎未触发事件

标签 c# windows-services speech-recognition

所以我有一个使用 system.speech 识别引擎实现语音识别的 Windows 服务。当我启动服务时,我的语音识别代码运行良好,但没有语音识别触发事件。奇怪的是,如果我运行完全相同的代码,但在控制台或 WPF 应用程序中,语音识别的事件触发工作得很好。
我已经将调试器附加到我的服务进程以检查幕后发生的事情。似乎语音识别引擎正确加载了语法,将其模式设置为连续收听,并正确设置了语音识别事件。没有抛出异常,所以我不太确定这里出了什么问题。有什么想法吗?

最佳答案

SpeechRecognition 应该在单独的线程上运行,并且来自 SpeechRecognitionEngine 的 OOTB,应该是这样的:

static ManualResetEvent _completed = null;
static void Main(string[] args)
{
     _completed = new ManualResetEvent(false);
     SpeechRecognitionEngine _recognizer = new SpeechRecognitionEngine();
     _recognizer.RequestRecognizerUpdate(); // request for recognizer update
     _recognizer.LoadGrammar(new Grammar(new GrammarBuilder("test")) Name = { "testGrammar" }); // load a grammar
     _recognizer.RequestRecognizerUpdate(); // request for recognizer update
     _recognizer.LoadGrammar(new Grammar(new GrammarBuilder("exit")) Name = { "exitGrammar" }); // load a "exit" grammar
     _recognizer.SpeechRecognized += _recognizer_SpeechRecognized; 
     _recognizer.SetInputToDefaultAudioDevice(); // set the input of the speech recognizer to the default audio device
     _recognizer.RecognizeAsync(RecognizeMode.Multiple); // recognize speech asynchronous
     _completed.WaitOne(); // wait until speech recognition is completed
     _recognizer.Dispose(); // dispose the speech recognition engine
} 
void _recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
     if (e.Result.Text == "test") // e.Result.Text contains the recognized text
     {
         Console.WriteLine("The test was successful!");
     } 
     else if (e.Result.Text == "exit")
     {
         _completed.Set();
     }
}

当我使用 SpeechRecognition 而不是 SpeechRecognitionEngine 时也有类似的问题。 以上是一个很好的用法示例+它在另一个线程中监听事件。 p.s:我从一篇很棒的文章中得到了引用: Speech recognition, speech to text, text to speech, and speech synthesis in C#有 有趣:)

关于c# - Windows 服务中的语音识别引擎未触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377673/

相关文章:

c# - 定时Windows服务由于运行多个线程而崩溃

windows - 无法将 Go 应用程序 exe 作为 Windows 服务启动

python - 如何从 Dragon NaturallySpeaking 中的高级脚本语音命令调用 python 函数?

c# - MyToolkit for windows phone 7.x "Sorry we can' t play this file on your phone"for VEVO videos

c# - Chrome 显示 keyCode 未定义

c# - 使用 'WlanScan' 刷新 WiFi 网络列表(将 api 语法从 c# 转换为 vba...或解决方法?)

c# - 从列表框和文件夹中删除选定的文件

c# - Windows 服务的可执行文件的路径

android - 如何在待机状态下运行 Android 进程?

python - 3种python库中的MFCC和delta系数