SpeechRecognitionEngine
ユーザーが話している情報を認識するために使用しています。メソッドはクライアントのコンピューターで実行され、問題なく機能し、ほぼ希望どおりにテキストを認識します。だから私は幸せです。
ただし、サーバー上で wave ファイルの処理を実行できるようにしたいと考えています。現在、ローカル マシンでテストを行っていますがSetInputToWaveFile
、レコグナイザーでメソッドを使用し、同じオーディオ クリップ (エンジンによって最初に記録されたもの) を渡すと、元の一致 (または代替) に近いものは得られません。 .
例: ユーザーが話すと、レコグナイザーが次のフレーズを返します。SetInputToWaveFile
Wave ファイルが保存され、 (または)を使用して渡されSetInputToAudioStream
ます。認識エンジンは、音声テキストとはまったく異なるフレーズ (通常は 1 つの単語) を返します。たとえば、"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()
result と result2 からの認識/一致は、近くさえありません。