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

Windows Phone 8 の音声認識の開始

2014/06/18

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

Windows.Phone.Speech.Recognition API には、2 つの音声認識エンジンが含まれています。それぞれの音声認識エンジンには、認識処理を開始するための独自のメソッドがあります。

  • SpeechRecognizerUIRecognizeWithUIAsync() は、SpeechRecognizerUI オブジェクトの認識を開始します。

  • SpeechRecognizerRecognizeAsync() は、SpeechRecognizer オブジェクトの認識を開始します。

認識処理は、アプリ ロジックによって開始される場合と、ユーザー入力 (ボタンを押す操作など) によって開始される場合があります。

SpeechRecognizerUIRecognizeWithUIAsync() が呼び出されるたびに、SpeechRecognizerUI オブジェクトは、ユーザーの発話と音声認識エンジンの文法セットに含まれる有効な文法とのマッチングを試みます。ユーザーが音声認識に成功できるよう支援するため、SpeechRecognizerUIRecognizeWithUIAsync() メソッドが提供する GUI により、ユーザーにプロンプトが表示され、フィードバックを提供して繰り返し試行できるようにします。

  • 認識に失敗した場合、SpeechRecognizerUI オブジェクトはエラー処理画面を表示し、必要に応じてユーザーが音声認識を繰り返し試みるよう促します。

  • ユーザーの発声が、有効な文法に定義されている 2 つ以上の語句と同程度の精度でマッチする場合、SpeechRecognizerUI オブジェクトは [Did you say (発言確認)] 画面を表示し、ユーザーが候補の中から選択できるようにします。

ユーザーにプロンプトを表示したり確認を求めたりする画面は、SpeechRecognizerUISettings クラスのプロパティを使用してカスタマイズできます。詳細については、「Windows Phone 8 のプロンプト、確認、不明瞭解消の選択肢の表示」を参照してください。

RecognizeWithUIAsync メソッドの例

次の例は、都市名を認識するアプリで、SpeechRecognizerUIRecognizeWithUIAsync() を使用し、GUI 画面のテキストを準備する方法を示しています。

public partial class MainPage : PhoneApplicationPage
{

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

  // Construct the main page.
  public MainPage()
  {
    InitializeComponent();

    // Initialize objects ahead of time to avoid delays when starting recognition.
    recoWithUI = new SpeechRecognizerUI();

    // Set the path to an SRGS-compliant XML file.
    Uri citiesGrammar = new Uri("ms-appx:///CitiesList.grxml", UriKind.Absolute);

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

    // Let the user know what to say.
    recoWithUI.Settings.ListenText = "Fly to what city?";

    // Give an example of expected input.
    recoWithUI.Settings.ExampleText = " 'Barcelona', 'Montreal', 'Santiago' ";
  }

  // Handle the button click event.
  private async void Reco1_Click(object sender, RoutedEventArgs e)
  {
    // Start recognition.
    SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();
  }
}

次のコード例は、対応する SRGS 文法ファイル CitiesList.grxml を示しています。

<?xml version="1.0" encoding="utf-8"?>
<grammar xml:lang="en-US" root="Main" tag-format="semantics/1.0" version="1.0" xmlns="http://www.w3.org/2001/06/grammar">
   <!-- Defines an SRGS grammar for choosing a city for  flight departures and destinations. -->
   <rule id="Main">
      <item repeat ="0-1"> I want to fly to </item>
      <ruleref uri="#Cities" />
   </rule>
   <rule id="Cities" scope="public">
      <one-of>
         <item> Seattle </item>
         <item> Sao Paulo </item>
         <item> Rome </item>
         <item> Tokyo </item>
         <item> Barcelona </item>
         <item> Montreal </item>
         <item> Santiago </item>
      </one-of>
   </rule>
</grammar>

