「OK Google(オーケーグーグル)」はAndroidのボイスアシスタント。これに赤外線リモコンで操作可能な家電を操作させてしまう方法です。
Amazonは昨年からEchoを提供しサービス範囲を急速に拡大中。AppleはHomeKitを提供、今後はスタンドアローン型をリリースするのではと噂されています。また、Googleは5月18日から開催されているGoogle I/O 2016でGoogle Homeを発表しました。各社とも対応家電を制御するスマートホーム用ガジェットについて人工知能と組み合わせた野心的な試みが顕著になってきました。
ちょっと先取り、というわけでもありませんが、Google Nowを活用してそれっぽいことが可能なのでご紹介します。
「OK Google、チャンネルをテレ東に」
▼ Android(スリープ状態でも可)に向かって「OK Google」と発声し、音声認識画面が出てきたら「チャンネルをテレ東に」と指示します。
▼ これをコマンドと認識させます。
▼ Androidから送信完了すると「TVチャンネル テレビ東京」と表示し、TVのチャンネルはテレビ東京に変わります。
今回はテレビを例にしていますが、ビデオ、エアコン、オーディオ、照明など、赤外線リモコンを使用するものは何でも音声で操作することが可能です。
仕組み(わかる人はここだけ読めばOK)
オープンソースのワイヤレス学習リモコン『IRKit』を利用し、「OK Google」をトリガーに信号を載せたコマンドをIRKitへ送ります。以下のエントリの応用です。
Androidの各タスクの自動化アプリ『Tasker』にカスタム音声コマンドを送ることができる『AutoVoice』を使用します。以下、その手順となります。
準備(必要なもの)
IRKitの準備
IRKitを設定して操作したい家電の赤外線リモコンを用意します。今回はテレビでテレ東にチャンネルを変える操作を例に説明します。
TVリモコンをIRKitに向けて、テレビ東京のチャンネルを押します(Ch7)。Terminalアプリなどから信号を取得します(詳細は以下のエントリを参考にどうぞ)。
▼ 信号はこんな感じでEvernoteに保存しておくと今後何かと便利です。
以下のスクリプトを自分の環境に合わせて、IRKitのIPアドレス、信号データ、画面表示文言を修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function main(){ xhr=new XMLHttpRequest(); xhr.open('post','http://<span style="color:#ff0000">IRKitのIPアドレス</span>/messages',false); xhr.send('{<span style="color:#ff0000">リモコンの赤外線信号</span>}'); } try{ main(); flash("<span style="color:#ff0000">Androidの画面に表示する文言</span>"); } catch(e){ flash(e.message); } exit(); |
私は上記の作業をMacで行いこれをDropboxに保存しています。最終的にはAndroid側でTaskerへ登録する必要があるためです。
Google Nowの設定
▼「OK Google」を有効にします。また、画面ロック状態からも呼び出せるように「常にON」にしておきますが、自分の声にしか反応しないように「信頼できる声」を有効にしておきます。
AutoVoiceの設定
▼ Google Nowで認識した内容をAutoVoiceが割り込んで取得できるように設定します。設定のアクセシビリティ(ユーザー補助)から「AutoVoice Google Now Integration」をオンにします。
▼ AutoVoiceの割り込みは音声のみにしておかないとタイピングした文字列にも割り込んでしまうため「Google Now Integration」から「Only Voice」にチェックを入れておきます。
Taskerの設定
▼ Profilesタブの画面下のプラス(+)をタップして「Event」を選択。
▼ カテゴリーから「Plugin」を選択。
▼ 「AutoVoice」をタップして「Recognized」を選択します。
▼ 「Configuration」の右横にある鉛筆アイコンをタップ。
▼ 「Speak Filter」をタップ。「お話しください」とマイクアイコンが出て、ポン♫と合図が鳴ったら登録するコマンドを話し掛けます。
短過ぎると他の音声コマンドとかぶる、逆に長過ぎてもGoogle Nowが誤認識する可能性もあるので注意します。
▼ 認識した音声コマンドの候補がいくつか出てくるので正解を選びます。正解がない場合は違う場所をタップしてもう一度やり直します。
▼ イベント編集画面に戻るので、左上の「<」をタップします。
▼ Profilesタブに戻り、タスク登録が求められるので「New Task」をタップして(識別できるように)タスク名を入力します。
▼ タスク編集画面の下中央にあるプラス(+)をタップして「Code」を選択し、次の画面では「JavaScriptlet」を選びます。
▼ 「Code」エリアへIRKitから取得して信号をコマンドにしたスクリプトを貼り付けます。私の場合はDropboxへ保存したテキストファイル経由でコピペします。
コードを貼り付けた後、「Code」欄見出しにある再生マーク(▶︎)をタップしてIRKitへコマンドを送信することが可能です。正常に動作するか確認しておいた方がよいでしょう。
▼ これでタスクが完成したので左上の「<」をタップします。
▼ 登録作業は以上で完了です。登録したプロファイルは個別にオフにしておくことも可能です。
音声コマンドについて
登録した音声コマンドは基本的に一字一句正しく認識させる必要があります。ただし、前後に何か単語が追加されても問題なさそうです。例えば、「チャンネルをテレ東に」の場合以下の通りです。
「TVチャンネルをテレ東に」 ・・・ 認識可
「チャンネルをテレ東に変えて」 ・・・ 認識可
「チャンネルをテレビ東京に」 ・・・ 認識不可
Amazon EchoやSiriと比較してみて
Amazon Echoは英語しか対応していませんが、何と言ってもウェイクワード(命令を出す前の単語)にそのまま続けて指令を出せるのが魅力です。ただし、対応家電という点においてデバイス側のソフトウェア対応が必須のためいまいち小回りが利きません。一番のネックは私の英語力です。
AppleのSiriは自然な日本語を理解しますので一字一句その通り命令する必要はありません。ただし、まだ対応デバイスが日本ではほとんどない点、Homebridgeは設定が複雑で正しく認識してくれないことがありイラッとすることがあります。
OK Googleは音声コマンドの認識ができればほぼ確実にIRKitへ正しく信号を送ってくれますが、EchoやSiriのように自然な言語を理解できないので原則的にはコマンドを一字一句覚えなければならないのは辛いところです。
日本の家電メーカーって何してるんだろう?経済産業省の規制のせい?この分野も日本は全くダメな気がしているのは私が素人だからでしょうか。
それにしてもIRKitは飽きさせないデバイス。サイコーです。