11

私はMicrosoftの最新の音声認識(およびSpeechSynthesis)製品が本当に好きです。

http://msdn.microsoft.com/en-us/library/ms554855.aspx

http://estellasays.blogspot.com/2009/04/speech-recognition-in-cnet.html

ただ、文法を使うと少し制限がある気がします。

誤解しないでください。文法は、音声認識に注意すべき単語やフレーズを正確に伝えるのに最適ですが、注意を払っていないものを認識させたい場合はどうすればよいでしょうか。または、半分が事前に決定されたコマンド名と半分がランダムな単語であるフレーズを解析したいですか?

例えば..

シナリオA-「Google[OilSpill]」と言い、括弧内の用語の検索結果を使用してGoogleを開きたいと思います。

シナリオB -「[マンチェスター]を検索」と言い、Googleマップまたはその他の事前に決定されていないものでマンチェスターを検索したい

「Google」と「Locate」はコマンドであり、その後に続くのはパラメーター(そして何でもかまいません)であることを知ってもらいたいです。

質問:事前に決定された文法(音声認識が認識すべき単語)と、事前に決定された文法に含まれていない単語の使用を組み合わせる方法を知っている人はいますか?

コードフラグメント。

using System.Speech.Recognition;

...
...

SpeechRecognizer rec = new SpeechRecognizer();
rec.SpeechRecognized += rec_SpeechRecognized;

var c = new Choices();
c.Add("search");

var gb = new GrammarBuilder(c);
var g = new Grammar(gb);
rec.LoadGrammar(g);
rec.Enabled = true; 

...
...

void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    if (e.Result.Text == "search")
    {
        string query = "How can I get a word not defined in Grammar recognised and passed into here!";

        launchGoogle(query);
    }
}

...
...


private void launchGoogle(string term)
{
    Process.Start("IEXPLORE", "google.com?q=" + term);
}
4

2 に答える 2

6

このようなことを試すことができます...既知のコマンドのリストを指定しますが、後でオープンディクテーションを使用することもできます。オープンディクテーションの前にコマンドが与えられることを想定していますが、これを逆にして追加することもできます。ただし、コマンドタイプ( "")に空白を追加すると、ディクテーションに直接アクセスすることもできます。部。

Choices commandtype = new Choices();
commandtype.Add("search");
commandtype.Add("print");
commandtype.Add("open");
commandtype.Add("locate");

SemanticResultKey srkComtype = new SemanticResultKey("comtype",commandtype.ToGrammarBuilder());

 GrammarBuilder gb = new GrammarBuilder();
 gb.Culture = System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");
 gb.Append(srkComtype);
 gb.AppendDictation();

 Grammar gr = new Grammar(gb);

次に、レコグナイザーで結果テキストなどを使用します

private void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    System.Console.WriteLine(e.Result.Text);

}

必要に応じて、より多くの選択オプションとSemanticResultKeysを構造に追加して、より複雑なパターンを作成できます。また、ワイルドカード(gb.AppendWildcard();など)。

于 2010-07-29T23:16:21.750 に答える
4

2つの選択肢があります。

  1. GrammarBuilder :: AppendDictationを使用して、フリーテキストのディクテーションノードを使用できます。問題は、認識機能にはコンテキストがないため、認識が最高品質ではないことです。
  2. テキストバッファノードを使用し、GrammarBuilder :: Append(String、SubsetMatchingMode)を使用して一連のアイテムを提供できます。これにより、毎回文法ツリー全体を再構築しなくても、高品質の認識を取得するのに十分なコンテキストが認識機能に提供されます。
于 2010-06-15T17:08:15.753 に答える