MMDAgentとPC-OP-RS1で実現するリモコンの音声操作

2012年1月にネット上で引越ししたので未来なお部屋を作ってみた。という記事が話題になったのをご存知でしょうか。

この記事の中で一際注目すべきは、音声認識により学習リモコンのiRemoconを制御し、家電を操作可能にしていることです。

ただし音声認識とiRemoconの制御はC#(?)でプログラミングされており、初心者にはなかなか真似できるものではありません。また、iRemoconも実売価格が\24,900と高価です。

そこで、ここではフリーの対話型エージェントソフトであるMMDAgentとBUFFALOのPC用学習リモコンPC-OP-RS1(実売価格\4,272)を使って、手軽にリモコンの音声操作を実現する方法を紹介します。

MMDAgentのインストール

MMDAgentとは

MMDAgentは名古屋工業大学国際音声技術研究所がオープンソースで開発している音声インタラクションシステムです。MMD(MikuMikuDance)のモデルやモーションデータを使用して、音声認識と音声合成によるやり取りを行うことができます。(参考:MMDAgentとは (エムエムディーエージェントとは) [単語記事] - ニコニコ大百科)

MMDAgentは音声認識・音声合成などのためにJulius、Open Jtalkなどの複数のオープンソース技術を使用していますが、これらの面倒なセットアップは一切不要で、MMDAgentの配布バイナリとサンプルスクリプトだけで簡単に使用できます。

MMDAgentのインストール・実行

MMDAgent公式サイトから「MMDAgent」と「MMDAgent "Sample Script"」のBinary Packageをダウンロードして解凍します。

サンプルスクリプトに含まれる「MMDAgent_Example.mdf」を、本体の「MMDAgent.exe」にドラッグ&ドロップして実行します。拡張子.mdfをMMDAgent.exeに関連付けておけば、スクリプトから直接実行できるようになります。

MMDAgent MMDAgent

「こんにちは」と話しかけてみましょう。マイクが認識しない場合はボリュームコントロールの設定で「録音コントロール」がミュートになっていないか確認して下さい。また、MMDAgentの発声した音声が認識され、繰り返し応答してしまう場合、「録音コントール」の「ステレオ ミキサー」をミュートにしてください。

MMDAgentの基本的な使い方

マウス・キーボード等の基本操作については以下のページが参考になります。

一応簡単にまとめておきます。

マウス操作

ドラッグ                : 視点の移動
Shift + ドラッグ        : 視点の水平,垂直移動
マウスホイール          : ズームイン,ズームアウト
Shift + Ctrl + ドラッグ : 光源の移動
モデルをダブルクリック  : モデルを選択

キーボード操作

矢印キー         : 視点の移動
Shift + 矢印キー : 視点の水平,垂直移動
+, -             : ズームイン,ズームアウト
ESC              : MMDAgentの終了

X            : セルフシャドウのオン,オフ
E, Shift + E : エッジの増減
L            : カーソルの追従のオン,オフ
P            : 物理演算のオン、オフ
W            : ワイヤーフレーム表示のオン、オフ

F            : フルスクリーンの切り替え
S            : FPSの表示切り替え
D            : ログの表示切り替え
B            : ボーン表示切り替え
Shift + W    : モデルの剛体の表示切り替え
Shift + J    : ボリュームバー表示
Shift + F    : FSTログの表示(上:これまでの状態遷移の履歴、下:次に実行される遷移)
Shift + V    : 垂直同期のオン,オフ
Shift + X    : セルフシャドウの表示方法の変更
Ctrl + ←,→ : モーションと音楽がずれているときに音ズレを調整
V            : コマンドダイアログの表示切替
Delete       : 選択したモデルの削除
H            : モーションの停止

MMDAgentの応答のカスタマイズ

MMDAgentの認識するキーワードや応答はサンプルスクリプトの「.fst」ファイルで定義されています。

