Amazon Echoを6,000円で自作する 〜Raspberry Pi 3 + Alexa Voice Services (AVS)〜

音声は新しいパラダイムシフトになる 〜2016年度版メアリー・ミーカー氏レポートまとめ〜 でも触れたように、次世代デバイスとしてAmazon Echoは注目するべき存在です。

しかしながら、日本では技適の関係で未だ使用できません。
ただ、Alexa Voice Services (AVS) というものが公開されており、Amazon Echoを様々なデバイスで動作させることが可能です。

今回は、Raspberry Pi 3からAVSを利用できるようにしました。
セットアップについては下記にある通りですが、低予算での最低限の手順をまとめてみます。 https://github.com/amzn/alexa-avs-raspberry-pi

完成したもの

いきなり動画ですが、こんな感じで動きます。英語で話かけると、リクエストを解釈して実行してくれたり、音声で応答してくれて面白いです。

用意したもの

音声入力にUSBマイクロフォンが必要なので、Raspberry Pi 3と併せて購入。他はありあわせで用意しました。
Raspberry Pi用のディスプレイを用意してもよいですが、今回はVNC server (Linux版リモートデスクトップ) を使います。

買ったもの

ありあわせ

Raspberry Pi を起動する

OSイメージの準備

以下の記事を参考に進めました。
Raspberry Pi 3にRaspbianをインストール(Mac OS X を使用)

  • Rasbian Jessie は 2016-05-27 リリースのものを用いました
  • ddコマンドのオプションで、ブロックサイズは大文字 (bs=1M) で指定しました

起動手順

  1. MicroSD、LAN、 USBマイクロフォン、スピーカーを接続しておきます。
  2. 電源用としてUSBケーブルを挿すとBIOSが起動します。今回はOSであるRaspbian Jessieも自動で起動しました。

必要なアカウント・ライブラリの準備

AVSを利用するために必要なものを諸々準備します。

Amazon Developer アカウントの登録

下記よりアカウントを登録します。登録済みであれば不要です。
https://developer.amazon.com/login.html

サンプルアプリのダウンロード

公式のGithub上にある Sample app をダウンロード&解凍して下記のようにデスクトップなどのパスに保存します。

/home/pi/Desktop/alexa-avs-raspberry-pi-master/

VNC Serverのインストール

# install
$ sudo apt-get install tightvncserver
# run
$ tightvncserver
# auto run setup
$ vi /home/pi/.config/tightvnc.desktop

tightvnc.desktop

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

VNCでRaspberry Piへアクセス

Macからアクセスする手順は こちら をご参照ください。

VLCのインストール

VLC media playerをインストールします。

# install
$ sudo apt-get install vlc-nox vlc-data
# add env vars
$ echo "export LD_LIBRARY_PATH=/usr/lib/vlc:$LD_LIBRARY_PATH" >> ~/.bashrc
$ echo "export VLC_PLUGIN_PATH=/usr/lib/vlc/plugins" >> ~/.bashrc
$ soure ~/.bashrc

NodeとNPMのインストール

後に出てくるサーバーの起動に必要なNodeとNPMをインストールします。

# apt-get update & upgrade. It takes about 15 min.
$ sudo apt-get update && sudo apt-get upgrade
# install nodejs
$ curl -sL https://deb.nodesource.com/setup | sudo bash -
$ sudo apt-get install nodejs
$ cd /home/pi/Desktop/alexa-avs-raspberry-pi-master/samples/companionService
$ npm install

JDKとMavenのインストール

公式DocはMavenの環境変数は /etc/profile.d/maven.sh に追加する方法ですが、うまくいかなかったので手っ取り早く bashrc に追加して進めました。

# java
$ cd /home/pi/Desktop/alexa-avs-raspberry-pi-master/samples/javaclient
$ ./install-java8.sh
# maven
$ wget http://apache.osuosl.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
$ sudo tar xvf apache-maven-3.3.9-bin.tar.gz  -C /opt
# add maven_vars
$ echo "export M2_HOME=/opt/apache-maven-3.3.9" >> ~/.bashrc
$ echo "export PATH=$PATH:$M2_HOME/bin" >> ~/.bashrc
$ source ~/.bashrc

証明書生成スクリプトを実行

プロダクトID、シリアル番号、パスワードの3つを入力します。今回はパスワードは空のままで進めます。

$ /home/pi/Desktop/alexa-avs-raspberry-pi-master/samples/javaclient/generate.sh
> product ID: my_device
> Serial Number: 123456
> Password: [blank]

クライアントIDとClientSecretを発行

ここは 公式Doc の画像のとおり進めればよいです。

サーバとクライアントを起動

下記のとおりサーバを起動します。 config.js には先ほど発行したクライアントIDとClientSecretを入力しておきます。

# setup clientId and ClientSecret
$ vi /home/pi/Desktop/alexa-avs-raspberry-pi-master/samples/companionService/config.js
$ cd /home/pi/Desktop/alexa-avs-raspberry-pi-master/samples/companionService
$ npm start

続いてクライアントも起動します。起動するとGUIも一緒に立ち上がります。 DISPLAY=:1.0 はVNC経由の場合の指定です。外部ディスプレイを使う場合は DISPLAY=:0.0 です。

$ cd /home/pi/Desktop/alexa-avs-raspberry-pi-master/samples/javaclient
$ mvn install
$ export DISPLAY=:1.0
$ mvn exec:exec

GUIに出てくるURLにアクセスしてデバイスの登録になります。ここも 公式Doc の画像のとおりです。以上が終わると、AVSを利用できます。

次回予告

次回はAlexa Skillsを登録して使ってみようと思います。乞うご期待。Don’t miss out!

著者紹介
阪神タイガースと天下一品が好きなエンジニア。