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のサンプルで確認が必要になる。日本語は未対応なので、英語で確認するのだが、英語の音声認識は、追加でセットアップが必要。

言語のオプション

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

音声認識のダウンロード

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

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

アプリ認定キットに悪戦苦闘 - 事前起動、SuspendingとResumingイベント処理2016年01月21日 09:21

UWPアプリのテストをひととおり終え、アプリ認定キットを実施、で、嵌まる。

アプリ認定キット不合格

事前起動テストの失敗、と、クラッシュの発生?さて、何が悪い?

PrelaunchActivated

アプリの事前起動は、アプリをすぐに使えるように、事前にバックグラウンドで起動しておくもの。そのままでは、App.xaml.csのOnLaunchedから、MainPageのOnNavigatedToまで進み、作り込んだ初期化処理が実行されてしまう。バックグラウンドを想定していない初期化処理があれば、そこでエラーになる。

追っかけていないが、サウンドの処理か、音声認識の処理か、リソースにアクセスする処理か、そのあたりが怪しい。とりあえず、e.PrelaunchedActivatedの状態を調べて、事前起動の際は、初期化処理に進まないようにOnLaunchedの処理を切り上げることで対処。

※アプリの事前起動の説明はこちら。

内部例外0xC000027B

これで、事前起動のエラーはなくなったが、クラッシュは消えない。ダンプファイルをVSで読み込んで確認すると、0xC000027Bの内部例外が起きている。この例外は厄介そう。

※0xC000027Bの内部例外について

SuspendingとResumingイベントハンドラ

MainPageにSuspendingとResumingのイベントハンドラ(図の赤枠)を追加する前に実行したアプリ認定キットの実施では、エラーが出ていなかったことから、この線で調べてみる。

イベントハンドラを追加したのは、mobile端末で、アプリ実行中にスタートボタンを押してアプリをバックグラウンドに追い出し、復帰させたとき、音声認識が利用できなくなることに対処しようとしたため。いったん、Suspendingで音声認識のリソースを解放し、Resumingで再初期化する。

音声認識まわりで、try...catchの不備を見ていくが、問題なさそう。バックグラウンドでのUI操作が怪しいとみて、UI操作とそれ以外のコードが未分離の部分の整理を進める。結果、別にUI操作は禁止というわけでもない様子。最後に残ったのは、x:Uidで定義した文字列をResourceLoaderで拾ってくる部分。ここの呼び出しを、Resumingのイベントハンドラからは抑止することで、クラッシュを解消。

この手のエラーは、VisualStudioからのデバッグ実行では、引っかからないので難儀。アプリ認証テストを20回近く繰り返す羽目に。おかげでバックグラウンドまわりの経験値は少しばかり向上したかも。ほかにも細かな不具合を見つけることができたのでよしとする。

立川シネマシティ 極上爆音上映2016年01月21日 19:01

今週は、毎日7回上映、ラストスパート、ということで立川へ。

立川シネマシティ

千葉からは、総武線各停→中央線快速、とほぼ一本でつながるとはいえ、こちらはやはり寒い。こんなに雪が残っているとは思わず。

極上爆音上映

お昼の回。かなりの席の埋まり具合。封切り翌週の船橋ららぽーとより多いくらい。音響はさすがの迫力。雷雨の中、近くに落雷したときくらいの迫力。スポーツだと割り切ってみているからそうでもないが、戦争映画だったら遠慮したくなるところかも。欲を言えば、この勢いで船舶の音も鳴ってくれると。

立川は独立系の映画館だからこそのサービス、とも言われるが、体感すると、その存在意義は確か。封切りからこれほど長く観客を集め続けるのも得心。昨晩、グリーンチャンネルで岡田さんが、競馬は個性の戦い、と言っていたが、ビジネスの世界もまさにそう。

そうそう、大洗とひたちなかのまちあるきもずいぶん参考になった。歩き見た場所がつぎつぎと。実際の風景をこう映像化するのかと、これもずいぶんと勉強になる。

からだを動かすリズム計 - アプリリリース2016年01月22日 15:55


からだを動かすリズム計

「からだを動かすリズム計」の名称で、ユニバーサルWindowsアプリをリリース。

※アプリのページ

開発時間は50時間強。うち、音声認識による操作の実装に12時間、アプリ認定キットで発覚したPrelaunch対応とSuspendingとResumingのイベントハンドラ内でのクラッシュ対応に10時間。1画面アプリで、既知の範囲で作る分なら30時間弱というところ。一連のテスト作業やアプリ登録のための文書書きなどを考えると、このあたりが手を抜かない最低ライン。

実際に使ってみると、こんな感じ。

腹筋運動)1.8秒/拍で身体を寝かすのと起こすので2拍、少し長めの方が負荷が高い。
スクワット)少し短めにして2拍、長めの1拍で2動作でも。
ダンベル運動)スクワットと同じくらい。腕の上げ下げで2拍とか。
柔軟運動)リズムは参考程度に。伸ばしは長めにしたいし。

やってみると、疲れてくるとテンポを上げていたのに気づく。一定のテンポにすると少しきつくなるが、無茶は防げるかな。あと、数を数えないで無心でというのも新鮮な気分。

音声認識の方は、無指向性のマイクを用意。これなら、少し離れたところにある机の上に置いておいても、声で指示が届く。腹筋とかだと、寝た位置と起きた位置はずいぶんと違うので、指向性のマイクだと届きにくい。

