凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

作ってきた音声認識家電コントロールシステムのまとめ

はじめに

今年初めに公開された引越ししたので未来なお部屋を作ってみた。 - お前の血は何色だ!! 4 に触発され、リモコンはオワコン。音声認識でお部屋の家電を操作してみた。 - 凹みTips なる記事を書きましたが、最近はiRemocon も音声認識対応し、FHCPluto など各種音声リモコンも製品化されてきまして、音声家電操作も目新しいものではなくなってきた気がします。
前述のエントリの公開以来、Node.js とか勉強しながら約 1 年間チマチマとやってきましたが、もうすぐ発売する FHC を注文したこともあり、取り敢えず現状のシステムを公開して、FHC 発売後はそちらにマージ & 別ネタの開発に移ろうかなー、と思っています。で、今どんな感じなのよ、というものをまとめてみました。

システム概観

Node.js でサーバを立ち上げ、そこで音声認識/音声合成/赤外線発信を処理しています。音声は集音マイクの入力を Bluetooth で送り、離れた 2 箇所でも音声コマンドを実行できるようにしています。リモコンの学習やテスト、「おやすみ」といったら電気/モニタを消すといったコマンド類は、ブラウザから設定できるようにしています。これらの処理内容は MongoDB を利用して格納しています。また node-serialport & XBee を利用して ZigBee により無線で部屋の温度を取得しています。これで自動的に部屋の温度を調整することができます。簡単に中身の処理を書くと以下のようになります。


利用してる自作モジュール

以下の自作モジュールを利用しています。

ブラウザでの処理

UI は twitter-bootstrap ベースで作っているので手抜きですが…、以下のような感じで処理します。

[メイン画面]

機器やその機器に関連した機能、それを利用する音声を登録します。どんな赤外線信号を出すかは「学習」ボタンを押すと iRemocon が学習モードになるので、iRemocon へ向けて赤外線信号を発信すれば OK です。これらの処理は socket.io を利用して socket 通信しているので、クリックと同時にリアルタイムに実行、DB への登録を行うようになっています。

[Socket.io で通信してリアルタイムに反映]

また、JavaScript でマクロを書くことができます。

ブラウザ上でコードのテストも出来るのでデバッグもラクラクです。時間を教えてもらったり Twitter の返信を読み上げてもらったり、ZigBee と通信して温度を教えてもらうみたいなことはここに書きます。ただ、温度自動調整だけは node-cron で回すので別途スクリプトを回しています。マージしようと思ったけど力尽きました。

使ってみてる感じ

私は 4 畳に一人暮らししているので雑音も少なく声も届きやすいので、かなり実用的だと思います。ただボイチャとかすると簡易な呼びかけフィルタでは誤認識を防ぎきれないので、そこは FHC に期待しています。

おわりに

本テーマを通じて、Node.js をはじめ、色々なことを 1 年間で学ぶことができました。何かこういう目的を持って開発をすると勉強も捗りますね。
来年は何をやろうかなぁ。