SpeechRecognitionEngine Spoken 和 Recorded 不匹配

Posted

技术标签:

【中文标题】SpeechRecognitionEngine Spoken 和 Recorded 不匹配【英文标题】:SpeechRecognitionEngine Spoken and Recorded do not match 【发布时间】:2013-10-21 12:21:53 【问题描述】:

我正在使用SpeechRecognitionEngine 来识别用户所说的信息。该方法将在客户端的计算机上运行,​​它工作得很好,并且几乎可以像我想要的那样识别文本。所以我很高兴。

但是,我希望能够在我的服务器上对波形文件进行一些处理。现在我正在我的本地机器上进行测试,当我在识别器上使用SetInputToWaveFile 方法,并将相同的音频剪辑传回(引擎最初记录的那个)时,它不会给出任何接近原始匹配的东西(或替代品)。

例如: 用户说话,识别器返回短语:“Hello how are you today”,有 10 个替代词。 Wave文件被保存,然后使用SetInputToWaveFile(或SetInputToAudiostream)传入。识别器将返回一个短语(通常是一个单词),它与口语文本完全不同,例如“Moon”以及零替换词。

通常,这样做时,识别器不会引发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()

result 和 result2 的识别/匹配甚至不接近。

【问题讨论】:

【参考方案1】:

我手动设置了语音音频格式信息,现在可以正常使用了。

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

【讨论】:

以上是关于SpeechRecognitionEngine Spoken 和 Recorded 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft.Speech SpeechRecognitionEngine.setInputToDefaultAudioDevice() 方法抛出 System.InvalidOperation

Microsoft 语音识别属性调整

vb.net 捕获系统音频流

C# - 捕获 RTP 流并发送到语音识别

System.speech 应用程序的系统要求

锁定计算机会禁用 Windows 8.1 上的语音识别