SRGS文法制約を用いた音声認識でのTagの識別2016年01月17日 17:28

少し離したところにあるPC操作を想定したUWPアプリを想定し、音声認識による操作を試みる。身体を動かしながら、声で指示を出すイメージ。

このところ、MSのTweetがCortanaで喧しいので、Cortana連携が頭にあったが、Cortana連携は、システムからのアプリの起動などが用途。アプリ内の操作は、音声認識を組み込むことになる。

限られた数の短い単語を認識すればよいので、認識させたい言葉を記述したSRGS文法ファイルを、音声認識エンジンの制約に読み込ませる方式を採る。

※音声認識の制約についての説明

SRGS文法のXMLファイル

MSの解説やサンプルプログラムの定義ファイルを参考に、作ってみたもの。STARTとSTOPの2つの操作を行うための単語を3、4個列挙。

動かしてみると、認識した単語は取り出せる。しかし、単語や単語群に付加したtag情報が取り出せない。単語はバリエーションが多く、必要に応じ変更したいので、できれば操作はtag情報をもとに行いたい。

SpeechRecognitionResultのConstraintのTagは空

デバッガで止めて、SpeechRecognitionResultのConstraintを見てみると、Tagのフィールドが空。なお、認識した言葉は、Textフィールド。

MSのサンプルを確認すると、SpeechRecognitionSematicInterpretationのPropertiesに、連想リストが格納されるようにSRGS文法ファイルを構成し、(キー、値)の形でtag情報を取り込んでいる。最初のXMLファイルで、tag情報が、「out.キー = 値;」の形になっているのはそのため。なお、デバッガでは、生憎と内容を確認できない。

SpeechRecognitionSemanticInterpretationのPropertiesの解読

MSのサンプルを参考にして、(キー、値)を取り出す処理。1単語の指示なので、foreachで回す必要はないけど。キーは、"COMMAND"のみ。値は、"START"と"STOP"の2つ。

tag情報自体は、値だけあればいいのだけれど、Propertiesの型は、IReadOnlyDictionaryなので、連想リストの形にしなければいけない様子。

なお、音声認識精度は、機種というかマイクによる。mobile端末は、素性が電話なだけあって、ほぼ確実に認識する。ところがタブレットだと散々。「はじめ」「おわり」は認識するが、「すたーと」「すとっぷ」はからきし。いくつか認識候補を用意しておくことが必要そう。機能確認中、タブレット相手にMSの英語のサンプルを実施し、発音に自信をなくしかける。

英語の音声認識の追加設定2016年01月17日 18:37

音声認識のUWPアプリ開発(Windows10)にあたり、挙動が不明なところがあり、MSのサンプルで確認が必要になる。日本語は未対応なので、英語で確認するのだが、英語の音声認識は、追加でセットアップが必要。

言語のオプション

「設定」→「時刻と言語」→「地域と言語」と進み、言語のところで英語を選ぶと、オプションのボタンが現れる。

音声認識のダウンロード

その先に、音声認識のダウンロードボタンが現れる。

「システム」→「アプリと機能」→「オプション機能の管理」ではないところが、コントロールパネルの整理途上ということころ。