WP8の音声認識を試してみた(実装編)

↓の手順通りに実装したら動きます^^;

クイックスタート: 音声認識 (XAML) - Windows デベロッパー センター

とりあえず気を付けることとしては、先述した音声認識言語の設定と、プロジェクトの package.appxmanifest ファイル の設定を忘れていなければ、特にはまったりはしないのではないかと。

コード自体は(たぶん)問題ないと思うので、ここでは3種類の音声認識の制約について簡単にまとめてみます。 ※ちなみに検証とかしてませんので参考までにということで

定義済みの文法 (SpeechRecognitionTopicConstraint)

  • 特に指定しなかった場合に使われる
  • ユーザが話す内容を限定しない場合に便利
  • 音声認識はリモートサービスで実行され、結果が電話に返される

口述でのメモや、メッセージの入力なんかに使えそうです。反面、ネットワークを介して処理されてのでパフォーマンスに問題が出る場合もあるみたいです。

プログラムによる一覧の制約 (SpeechRecognitionListConstraint)

  • 単純な文法や単語の場合に便利
  • 文字列配列に指定した単語のどれかを認識したら成功

Yes/Noなどの選択や、複数の選択肢の中から一つを選んでもらうとかの、入力(話す内容)が想定でき簡潔である場合に使えそうです。

実装も簡易で、記事中には"軽量です"と書いているので処理?も負荷が少ないのではないかと。

SRGS 文法 (SpeechRecognitionGrammarFileConstraint)

  • SRGS(Speech Recognition Grammar Specification)文法を使う
  • (頑張れば)結構複雑な文法を定義することが可能
  • 指定した文法に一致しない入力を除外できる

一覧の制約では、どれか一つを選んでもらう程度しか実現できませんが、SRGS文法を使うと複雑な音声操作を実装できます。完全な自由入力ではなくて、文法に沿った範囲での入力が可能になる、というのがポイントでしょうか。

試してみた感じでは、圧倒的に私の英語力が足りないせいで、完全フリーの入力では思うように入力できませんでした(T-T)。口述筆記は私にはムリだ...orz

一方、制約を課すことで、私の下手糞な英語でもかろうじて?聞き取ってくれました。それっぽく発音していれば拾ってくれるし、明らかに別の言葉を喋ると認識失敗になる感じ。

SRGS文法のドキュメントはW3C公式の英語版しかなくてすでに諦めモードなんですが、一応、簡単で短めの英文なら表現できそうなので、どっかでコードとともに公開しようと思います。