.fstファイルは、下記の四項目が一文字以上の半角スペースまたはTABで区切られたフォーマットとなっています。行頭に「#」を加えるとコメントになります。(参考:MMDAgentのFSTコマンド解釈法(シナリオ作成方法) _文法編 - 竹倉蔵本 - MMDAgent)

  • 遷移元状態番号
  • 遷移先状態番号
  • イベント名(遷移条件を設定しない場合は"<eps>"を記入)
  • コマンド名(実行アクションを設定しない場合は"<eps>"を記入)

例えば「こんにちは」の応答の定義は以下のようになっています。3列目と4列目の文言を変更して再起動すれば、応答が変化します。

# 0031-0040 Hello
1  31 RECOG_EVENT_STOP|こんにちは SYNTH_START|mei|mei_voice_normal|こんにちは。
1  31 RECOG_EVENT_STOP|こんにちわ SYNTH_START|mei|mei_voice_normal|こんにちは。
31 32 <eps> MOTION_ADD|mei|action|Motion\mei_greeting\mei_greeting.vmd|PART|ONCE
32 2  SYNTH_EVENT_STOP|mei <eps>

.fstファイル内で使用できるコマンドは、サンプルスクリプトの.fstにコメントで列挙されているほか、MMDAgentのFSTコマンド解釈法(シナリオ作成方法) _単語編 - 竹倉蔵本 - MMDAgentなどで紹介されています。

EXECUTEコマンドにより音声認識時に任意のファイルが実行できるので、後ほどこれを利用してリモコン制御を行います。

PC用学習リモコンPC-OP-RS1のセットアップ

PC-OP-RS1はPCに接続して使用できる学習リモコンです。任意のリモコンの赤外線信号を記憶させ、PCからコントロール可能にします。

通常は添付のアプリケーションで使用することになっていますが、有志が作成したツールによりコマンドラインからの使用が可能です。

PC-OP-RS1 PC-OP-RS1

KuroRS.exeでPC-OP-RS1をコマンド操作

学習リモコンのおすすめは?その15 >>743からKuroRS.zipをダウンロードして解凍します。

KuroRS.exeを引数なしでコマンドラインから実行すると使い方が表示されます。

リモコンの信号を学習させる場合は以下のように実行します。(COM3より学習した結果をhoge.datへ保存)

> KuroRS.exe 3 hoge.dat

学習した信号を送信する場合は以下のように実行します。(COM3よりhoget.datのデータをPORTAへ送信)

> KuroRS.exe 3 hoge.dat 1

MMDAgentは実行ファイルに引数を渡すことができないので、上記の送信コマンドをバッチファイル化しておきます。

cd "C:\path\to\KuroRS"
KuroRS.exe 3 hoge.dat 1

なお、PC-OP-RS1の送信信号はあまり強くないようなので、機器がうまく反応しない場合はLEDをギリギリまで近づけて試してみてください。

MMDAgentによる音声認識リモコン操作

さて、いよいよMMDAgent経由でリモコン操作をするための設定です。EXECUTEコマンドで、KuroRS.exe用のバッチファイルを実行するよう指定します。

# 0201-0210 Air conditioner ON/OFF
1 201 RECOG_EVENT_STOP|エアコン SYNTH_START|mei|mei_voice_normal|エアコンの運転を切り替えます。
201 2 SYNTH_EVENT_STOP|mei EXECUTE|C:\path\to\.bat

これで、「エアコン」と指示すれば、「エアコンの運転を切り替えます。」と応答した後に、PC-OP-RS1経由でエアコンのスイッチが入るはずです。

おわりに

未来なお部屋を作ってみた」の記事を読んだあとすぐにPC-OP-RS1を注文し、1週間以内くらいにはこの仕組を完成させていたんですが、記事にするのがだいぶ遅くなってしまいました。

MMDAgentについては他にも面白い使い方があるので、後ほどもうひとつくらい記事を書きたいと思っています。

参考・関連ページ

MMDAgent関連

PC-OP-RS1関連

追記@2012/06/21

blog comments powered by Disqus