1

SpeechRecognitionEngineユーザーが話している情報を認識するために使用しています。メソッドはクライアントのコンピューターで実行され、問題なく機能し、ほぼ希望どおりにテキストを認識します。だから私は幸せです。

ただし、サーバー上で wave ファイルの処理を実行できるようにしたいと考えています。現在、ローカル マシンでテストを行っていますがSetInputToWaveFile、レコグナイザーでメソッドを使用し、同じオーディオ クリップ (エンジンによって最初に記録されたもの) を渡すと、元の一致 (または代替) に近いものは得られません。 .

例: ユーザーが話すと、レコグナイザーが次のフレーズを返します。SetInputToWaveFileWave ファイルが保存され、 (または)を使用して渡され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 からの認識/一致は、近くさえありません。

4

1 に答える 1

0

音声オーディオ形式情報を手動で設定したところ、完全に機能するようになりました。

_recognizer.SetInputToAudioStream(File.OpenRead("mypath"), New SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, Nothing))
于 2013-10-22T11:24:02.243 に答える