2013-10-21 39 views
1

我正在使用SpeechRecognitionEngine來識別用戶說出的信息。該方法將在客戶端的計算機上運行,​​並且工作得很好,並且幾乎可以像我想要的那樣識別文本。所以我很高興。SpeechRecognitionEngine說出的和記錄的不匹配

但是,我希望能夠對我的服務器上的wave文件進行一些處理。現在我正在測試我的本地機器,並且當我在識別器上使用SetInputToWaveFile方法,並且將相同的音頻片段傳回(最初由引擎記錄的那個)時,它不會提供任何接近原始匹配(或替代方案) )。

例如: 用戶說話和識別器返回短語:「你好,你今天怎麼樣」與10個候補。 保存波形文件,然後通過使用SetInputToWaveFile(或SetInputToAudioStream)傳入。識別器將返回一個與發音文本無關的短語(通常是一個單詞),例如「Moon」以及ZERO替代詞。

通常,在執行此操作時,識別器不會引發RecognizeCompleted事件。但有時會提高SpeechHypothesized事件,其他時候會發生AudioSignalProblem事件。

不應該傳遞從識別器結果中捕獲的音頻片段,通過相同的識別器返回,返回相同的匹配嗎?

原文:

Private _recognizer As New SpeechRecognitionEngine(New CultureInfo("en-US")) 

_recognizer.UnloadAllGrammars() 
_recognizer.LoadGrammar(New DictationGrammar()) 
_recognizer.SetInputToDefaultAudioDevice() 
_recognizer.InitialSilenceTimeout = TimeSpan.FromSeconds(2) 
_recognizer.MaxAlternates = 10 
_recognizer.BabbleTimeout = TimeSpan.FromSeconds(1)  
Dim result As RecognitionResult = _recognizer.Recognize() 
Dim aud As RecognizedAudio = _result.Audio 'This is the audio that gets saved 
aud.WriteToWaveStream("mypath") 

(我已經刪除了一些邏輯代碼之間的拉出來的結果,並做一些處理)

現在試圖從音頻文件中拉出來:

_recognizer.SetInputToWaveFile("mypath") 

'Doesn't work either 
'_recognizer.SetInputToAudioStream(File.OpenRead("mypath"), New SpeechAudioFormatInfo(44100, AudioBitsPerSample.Sixteen, AudioChannel.Mono)) 

Dim result2 As RecognitionResult = _recognizer.Recognize() 

來自結果和結果2的識別/匹配不是很接近。

回答

0

我手動設置語音音頻格式信息,現在它完美的工作。

_recognizer.SetInputToAudioStream(File.OpenRead("mypath"), New SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, Nothing))