SpeechRecognizerRecognizeAsync() が呼び出されるたびに、SpeechRecognizer オブジェクトは、ユーザーの発話と音声認識エンジンの文法セットに含まれる有効な文法とのマッチングを試みます。次のいずれかの状況で、認識は終了します。

  • 認識が成功した場合。ユーザーの発話が、有効な文法に含まれる特定の語句と一致した場合です。

  • 認識が失敗した場合。ユーザーの発話を、有効な文法に含まれる特定の語句とマッチングできなかった場合です。

  • 認識タイムアウト期間が期限切れになります。SpeechRecognizerSettingsInitialSilenceTimeout()SpeechRecognizerSettingsBabbleTimeout()、または SpeechRecognizerSettingsEndSilenceTimeout() のいずれかが経過すると、有効な文法とのマッチングの有無を問わず、認識処理は終了します。

タイムアウト設定の詳細については、「Windows Phone 8 の音声認識エンジンの設定のカスタマイズ」を参照してください。

一般に、SpeechRecognizerRecognizeAsync() を使用するのは、認識処理をサポートする GUI が不要な場合や、認識処理をサポートするカスタム GUI を提供する場合です。

RecognizeAsync メソッドの例

SpeechRecognizerRecognizeAsync() を使用して、SpeechRecognizerUIRecognizeWithUIAsync() の呼び出しに含まれる GUI 画面でのユーザー エクスペリエンスと類似した認識フローを提供する例を次に示します。

このアプリ コードの抜粋には、認識の試行の結果をチェックするコードと、ユーザーに対するプロンプトおよび確認をテキスト ブロックで表示するコードが含まれています。このアプリはさらに、SpeechRecognizerAudioCaptureStateChanged() イベントをサブスクライブし、このイベントから返される情報を使用して、ユーザーに "リッスン中" および "考え中" のメッセージを表示します。この例では、SpeechRecognizerUIRecognizeWithUIAsync() の呼び出しに含まれるものと同じチェックに加えて、音声入力が低い精度で認識されたかどうかのチェックも実行し、ユーザーにもう一度話すようプロンプトを表示します。ユーザーはボタンをタップして音声認識を開始できます。

public partial class MainPage : PhoneApplicationPage
{

  // Declare the SpeechRecognizer object at the class level.
  SpeechRecognizer myRecognizer;

  // Construct the main page.
  public MainPage()
  {
    InitializeComponent();

    // Initialize the SpeechRecognizer and add the WebSearch grammar.
    myRecognizer = new SpeechRecognizer();
    myRecognizer.Grammars.AddGrammarFromPredefinedType("citySearch", SpeechPredefinedGrammar.WebSearch);

    // Prompt the user for a city name.
    displayText.Text = "What's your destination city?";

    // Subscribe to the AudioCaptureStateChanged event.
    myRecognizer.AudioCaptureStateChanged += myRecognizer_AudioCaptureStateChanged;
  }

  // Detect capture state changes and write the capture state to the text block.
  void myRecognizer_AudioCaptureStateChanged(SpeechRecognizer sender, SpeechRecognizerAudioCaptureStateChangedEventArgs args)
  {
    if (args.State == SpeechRecognizerAudioCaptureState.Capturing)
    {
      this.Dispatcher.BeginInvoke(delegate { displayText.Text = "Listening"; });
    }
    else if (args.State == SpeechRecognizerAudioCaptureState.Inactive)
    {
      this.Dispatcher.BeginInvoke(delegate { displayText.Text = "Thinking"; });
    }
  }

  // Handle the button click event.
  private async void Reco1_Click(object sender, RoutedEventArgs e)
  {

    // Start recognition.
    SpeechRecognitionResult recoResult = await myRecognizer.RecognizeAsync();

    // Check to see if speech input was rejected and prompt the user.
    if (recoResult.TextConfidence == SpeechRecognitionConfidence.Rejected)
    {
      displayText.Text = "Sorry, didn't catch that. \n\nSay again.";
    }

    // Check to see if speech input was recognized with low confidence and prompt the user to speak again.
    else if (recoResult.TextConfidence == SpeechRecognitionConfidence.Low)
    {
      displayText.Text = "Not sure what you said. \n\nSay again.";
    }

    // Check to see if speech input was recognized and confirm the result.
    else if (recoResult.TextConfidence == SpeechRecognitionConfidence.High ||
          recoResult.TextConfidence == SpeechRecognitionConfidence.Medium)
    {
      displayText.Text = "Heard you say: \n\n" + recoResult.Text;
    }
  }
}

表示:
© 2015 Microsoft