Amazon EchoをRaspberry Piで自作する

Amazonの音声アシスタント[Amazon Echo](https://www.amazon.com/Amazon-Echo-Bluetooth-Speaker-with-WiFi-Alexa/dp/B00X4WHP5E)、すっごい欲しいのですが日本では技適が通っておらず、輸入できないらしい。

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

# Amazon EchoとAVSとRaspberry Pi

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

また、[サンプルアプリが公開](https://github.com/alexa/alexa-avs-sample-app)されていて、以下のプラットフォームで動作させることができるようです。

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

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

# 材料

* [Raspberry Pi3 Model B](https://www.amazon.co.jp/gp/product/B01CHJRALS/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
* [BUFFALO Class10 microSDHCカード SD変換アダプター 16GB RMSD-16GC10AB](https://www.amazon.co.jp/gp/product/B00CDJNOX6/ref=od_aui_detailpages00?ie=UTF8&psc=1)
* [Raspberry Pi 3 model B 用電源　ACアダプタ　5V/2.5A　KSY製](https://www.amazon.co.jp/gp/product/B01COSONFS/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
* [スピーカー USB給電](https://www.amazon.co.jp/gp/product/B01M02ZEBI/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
* [USBマイクロホン](https://www.amazon.co.jp/gp/product/B0027WPY82/ref=od_aui_detailpages00?ie=UTF8&psc=1)

全てAmazonで購入。

完成図
![2016-12-25 22.05.26.jpg](https://qiita-image-store.s3.amazonaws.com/0/82034/0eb852e7-febb-bf09-ec3f-a7415acf663c.jpeg)


# Raspberry Piの設定

## SDカードのフォーマット

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


## OSイメージの書き込み

OSイメージとしてraspbianを[ダウンロード](https://www.raspberrypi.org/downloads/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
```

* Raspberry Piをディスプレイ・キーボード・マウス無しの三重苦でもセットアップする方法
http://karaage.hatenadiary.jp/entry/2015/07/15/080000

`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タブからデバイスとセキュリティプロファイルを登録します。

この辺りは[手順](https://github.com/alexa/alexa-avs-sample-app/wiki/Create-Security-Profile)の通りに進めれば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。
このあたりの画面遷移は[手順](https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi)に詳しく書かれています。

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

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

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

# 話しかけて遊ぶ

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

http://alexa.amazon.com/spa/index.html

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

<img width="1324" alt="スクリーンショット 2016-12-25 23.00.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/82034/af8f0fca-eb6e-29e1-9913-ef9ad5a824c2.png">

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の本気が伺えます。



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

* [Raspberry Pi 3にRaspbianをインストール(Mac OS X を使用)]
(http://qiita.com/onlyindreams/items/acc70807b69b43e176bf)
* [Amazon Echoを6,000円で自作する 〜Raspberry Pi 3 + Alexa Voice Services (AVS)〜](http://blog.algolab.jp/post/2016/08/11/raspberry-pi-alexa/)