2010-08-29 35 views
0

我正在使用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输入的准确性差的原因?

谢谢!

回答

0

SpeechLib.dll是本机COM接口(SAPI)的COM互操作库。 SpeechRecognitionEngine是它的友好.NET类包装器。他们都访问完全相同的识别引擎。

您的录音可能存在某种问题。通常是音量问题,如剪辑(太大声)或太多噪音(太软)。通过实施AudioSignalProblemOccurred事件获取一些基本的诊断信息。

+0

很多!我已经试过了,当文件无法识别时,它确实转向AudioSignalProblemOccurred处理程序。但是我改回麦克风输入ASR,同时观察AudioSignalProblemOccurred(ASPO)事件的结果。我发现由于我的声音通过麦克风输入是连续的,并且在我的短语开始时有时会调用ASPO,但是在我的短语被完全说出之后,识别器可以理解它。所以我认为这就是为什么麦克风输入具有高精度的原因。 所以我想知道,我怎样才能修改我的WAV输入ASR的行为像麦克风输入,它可以重新调整 – JXITC 2010-08-30 15:45:24

+0

其实,我通过改变采样率从22000Hz解决它(这是默认设置我的录音应用程序)到16000Hz(这是识别器的默认设置)。准确度转为正常!哈哈 – JXITC 2010-08-31 06:09:50