我正在使用C#.net库System.Speech来实现我的ASR应用程序(顺便说一句,我看过一篇文章提到SpeechLib.dll,这似乎是一个更基本和低级别的SAPI实施,是他们是一样的?)。我们的主要目的是作为服务器/客户端ASR系统来实现:在客户端记录用户的语音,并通过互联网将整个音频流传输到服务器,服务器处理ASR作业并将结果返回给客户端。.Net System.Speech从麦克风输入切换到WavFile输入时遇到问题?
我写了一个类似的应用程序,它使用本地麦克风作为语音输入,并且表现非常好。
我出身的应用程序:
SpeechRecgonitionEngine sr = new SpeechRecgonitionEngine();
sr.SetInputToDefaultDevice();
sr.RecognizeAsync();
就这样,我用输入麦克风,并且结果显示相当不错的准确性。
这就是问题所在。现在转到新任务,我必须将识别输入设置为WavFile(或通过TCP/IP套接字连接的音频流)。所以,我只是简单地改变了我的代码是这样的:
SpeechRecgonitionEngine sr = new SpeechRecgonitionEngine();
sr.SetInputToWaveFile(@"D:\input.wav");
sr.RecognizeAsync();
结果又将是不能令人满意的。我只是根据麦克风输入应用程序的相同语法预先将一些wave片段记录到多个文件中,并将这些文件设置为ASR输入。但是,只有一些文件可以被检测到(由SpeechDectectedEvent处理),并且很少有文件可以被很好地识别(由SpeechRecognizedEvent处理)。我只是记录与麦克风输入应用程序相同的短语。
尽管精度较差,但某些文件可以正确识别,这表明我的代码没有任何逻辑错误。但是我认为我在使用它之前错过了一些工作,例如设置识别器的一些参数。
所以我在这里寻求帮助,如果有人知道使用wavfile输入的准确性差的原因?
谢谢!
很多!我已经试过了,当文件无法识别时,它确实转向AudioSignalProblemOccurred处理程序。但是我改回麦克风输入ASR,同时观察AudioSignalProblemOccurred(ASPO)事件的结果。我发现由于我的声音通过麦克风输入是连续的,并且在我的短语开始时有时会调用ASPO,但是在我的短语被完全说出之后,识别器可以理解它。所以我认为这就是为什么麦克风输入具有高精度的原因。 所以我想知道,我怎样才能修改我的WAV输入ASR的行为像麦克风输入,它可以重新调整 – JXITC 2010-08-30 15:45:24
其实,我通过改变采样率从22000Hz解决它(这是默认设置我的录音应用程序)到16000Hz(这是识别器的默认设置)。准确度转为正常!哈哈 – JXITC 2010-08-31 06:09:50