2010-08-29 104 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