2

同じマシンで (同じ言語で) 2 つ以上の Microsoft 音声認識エンジンを使用できますか?

音声認識のタスクがあり、大きすぎる文法 (2000 以上の単語) を認識しようとしています。

そこで、この大きな文法を 2 つの文法に分けようと思います。最初のエンジンへの 1 つの文法ロードと、2 番目のエンジンへのその他のロード。

しかし、私にはわかりません。この SpeechRecognitinEngine インスタンスは、2 つの異なる音声エンジンを参照していますか、それとも 1 つのエンジンにリンクされているだけですか?

これが私のコードです:

List<String> words1 = new List<string>();
words1.Add("one");

List<String> words2 = new List<string>();
words2.Add("two");

var gr1 = MakeGrammar("gr1", words1);
var gr2 = MakeGrammar("gr2", words2);

var gr3 = MakeGrammar("gr1", words1); // create new grammar with name gr1- to check on grammar unic name exception.

MicSpeechRecEngine1.LoadGrammar(gr1);  (where MicSpeechRecEngine is SpeechRecognitionEngine)

MicSpeechRecEngine2.LoadGrammar(gr2);
MicSpeechRecEngine2.LoadGrammar(gr3);

public static Grammar MakeGrammar(String name,List<String> words)
{
    Choices choises = new Choices();
    GrammarBuilder gb = new GrammarBuilder();
    gb.Culture = new CultureInfo("en-US");


    if (choises == null)
        throw new NullReferenceException("choises is null!");
    if (words == null)
        throw new NullReferenceException("Words is null!");
    choises.Add(words.ToArray());

    if (gb != null)
    {
        //gb.Append(choises); 
        gb.Append(choises, 0, 10);
    }

    Grammar g = new Grammar(gb);
    g.Name = name;
    g.Priority = 0;
    g.Weight = 1.0f;
    g.Enabled = true;

    return g;
}

このコードは、両方のエンジンから「1 つ」と入力すると、うまく機能します。

私のポイントは、2 つ以上のエンジンを作成し、2 つ以上の大きな文法をロードし、それが異なるエンジンで認識される場合は、パフォーマンス (および検証) の認識を得ることです。

ありがとうございました!

PS お返事ありがとうございます!

わかりました、コードの一部を書き直します:

var gr3 = MakeGrammar("gr3", words3);

そこで、その行で新しい文法を作成します。そして、私はそれを2番目のエンジンにロードできます。

したがって、gr1 は Engine1 にロードされ、gr2、g3- は Engine2 にロードされます。

ばかげた質問ですが、Engine1 と Engine2 は、この文法 (文法は大きい) を認識するエンジンへの参照に過ぎないのでしょうか? 私は自分のマシンで 1 から N のエンジンを作成し、1 から N の文法 (1 つの大きな文法を 1 つのエンジンに) をロードし、それを認識しようとしているので、そうでないことを願っています。ありがとうございました!

4

2 に答える 2

3

あなたの問題は次のとおりです。

MicSpeechRecEngine1.LoadGrammar(gr1);  (where MicSpeechRecEngine is SpeechRecognitionEngine)

MicSpeechRecEngine2.LoadGrammar(gr2);
MicSpeechRecEngine2.LoadGrammar(gr3);

Chris がコメント セクションで述べたように、同じ文法を 2 回読み込んでいます。文法を作成する部分では、文法に次のように同じ名前を付けています。

var gr1 = MakeGrammar("gr1", words1);
var gr2 = MakeGrammar("gr2", words2);

var gr3 = MakeGrammar("gr1", words1);

gr3 と gr1 はどちらも SAPI と同じです。したがって、それらをロードすると、両方に「1」がロードされます。これが、「1つ1つ」を取得している理由です。

LoadGrammar() を呼び出すと、以前の文法がクリアされていると思います。だからコード:

MicSpeechRecEngine2.LoadGrammar(gr2);
MicSpeechRecEngine2.LoadGrammar(gr3);

実際には次のようになります。

MicSpeechRecEngine2.LoadGrammar(gr3);

とにかくSAPIに関する限り。

私が見たところ、実際には 2 つのレコグナイザーが実行されているように見えます。

于 2015-07-03T23:23:39.637 に答える
-1

1 ページのコードで 2 つの音声エンジンを実行できます。実際、異なる文字列を使用して多数の文字列を実行できます。私のスナップショットをいくつか挿入しています。 ここに画像の説明を入力

于 2021-07-30T13:16:39.240 に答える