我正在使用C#.net库System.Speech来实现我的ASR应用程序(顺便说一句,我看过一篇文章提到了SpeechLib.dll,它似乎是SAPI的一个更基础和更低级别的实现,他们是一样的吗?)我们的主要目的是实现服务器/客户端ASR系统:在客户端上记录用户的语音,并通过互联网将整个音频流传输到服务器,服务器处理ASR作业并将结果返回给客户端。 / p>
我写了一个类似的应用程序,它使用本地麦克风作为语音输入,效果非常好。
我的原创应用:
SpeechRecgonitionEngine sr = new SpeechRecgonitionEngine();
sr.SetInputToDefaultDevice();
sr.RecognizeAsync();
通过这种方式,我使用麦克风进行输入,结果的准确性非常好。
这就是问题所在。现在转到新任务,我必须将识别输入设置为WavFile(或通过TCP / IP套接字连接的audioStream)。所以我只是简单地改变了我的代码:
SpeechRecgonitionEngine sr = new SpeechRecgonitionEngine();
sr.SetInputToWaveFile(@"D:\input.wav");
sr.RecognizeAsync();
结果变得令人不满意。我只是根据麦克风输入应用程序的相同语法,将一些波段分别预先录制到几个文件中,并将这些文件设置为ASR输入。但是,只能检测到一些文件(由SpeechDectectedEvent处理),并且可以很好地识别很少的文件(由SpeechRecognizedEvent处理)。我只记录与麦克风输入应用程序相同的短语。
尽管准确性较差,但可以正确识别某些文件,这表明我的代码没有任何逻辑错误。但我认为在使用它之前我错过了一些工作,例如设置识别器的一些参数。
所以我在这里寻求帮助,如果有人知道使用wavfile-input的准确性差的原因?
感谢!!!!
答案 0 :(得分:0)
SpeechLib.dll是本机COM接口(SAPI)的COM互操作库。 SpeechRecognitionEngine是友好的.NET类包装器。他们都访问完全相同的识别引擎。
您的录音可能存在某种问题。通常是音量问题,如剪辑(太大声)或太多噪音(太软)。通过实现AudioSignalProblemOccurred事件获得一些基本诊断。