ようこそゲストさん

無能日記

メッセージ欄

分類 【R&D(voice)】 で検索

一覧で表示する

2012/03/23(金) 音声認識リモコン作ってみた

はてブ 2012/03/23 7:44 R&D(voice)poti

はじめに

"引越ししたので未来なお部屋を作ってみた。"(http://d.hatena.ne.jp/rti7743/20120104/1325668680)
に触発されて、音声認識リモコンをつくってみた。
tx-50が放置ぎみだったので、せっかくなのでmeegoの勉強もかねてやってみました。

構成とか

  • ざっくりこんな感じです
音声リモコンc.png

技術的な話

今回はMeeGoに慣れるのに時間がかかった。というか結局最後まで慣れなかった。

TX-50にMeego入れて動かすまでは
http://blog.livedoor.jp/furikku9310/archives/52213664.html
ここら辺にまとまっててさっくり行きました。ありがとうございます。

当初は無線を2つ付けて無線APとWAN側も無線に仕様としていましたが、
どうも安定しないし、MeeGoの文化にまけたため、WAN側は有線にして、
hostapdだけ設定して無線APとしてだけ動くようにしました。

次にブリッジやDHCPDやdnsmasqなどのネットワーク周りを設定しました。
dnsmasq設定するときの注意点はconnmandがdns proxyしているので
rオプション付きで起動するようにする必要があります(/etc/rc.sysinit)。
その他はごくごく一般的。

まぁ、なんだかんだで、カーネルを再構築したりはしたんですが。

環境が整ったので、juliusを動かし音声認識をさせてみましたが、
当初はオーディオインターフェイスをつけていなかったため、
マイクのすぐ近くで喋らないと行けない状態でした、そこで、
入力に対してフィルタをかけれるUA-4FXをつかってみました。

UA-4FXを使っていますが、UA-3FXにある機能しか使っていないので、
UA-3FXでいいと思います。
入力に対して、ノイズをとって音をシャープにして音圧を調整しているだけで、
真空管エミュレータなんてものも使っていません。
どちらも、製造終了ですけど。。。。ヤフオクでは売ってます。

UA-4FXを導入すると割といい感じに離れたところから認識してくれるようになりました。

実は、juliusのプラグインで入力された音データに対して、自前でソフトウェア的に
フィルタかけたらよかったんじゃないのかとか思いますが、自分に音響系の
プログラム能力が無いので今回はあきらめました。
いつかやるかもしれません。

次に、juliusの設定周りをごにょごにょと。
http://d.hatena.ne.jp/hecomi/20120112/1326390200
この辺にかいています。大変ありがとうございます。
そして、やっていることが全く同じです。

さいごに、iremoconと通信するirmcdとirmcdに認識した文字列を通知する
juliusのプラグインを作りました。

プラグインの作り方はjuliusのドキュメントに書いるものベースで、
特に難しい事はしてません。

irmcdは送ってきた文字列に応じた処理をします。
リモートホストにつないで設定されたシナリオに従いコマンドを入力したり、
外部プログラムを実行したりします。

デモでは、外部プログラムで合成音声で喋らせる事で
動作が正常に行われたか判断できるようにしています。
合成音声にはaqestalk2を使いました。
また、天気を読み上げているのは、外部プログラムでもgoogleの天気取得apiを叩いて、
その内容を喋らせているだけです。
(このあたりのプログラムは整理して、githubに上げる予定)

とまぁ、だいたいこんな感じです。

これで家に帰ったら、"かみさま電気つけて"で電気をつけられるようになる。

1: えーちゃん 『「かみさまおねがい」にせずに拍手にしたらどうよ 他の音声拾うこと無いだろうし 1回で起動2回で終了』 (2012/03/25 10:37)

2: poti 『拍手はやったんだけど、ご判定が多すぎて使い物にならなかった。あとある程度長い間音量レベルが上がっていないと音声コマンドとして認識...』 (2012/03/25 12:56)

3: えーちゃん 『拍手が駄目なら指パッチン。 もっと無理か。 ナビみたいにユーザーの声を登録して声紋認証かねぇ しかも指向性マイクだし。 持ち運び...』 (2012/03/25 22:58)

4: poti 『今回使った、マイクは全指向性。 声紋認証までやるのは大変すぎる。』 (2012/03/25 24:58)