はじめに
本エントリは未来のお部屋シリーズの第4弾です。
本シリーズでは、音声認識システムの Julius と TCP/IP 通信で制御できる赤外線学習リモコン iRemocon を繋いで音声認識による家電操作の実現を目指しています。
ついに!音声認識でお部屋の家電を操作できましたので、ご紹介します。
環境
使い方
Julius を module モードで動作させて認識した言葉を取ってくるところを前々回、前回とやりました。詳しくはそちらを参照して下さい。
まず、認識させたいパターンを kaden.grammar と kaden.voca に記述します。
kaden.grammar
S : NS_B KADEN_ NOISE PLEASE NS_E S : NS_B JUMON NS_E KADEN_ : KADEN KADEN_ : KADEN WO
kaden.voca
% KADEN テレビ t e r e b i 電気 d e n k i % WO を w o を o % PLEASE つけて t u k e t e 消して k e s i t e 切替 k i r i k a e 次 t u g i 前 m a e % JUMON バルス b a r u s u % NOISE <sp> sp % NS_B <s> silB % NS_E <s> silE
command.xml
<?xml version="1.0" encoding="UTF-8"?> <iRemocon> <command word="テレビ(を|)(つけて|消して)" num="1" /> <command word="テレビ(を|)切替" num="2" /> <command word="テレビ(を|)次" num="3" /> <command word="テレビ(を|)前" num="4" /> <command word="電気(を|)つけて" num="11" /> <command word="電気(を|)消して" num="12" /> </iRemocon>
後は、iRemocon に telnet 経由で接続して「ic;1
そして Julius を実行します。
./bin/julius -C hmm_mono.jconf -gram kaden -input mic -lv 100 -zc 1 -module
音声の大きさ(レベル)を調整する -lv オプションや x 軸との交差回数を指定する -zc オプションなどは適当に弄って下さい。
そしてここへ C++ のソースをコンパイルして出来た juli2ir からアクセスします。
./juli2ir
今後の展望
後は操作できる機器を増やすのと、部屋のどこにいても音声認識してくれるようにしたいです。現状だと 2 m くらい離れてしまうと、ちょっと大きな声で喋らないと反応してくれないので。Bluetooth の送受信機を 2 個買ったので、これで指向性マイクとかを使いながらうまいことできないかなぁ、と考えています。
iRemocon の操作に関しては、現状では 1 つの文章に対して 1 信号なので、例えば「テレビ音量3アップ」とかいうと3つ音量を上げてくれるような作りにしたりとか出来たら良いなと考えてます。
後は、iRemocon 以外の操作ができるようにしたいですね(構成図のマクロの部分)。
そのうちジェスチャーもチャレンジしたいなぁ。
追記
Twitter で色々と教えてもらいましたのでメモ。
バルス誤認識について
エントリそのままの設定ではキーボードの打鍵音でもバルスバルスしてしまいます。滅びの呪文がそれではまずいですよね。そこでアドバイスをいただきました。
@hecomi @siyo うちではコンピュータというプレフィックスつけてバルスって命令にしてます。誤認識対策は永久の課題です。最近、テストでニコニコのディスカッション番組聞かせてみて問題ないか見てますw
2012-01-17 01:03:20 via web to @hecomi
@hecomi @super_rti kaden.grammarに NS_B sp NS_Eみたいなノードを作るとバルス誤認識が減るかも(と予想)
2012-01-17 01:14:43 via YoruFukurou to @hecomi
Julius設定ファイルの省略
command.xml のような XML から grammar や voca が自動生成できたら楽ですよねー。
@hecomi 完成おめでとうございます。juliusの設定ファイルが統一されるかxmlから自動生成されればいいなと思ってます。たぶんjuliusのソース改変する必要がありそうだけど。
2012-01-17 00:58:17 via web to @hecomi
@hecomi 助詞にNOISEいれるならmecabとか使えば機械的に入れられそうですね。
2012-01-17 01:12:55 via web to @hecomi
信頼度の向上
これに関しても色々教わりました!