効果音は、ホイッスルの音が欲しかったので、奥の方から懐かしのMT32を取り出す。ずいぶんと久しぶりなのに、ちゃんと動くのは、さすが。MIDIの規格も偉大。同じRolandでUSBのインタフェースの方は、Windows10対応が打ち切られたので、新調。少々痛い出費。ハイレゾ対応が一歩前進したので、良しとするか。まあ、収録した音の方は、改善の余地が大きいような。

UA-25の延命なるか、lubuntuとalsaと2016年01月23日 21:44

アプリ開発のため、急遽、USBのAudio/MIDIインタフェースを新調。利用者登録をしたら、これまで愛用のUA-25は、Windows10対応の予定はなし、との連絡。Windows8の時は時間がかかっても対応してくれたので期待していたがやむなし。しかし、しっかりした筐体と音が出るのに処分するのは心許ない。しかし、今さら、古いWindowsとはつきあいたくない。

/proc/asound

思い立って、ESXiのゲストOSにLubuntuを載せて、UA-25をつないでみる。いつもは、SuSEだが、Ubuntu系も慣れておきたい、本家は重いので、Lの方。デバイスの方は、あっさりと認識。

speaker-test

音の方は最初、鳴らない。alsa関連を一度きれいに消して、再セットアップするのがよい、との記事があり、それにしたがって鳴るようになる。確認は、speaker-testを実施。次いで、sudo aplayでサンプルを鳴らす。ところが、一般ユーザだと鳴らない。これは、アクセス権が足りないので、自分をaudio groupに加えて解決。

※alsaの設定

次は、使えるMusic Player探し。世の中には色々あるが、ざっと、見渡すと以下のものがある。
・Alsaplayer
・Audacious
・Banshee
・GNOME MPlayer
・Rhuthmbox
・VLC

第一の要件は、UA-25を設定できること。Audacious、MPlayer、VLCはデバイスの選択機能があり、確実。残りは、標準デバイスからの出力。最初は音が出なくて悩む。

Gnome MPlayer config

MPlayerの設定画面。認識していれば、プルダウンメニューから選択できる。

FLACの再生

FLACを鳴らしてみる。きちんと鳴る。

第2の要件は、DLNAクライアントとして機能すること。音楽データは100GB以上あり、それをローカルにコピーするのは避けたい。上記の中では、BansheeとVLCがDLNAクライアントに対応。デバイスの設定機能と合わせると、VLC一択だが、使用しているDLNAサーバのTwonkyをうまく認識しない。Bansheeは認識するが、ファイルが多いせいか、ハング気味。どうにも、帯に短し、たすきに長しの世界。

foobar device conf

結局、少し折れて、Wineにfoobarをセットアップ。Wineの設定を行い、alsaのUA-25を認識。

foobar DLNA client

DLNAのクライアント機能は、アドオン追加になるが、軽快に動作。Twonky相手も問題なし。

foobar DLNAからのplaylist

無事に、DLNAサーバ上のファイルを使ってPlaylistを構築できる。これで、音楽を聴くためだけにPCを起動することは少なくできそう。

それにしても、できることはできるが、人に勧められる手順ではない。まあ、DIYの世界と思え、ということ。

Lubuntuにはxrdpでアクセス2016年01月24日 11:02

Lubuntuをセットアップするのはいいが、どうやってアクセスするか。ESXi上のゲストOSなので、vSphere Clientのコンソールが使えるが、普段使い向きでない。

いつもなら、馴染みのX端末エミュレータを使うところだが、XDMCPの一覧からログイン画面が出るところまで進んで、そこで切れてしまう。lightdmのログを見てみると、greeterが異常終了で切れている。Xエミュレータの描画まわりの機能が要件を満たしていない様子。

それなら、VNCと進むのが定番だが、RDP接続を試してみる。xrdpを設定。

xrdp login

RDPを起動すると、xrdpのログイン画面が出てくる。

LubuntuにRDPでアクセス

作業画面。端末エミュレータ、FireFoxにWine上のfoobar。Linuxなんだか、Windowsなんだか。設定が必要なのか、Windowサイズに解像度を合わせることはできず、ディスプレイの大きさにしかならない。まあ、支障はない。

lightdmの設定ファイル

デスクトップマネージャは、ホームディレクトリの".xsession"で指定。mate-sessionを選んだが、機種によっては、デスクトップマネージャがうまく起動せず、背景画像のみが表示されたままになる。その場合は、デスクトップマネージャをいろいろ変えてみる。xfceやLXDEの方が低スペックの機種でも動く様子。

なお、X端末エミュレータを使う場合のXDMCP設定は、上図の上の赤枠"50-xserver-command.conf"で。"[XDMCPServer]"のセクションを設けて、"Enabled=true"とする。

巴工業株主総会2016年01月28日 14:49


巴工業株主総会

巴工業は、機械と化学の会社。10月決算。シェールオイル関連銘柄の一つとしても数えられる。淡々とした進行だが、質疑では包み隠さず開示する姿勢が見られて好ましい。とはいえ、成長戦略の立案には苦心している様子。

さて、原油を巡る質疑。米国のシェールオイル産業が再び投資に積極的になる価格帯への問いに対し、1バレル$70~80との回答。強気筋でも$60とのこと。この分野は短期的には我慢が必要なようだ。