9

Vista で Microsoft の SAPI 5.3 Speech API を使用して、RecoProfile の音響モデル トレーニングをプログラムでどのように行うのですか? より具体的には、テキスト ファイルと、そのテキストを話しているユーザーの音声ファイルがある場合、そのテキストと音声を使用してユーザーのプロファイルをトレーニングするには、どのような SAPI 呼び出しを行うでしょうか?

アップデート:

この問題の詳細については、まだ解決していません。「最初」に ISpRecognizer2.SetTrainingState( TRUE, TRUE ) を呼び出し、「最後」に ISpRecognizer2.SetTrainingState( FALSE, TRUE ) を呼び出します。しかし、これらのアクションが他のアクションに対していつ発生する必要があるかはまだ不明です。

たとえば、音声に一致するテキストを使用して文法をセットアップするためにさまざまな呼び出しを行う必要があり、音声を接続するために他の呼び出しを行ったり、さまざまなオブジェクトを呼び出して「今すぐ行ってもいいです」と言ったりする必要があります。しかし、相互依存関係とは何でしょうか? 他に何をする前に何をしなければならないのでしょうか? また、入力にシステム マイクの代わりにオーディオ ファイルを使用している場合、相対的なタイミングの許容度が低くなりますか?

4

1 に答える 1

16

SAPI トレーニングの実装は比較的難しく、ドキュメンテーションでは、何を知る必要があるかについてはあまり説明されていません。

ISpRecognizer2::SetTrainingStateは、レコグナイザーをトレーニング モードに切り替えたり、トレーニング モードから切り替えたりします。

トレーニング モードに入ると、実際に行われるのは、レコグナイザーがユーザーに認識に関するより多くの余裕を与えることだけです。そのため、フレーズを認識しようとしている場合、エンジンは認識に関してそれほど厳格ではありません。

トレーニング モードを終了し、fAdaptFromTrainingData フラグを設定するまで、エンジンは実際には適応を行いません。

エンジンが適応すると、プロファイル データに保存されているトレーニング オーディオがスキャンされます。新しいオーディオ ファイルを、エンジンが適応のために見つけられる場所に配置するのは、トレーニング コードの役割です。

これらのファイルにもラベルを付ける必要があるため、エンジンは何が語られたかを認識できます。

では、どうやってこれを行うのですか?あまり知られていない 3 つの SAPI API を使用する必要があります。特に、 ISpRecognizer::GetObjectTokenSpObjectToken::GetStorageFileNameを使用してプロファイル トークンを取得し、ファイルを適切に見つける必要があります。

最後に、 ISpTranscriptを使用して、適切にラベル付けされたオーディオ ファイルを生成する必要もあります。

すべてをまとめるには、次のことを行う必要があります (疑似コード)。

インプロセス認識エンジンを作成し、適切なオーディオ入力をバインドします。

認識のためにオーディオを保持していることを確認してください。後で必要になります。

トレーニングするテキストを含む文法を作成します。

認識が発生したときにレコグナイザーを一時停止するように文法の状態を設定します。(これは、音声ファイルからのトレーニングにも役立ちます。)

認識が発生した場合:

認識されたテキストと保持された音声を取得します。

CoCreateInstance(CLSID_SpStream) を使用してストリーム オブジェクトを作成します。

ISpRecognizer::GetObjectTokenISpObjectToken::GetStorageFileNameを使用してトレーニング オーディオ ファイルを作成し、ストリームにバインドします ( ISpStream::BindToFileを使用)。

保持されたオーディオをストリーム オブジェクトにコピーします。

ISpTranscriptインターフェイスのストリーム オブジェクトを QI し、ISpTranscript::AppendTranscriptを使用して、認識されたテキストをストリームに追加します。

次の発話のために文法を更新し、レコグナイザーを再開して、トレーニング テキストがなくなるまで繰り返します。

于 2009-10-05T23:26:38.247 に答える