2017-11-09 1 views
0

私はC++/CXで音声制御のUWPアプリケーションを作成しました(問題がある場合は、Hololens用)。非常にシンプルなもので、主にいくつかのサンプルによると、これは音声認識イベントハンドラです:GRXMLの音声コマンド同義語を作成する

void MyAppMain::HasSpoken(SpeechContinuousRecognitionSession ^sender, SpeechContinuousRecognitionResultGeneratedEventArgs ^args) 
{ 
    if (args->Result->Confidence == SpeechRecognitionConfidence::Medium 
     || args->Result->Confidence == SpeechRecognitionConfidence::High) 
    { 
     process_voice_command(args->Result->Text); 
    } 
} 

すべてがこれまでに動作しますが、認識結果はargs->Result->Text変数です。今では、非常に限定された音声コマンドをサポートするだけで、他のものはすべて無視する必要がありますが、その制限されたコマンドセットでは、いくつかの可変性が必要です。最後の例はthis pageです。だから私はそれに基づいて、次の文法ファイル作っ:

<grammar version="1.0" xml:lang="en-US" root="nextCommands" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0"> 

    <rule id="nextCommands"> 
    <item> 
     <one-of> 
     <item>next</item> 
     <item>go</item>   
     <item>advance</item> 
     </one-of> 
     <tag>out="next";</tag> 
    </item> 
    </rule> 

</grammar> 

私はそれで何をしたいですが、私は「次」のどちらかというとことで、「事前に」「行く」や、認識エンジンは、単に「次」を返し、上記はargs->Result->Textです。私が今実際にしているのは、認識された単語の集合をそれらの3つの単語に限定することですが、私が言う単語を単に「次へ」に変換せずに返します。これは、<tag>要素を無視するか、C++/CXプログラムで別の方法でコンテンツを取得する必要があるようです。または<tag>は、私が思うように動作しません。それを機能させるために私は何を変えるべきですか?

答えて

0

私はSRGSで(少なくとも質問に記載されている非常に単純なケースで)私が欲しいことをする方法を見つけました。だから、<tag>は認識結果を直接変更しないようです(少なくとも、tag-format="semantics/1.0"ではなく、hereのように他のtag-formatがあります。代わりに、追加のプロパティのコレクションが設定されます。だから、これは私が今の私のコードを変更する方法である:今

<grammar version="1.0" xml:lang="en-US" 
root="nextCommands" xmlns="http://www.w3.org/2001/06/grammar" 
tag-format="semantics/1.0"> 

    <rule id="nextCommands"> 
    <item> 
     <one-of> 
     <item>next</item> 
     <item>go</item>   
     <item>advance</item> 
     </one-of> 
     <tag>out.HONEY="bunny";</tag> 
    </item> 
    </rule> 

</grammar> 

、いずれかの場合に「次へ」、「行く」または「事前」に認識され、それはまだ変わらないargs->Result->Textに行くが、また、つもりはあり新しいことargs->Result->SemanticInterpretation->PropertiesHONEYキーとbunnyの値のペア。私はそれがそうであった場合

args->Result->SemanticInterpretation->Properties->HasKey("HONEY"); 

でチェックし、もしそうなら、

args->Result->SemanticInterpretation->Properties->Lookup("HONEY")->GetAt(0); //returns "bunny" 
でそれの値を取得することができます
0

または私はタグが正当な規則拡張である、それは、タグは文法や認識のプロセスで定義された法的な単語パターンを

は影響しないんだと思うように動作しません。文法を与えられた音声やその他の入力。詳細は Tags section of Speech Recognition Grammar Specificationをご確認ください。それは私がどちらかの「次の」と言ったときに認識エンジンがちょうど返し、「行く」や「進歩」ということであると私は何をしたいことは、「次」

音声認識で話された言葉を変換

フォーム入力用のテキストに変換します。 Constraintsまたは文法は、音声認識装置によって照合可能な音声単語および句を定義する。あなたが使った文法は、マッチの世界を定義するためのものです。同じコマンドを実行するために「次へ」、「進む」または「進む」が必要な場合は、テキスト結果を処理するときに対処できます。例えば、

// Start recognition. 
Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync(); 
// Do something with the recognition result. 
if (speechRecognitionResult.Text == "go" || speechRecognitionResult.Text == "next" || speechRecognitionResult.Text == "advance") 
{ 

} 

詳細は方法HandleRecognitionResultが含まれている公式のサンプルのScenario_SRGSConstraintを参照してください。

関連する問題