Amazon EchoをRaspberry Piで自作する


Amazonの音声アシスタントAmazon Echo、すっごい欲しいのですが日本では技適が通っておらず、輸入できないらしい。

会社内で詳しい人に「でも欲しいっすね〜」と聞いたら、「自作する手がある」という答えをいただいたのでやっちゃいました。

Amazon EchoとAVSとRaspberry Pi

AVS(Alexa Voice Service)というAmazon Echoの裏側で動作している人工知能技術を利用した音声認識、自然言語サービスがあり、開発者向けという制限の下に、マイクとスピーカを接続したデバイスで動作させることができます。

また、サンプルアプリが公開されていて、以下のプラットフォームで動作させることができるようです。

  • Raspberry Pi
  • Linux
  • Mac
  • Windows
  • Raspberry Pi + Conexant 2-Mic Development Kit for Amazon AVS

今回はRaspberry Piを利用することにしました。

材料

全てAmazonで購入。

完成図

Raspberry Piの設定

SDカードのフォーマット

MacBook Proでマウントしてディスクユーティリティで初期化。

OSイメージの書き込み

OSイメージとしてraspbianをダウンロードする。今回はRASPBIAN JESSIE WITH PIXELを使う。

$ sudo dd bs=1m if=2016-11-25-raspbian-jessie.img of=/dev/disk2

SSH接続のための設定

現在の最新版2016-11-25リリースバージョンでは、リリースノートや以下のリンク先に書かれているようにデフォルトでSSHログインが無効化されているようです。

2016-11-25:
  * SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition

bootパーティションにsshという空ファイルを作っておくことでSSHログインできるようになります。

$ cd /Volumes/boot/
$ touch ssh

配線

OSイメージを書き込んだSDカードをRasbperry Piに差し込む。
Raspberry Piとマイクやスピーカーを繋げる。
また、LANケーブルを接続してIPアドレスが自動で取れるようにしておく。

最後に、電源ケーブルを接続する。

SSH接続

Raspberry Piが取得したIPアドレスをカンで当てます。

というか、

$ arp -a

で出てくるアドレスのうち、新しそうなものにSSHでログインを試して見ると、そのうち当たります。

$ ssh pi@<IPアドレス>

初期パスワードはraspberryなので、変えておきます。

VNC Serverのインストール

$ sudo apt-get install tightvncserver
$ tightvncserver
$ vi /home/pi/.config/tightvnc.desktop
tightvnc.desktop
[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

アカウント情報の取得

Amazon Developer アカウントの登録とALEXA デバイスの登録

https://developer.amazon.com/home.html
のアカウントを作成し、ALEXAタブからデバイスとセキュリティプロファイルを登録します。

この辺りは手順の通りに進めればOK。

ここで作成した

  • ProductID (Device Type IDのこと)
  • ClientID
  • ClientSecret

を後に利用します。

ALEXA AVS Sample Appのインストール

alexa-avs-sample-appのインストール

Raspberry Piにログインして

cd Desktop
git clone https://github.com/alexa/alexa-avs-sample-app.git

インストールスクリプトの設定

cd ~/Desktop/alexa-avs-sample-app
vi automated_install.sh

ここでautomated_install.sh内の

  • ProductID (Device Type IDのこと)
  • ClientID
  • ClientSecret

の項目に自分が取得したアカウントの情報を指定します。

インストールスクリプト実行

cd ~/Desktop/alexa-avs-sample-app
. automated_install.sh

いくつか質問されるが、そんなに回答に困るものはなかったと思います。(画面キャプチャするの忘れた・・・)

20分程度は時間がかかるので、しばし待ちましょう。

アプリ実行

Raspberry PiにVNCログインして、3つのターミナルを立ち上げてコマンドを順番に実行します。順番大事。

ターミナル1: AVS認証用のWebサービス実行

cd ~/Desktop/alexa-avs-sample-app/samples
cd companionService && npm start

ターミナル2: Sample App実行

cd ~/Desktop/alexa-avs-sample-app/samples
cd javaclient && mvn exec:exec

しばらくすると、ポップアップ画面が現れてAVSへの認証を促される。Amazon Developerアカウントでログインします。device tokens readyという表示が出ればOK。
このあたりの画面遷移は手順に詳しく書かれています。

ターミナル3: wake word engine実行

cd ~/Desktop/alexa-avs-sample-app/samples
cd wakeWordAgent/src && ./wakeWordAgent -e sensory

これを実行することで「ALEXA」とマイクで呼びかけると処理を実行してくれるようになります。

話しかけて遊ぶ

マイクの性能のせいか、自分の発音が良くないのか、なかなか認識精度が良くない・・・

でロケーションの設定や、会話のログが見れる。

http://www.atmarkit.co.jp/ait/articles/1612/08/news025.html
に紹介されていた、以下の会話が個人的には可愛かったです。是非聞いてみて。

試しに「Alexa, sing a song.」と言ってみたところ、「Who? Me? I couldn’t… I… Hit it!」(誰? 私が? できない… ええい、演奏して!)と言いながら、カントリー調でAlexaの日常を表現した歌を歌ってくれた。

雑感

材料さえ揃えれば、1~2時間で作れてしまうのでびっくりしました。
というより、ここまで開発者向けに丁寧なガイドを用意していることからAmazonの本気が伺えます。

参考にさせてもらったサイト