エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 の音声認識の結果の操作

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

音声認識操作が終了した時点で、音声認識エンジンは、認識結果に関する情報を含んだ結果を返します。アプリは通常、認識結果を使用してユーザーの意図を判断し、オプションのリストの提示、検索の実行、ユーザーの入力の確認、ユーザーへの追加入力の要求など、次の操作を決定します。

認識が成功した (ユーザーの音声がアクティブな文法に一致していた) 場合、認識結果には、一般にアプリで最も有用な次の情報が含まれます。

  • 認識された語句のテキスト。

  • 音声入力が文法に一致しているかの確からしさを示す、音声認識エンジンにより割り当てられた精度のレーティング。

  • 認識された語句のセマンティクス (Speech Recognition Grammar Specification (SRGS) 文法の場合のみ)。

このトピックは、次のセクションで構成されています。

認識された語句のテキストは、ユーザーによる音声入力に対する音声認識エンジンの最適な一致である、文法の語句です。ユーザーの発声と正確には一致しない場合もありますが、有効な文法の中で、ユーザーの発声に最も近い語句です。セマンティクスを含まない文法では、アプリは一般に、認識したテキストを使用してユーザーの意図を解釈し、応答のアクションを開始します。

以下の例に、結果のオブジェクトで認識された語句のテキストにアクセスする方法を示します。

// Declare the SpeechRecognizerUI object at the class level.
SpeechRecognizerUI recoWithUI;

// Initialize the SpeechRecognizerUI object.
recoWithUI = new SpeechRecognizerUI();
        
// Handle the button click event.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
  // Display text to prompt the user's input.
  recoWithUI.Settings.ListenText = "Reminder...";

  // Give an example of ideal speech input.
  recoWithUI.Settings.ExampleText = "'Buy milk' or 'Call baby sitter'";
            
  // Load the pre-defined dictation grammar and start recognition.
  SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();

  // Access the text of the recognition result.
  MessageBox.Show("You said: " + recoResult.RecognitionResult.Text + "\nSave this reminder?");
}

冒涜的な言葉の処理

音声認識エンジンが定義済みの文法の種類を使用する場合、ユーザーがみだらな言葉を使うと、認識された語句に含まれるみだらな言葉は、音声認識結果の Text プロパティの <profanity> タグにカプセル化されます。

SpeechRecognizerUI クラスを使用している場合、表示される [Heard you say (聞き取り内容)] 画面で、みだらな言葉が個別に検閲されますが、実際の認識結果では、前述のようにカプセル化された <profanity> タグが使用されます。

認識結果で返されるみだらな言葉の取り扱いについては、開発者が適切と思われる方法を判断してください。

精度のレーティングは、音声認識エンジンでユーザーの音声がアクティブな文法の語句にどのくらい正確に一致したかを示す音声認識エンジンによる評価です。バックグラウンドの干渉音、不明瞭な音声、想定外の単語や単語の連なりなどのさまざまな理由により、音声認識エンジンは会話の入力に対して低い精度のスコアを割り当てる場合があります。

音声認識エンジンは、認識操作の結果で、可能性のある 1 つ以上の認識語句 (候補) を返す場合があります。候補は、文法に由来する語句です。認識の候補は、次のいずれかの方法で使用される場合があります。

  • 候補が 1 つのみであり、その精度スコアが事前定義されたしきい値以上である場合、音声認識エンジンは候補を音声入力にマッチングします。

  • 候補が 1 つのみであり、その精度スコアが事前定義されたしきい値未満である場合、候補は却下され、ユーザーの音声は認識されないことになります。

  • 音声入力の認識の候補が複数存在し、事前定義されたしきい値を満たしているかそれを超えていて、1 つの候補が他の候補よりも大幅に精度スコアが高い場合、レコグナイザーはより高いスコアの候補を音声入力に一致させます。

  • 事前定義されたしきい値以上の音声入力の認識の候補が複数存在し、その精度スコアが同じようなものである場合、Windows Phone 8 の標準の音声 GUI によって、[Did you say (発言確認)] 画面が表示されます。[Did you say (発言確認)] 画面には、ユーザーの発声に一致する可能性が最も高い文法の語句が最大 4 つ表示され、オプションで語句が再生されます。

認識操作が SpeechRecognizerUIRecognizeWithUIAsync() の呼び出しで始まり、ローカルな文法だけを使用してマッチングが行われている場合、[Did you say (発言確認)] 画面が自動的に認識の候補と精度スコアを処理します。 発声のマッチングが Low または Medium の精度スコアで、音声認識エンジンが候補を返した場合、[Did you say (発言確認)] 画面にはスコアの高い候補が最大 4 つ表示されます。

アプリでは、返された精度レベルと認識結果を組み合わせて使用して、認識結果に対する対処の方法を決定できます。たとえば、精度のレーティングが "high"の認識結果のみ、または "medium" 以上の認識結果のみをアプリで受け入れることができます。以下の例では、認識結果の精度レベルをチェックし、返された精度レベルに応じて音声入力に対してさまざまな応答を作成します。

// Declare the SpeechRecognizerUI object at the class level.
SpeechRecognizerUI recoWithUI;

// Initialize the SpeechRecognizerUI object.
recoWithUI = new SpeechRecognizerUI();
        
