我正在使用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的識別/匹配不是很接近。