JavaScriptを使ったロボット作りの4回目です。
前回までブラウザを利用してロボットを操作していましたが、今回は音声入力を利用して寝ているロボットを起こし、ダンスをさせてみます。
こんな感じです。
ロボットの頭脳部、RaspberryPi2に接続しているマイクに向かって「ダンス」と話しかけます。
今回はRaspberryPi2のOS上にChromiumブラウザを起動させ、Web Speech Recognition API
を利用して音声認識を行います。
動画の方をご覧になると分かるのですが、R2D2っぽい音声と合わせてご機嫌な音楽も再生させてみました。
さて、簡単にまとめてみます。
Annyang.js
Chromeブラウザを利用してブラウザ上の要素を変更することができます。(画像やの変形や動画の再生など)
以前Qiitaにまとめました。
ブラウザで音声操作をする。(Speech Recognition API) - Qiita
これを応用してロボットを操作させるという作戦です。Web Speech Recognition API
をそのまま記述すると結構大変なので、以下のライブラリを利用します。
CDNも公開されているので、サンプルに沿って記述すれば簡単に音声コマンドを利用することが出来ます。
RaspberryPiでChromeを使う
そんな便利な音声認識ですが、RaspberryPiで使うときには結構苦労していました。音声認識の可能なChromeのバーションが49からなのですが、RaspberryPiで安定して導入できるChromiumが48まででした。
OSをUbuntuMATEにして、Electronアプリのサーバーサイドから音声認識APIを使うという、ちょっと裏技的なやり方を試したりしていたのですが、RaspberryPiのOSがアップグレードされて晴れて最新版Chromiumを利用することができるようになりました。
PIXEL: THE BRAND NEW DESKTOP FOR THE RASPBERRY PI
この新しいOSのデフォルトブラウザがChromiumになったので、安定した音声認識APIを利用することができるようになりました。iPad miniにリモートデスクトップした画面はこんな感じです。
こんな感じでRaspberryPi本体に接続したマイクを利用して音声認識を実行することが出来ます。
ロボットを起こす
|
|
|
|
こんな感じで、「ハロー」と声を掛けると目を覚まします。
ロボットにダンスをさせる
ついでにご機嫌なサウンドに乗せてロボットにダンスをさせてみます。
上記サンプルのクライアントサイドのコマンドを以下のように追加しました。
|
|
タイマー処理のネストがえらいことになっていますが、今回はこれでよしとします。サーバーサイドは音楽再生のコマンドを追加します。
|
|
まとめ
さて、えらいことになったネストはさておき、とりあえずJavaScriptだけを
使って、音声コマンドによるロボット操作は出来るようになりました。
少々残念なのがダンスのキレが無く、あんまり踊っているように見えないことです。(残念)
もう少し工夫してロボットの機能を増やせると良いな、と思います。ではまた。