// Handle the button click event.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
  // Display text to prompt the user's input.
  recoWithUI.Settings.ListenText = "Find what?";

  // Give an example of ideal speech input.
  recoWithUI.Settings.ExampleText = " 'Coffee', 'ATMs', 'restaurants' ";

  // Prevents the Heard you say screen from displaying.
  recoWithUI.Settings.ShowConfirmation = false;
            
  // Add the web search grammar to the grammar set.
  recoWithUI.Recognizer.Grammars.AddGrammarFromPredefinedType(
          "webSearch", SpeechPredefinedGrammar.WebSearch);

  // Load the grammar set and start recognition.
  SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();

  // Check the confidence level of the recognition result.
  if ((int)recoResult.RecognitionResult.TextConfidence < (int)SpeechRecognitionConfidence.Medium)
  {
    // If the confidence level of the result is too low, prompt the user to try again and restart recognition.
    MessageBox.Show("Not sure what you said! Try again.");
    await recoWithUI.RecognizeWithUIAsync();
  }
                
  // If the confidence level of the result is good, display a confirmation.
  else
  {
    MessageBox.Show("Searching for " + recoResult.RecognitionResult.Text);
  }
}

セマンティクスは、Speech Recognition Grammar Specification (SRGS) バージョン 1.0 に準拠した XML 形式の文法を作成する際、文法の作成者が入力する情報です。セマンティクスでは、item 要素の内容、または ruleref 要素とそれによって定義される語句に意味を割り当てます。たとえば、セマンティクスの割り当てでは、認識できる都市名のリストで、都市の名前に空港のコードを割り当てる場合があります。ユーザーが文法に一致する都市名を発声した場合、音声認識エンジンでは都市の名前だけでなく空港のコードも返します。以下に示す SRGS 文法の抜粋は、文字列リテラルの形式のセマンティクス値を、item 要素の内容に割り当てる方法を具体的に示しています。item 要素内の tag 要素で、セマンティクス値を定義します。

<rule id = "flightCities">
  <one-of>
    <item>
      New York <tag> out = "JFK" </tag>
    </item>
    <item>
      London <tag> out = "LHR" </tag>
    </item>
    <item>
      Beijing <tag> out = "PEK" </tag>
    </item>
    </one-of>
</rule>

ruleref 要素へのセマンティクスの割り当てによって、たとえば空港のリストを使用した 1 回目のルール参照によって返される空港名をフライトの出発地とし、同じリストを使用した 2 回目のルール参照によって返される空港名をフライトの目的地とすることができます。次の例では、flightCities というルールへの 1 回目の参照の直後に tag 要素があります。この tag 要素は、flightBooker というルールのルール変数に LeavingFrom という名前のプロパティを作成し、flightCities ルールからの認識結果を LeavingFrom プロパティに割り当てます。flightCities ルールの 2 回目の参照では、flightCities ルールからの認識結果を GoingTo プロパティに割り当てます。

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

  <rule id="main" scope="public">
    
    <item repeat="0-1"> I want to </item>
    
    <item> fly from </item>

    <item>
      <ruleref uri="#flightCities"/>
      <tag>out.LeavingFrom = rules.latest();</tag>
    </item>

    <item> to </item>

    <item>
      <ruleref uri="#flightCities"/>
      <tag>out.GoingTo = rules.latest();</tag>
    </item>

  </rule>

  <rule id = "flightCities">
    <one-of>
      <item>
        New York <tag> out = "JFK" </tag>
      </item>
      <item>
        London <tag> out = "LHR" </tag>
      </item>
      <item>
        Beijing <tag> out = "PEK" </tag>
      </item>
      </one-of>
  </rule>

</grammar>

SRGS 文法が正しく展開されていることを確認した上で、ソリューションに追加するには、SRGS 文法の [ビルド アクション] プロパティを [コンテンツ] に設定し、[出力ディレクトリにコピー] プロパティを [新しい場合はコピーする] に設定します。

以下の例に、認識結果から、flightBooker 規則と flightCities 規則により定義されたセマンティクスの値 (空港のコードとフライトの出発地と目的地) を取得する方法を示します。

// Declare the SpeechRecognizerUI object at the class level.
SpeechRecognizerUI recoWithUI;

// Initialize the SpeechRecognizerUI object.
recoWithUI = new SpeechRecognizerUI();

// Handle the button click event.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
  // Display text to prompt the user's input.
  recoWithUI.Settings.ListenText = "Fly from where to where?";

  // Give an example of ideal speech input.
  recoWithUI.Settings.ExampleText = "'New York to London', 'London to Beijing', 'Beijing to New York'";

  // Initialize a URI with a path to the SRGS-compliant XML file.
  Uri bookFlights = new Uri("ms-appx:///FlightBooker.grxml", UriKind.Absolute);

  // Add the grammar to the grammar set.
      recoWithUI.Recognizer.Grammars.AddGrammarFromUri("bookFlights", citiesGrammar);

  // Load the grammar set and start recognition.
  SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();

  // Show the semantic information retrieved from the recognition result.
  MessageBox.Show(string.Format("The origin airport is " + recoResult.RecognitionResult.Semantics["LeavingFrom"].Value
        + " \nThe destination airport is " + recoResult.RecognitionResult.Semantics["GoingTo"].Value));
}

SRGS 文法でのセマンティクスの使用の詳細については、「タグ要素」、「文法規則変数の参照」、「タグ要素の使用」、および「セマンティクスの結果の内容」を参照してください。

表示:
© 2014 Microsoft