Raspberry Pi3でAlexaを起動するまで

Alexa Voice Service(AVS)のサンプルアプリをRaspberry Pi3で動かしてみた作業ログです。

■環境


  • Mac (Sierra)
  • Raspberry Pi (Jessie) ※Stretchだと失敗したのですぐに試したい方はJessieで(2017.09.12時点)。

 

■必要なもの


  • USBマイク
  • スピーカー(今回はジャック挿しの方でやりましたが、HDMIの音声でもできるみたいです。USBスピーカーを使用している場合はそれでも。)
  • デベロッパー登録 https://developer.amazon.com/login.html

 

■チュートルアル


 

AVSを使えるようにするためにAmazonデベロッパーポータルでの設定から始めます。

■Alexa Voice Service設定


・デベロッパーポータルにログインした状態で
Alexa -> Alexa Voice Service の Get Started

・CREATE PRODUCT で プロダクト作成開始
https://github.com/alexa/alexa-avs-sample-app/wiki/Create-Security-Profile に従って

Product name: My Device
Product ID: my_device
type:Device
use companion app: yes
How will end users interact with your product?: Touch-initiatedとHands-freeにチェック
distribute : nochildren : no
で、next

・Security Profileの作成画面が表示される
Create New Profile をクリック
作成するSecurity Profileのnameとdescriptionを入れる場所が出てくるので、これも例の通りに入れる。

例:
Security Profile Name: Alexa Voice Service Sample App Security Profile
Security Profile Description: Alexa Voice Service Sample App Security Profile Description

すると Client ID と Client Secret が生成される。

・Allowed origins と Allowed return URLsを入力する
Allowed Origins:  “Add” をクリックして入力欄を出して https://localhost:3000 と入力する。

Allowed Return URLs: 同様に”Add”をクリックして https://localhost:3000/authresponse と入力する。
例のままです。
finishするとしばらくして
My DeviceClient ID:amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Client secret :xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Amazon ID :XXXXXXXXXXXXXX
の値が得られます。

 

■サンプルアプリをcloneする


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

https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi

・今回はprojects という名前のディレクトリを作ってそこでやってみました

・automated_install.sh の ProductID,ClientID,ClientSecret を編集する。

・編集が終わったらスクリプトを実行する。(wake word engin(話しかけて起動させる為のエンジン)が2つインストールされると書いてある。)

実行すると、いくつか質問される。

  • デベロッパアカウント持ってるか?とか このClientIDとかの情報あってるか?とか。全て y で実行。
  • localeを聞かれるので、
    >1) en-US>2) en-GB>3) de-DE>>Please select an option [1-3] 1
    とりあえず US で。
  • オーディオのアウトプットを聞かれる。今回は ジャックで。
    1) 3.5mm jack2) HDMI audio output
  • ウェイクワードの検出を有効にするか?と聞かれるのでとりあえずyes
    Do you want to enable “Alexa” Wake Word Detection?[y/n/quit] >>

するとインストールが始まる。ガイドページには30分かかると書いてある。。。ひたすら待つ。

所々deprecatedのwarningが出てるけどとりあえず大丈夫らしい。

 

■サンプルアプリを起動


terminalを3個立ち上げる

  1. 認証用のweb serviceを実行する用
  2. avsと通信するサンプルアプリを実行する用
  3. wake wordの検出を行う用

1:

Listening on port 3000と出たらOK

2:

アプリのビルドが始まるのでしばらく待つ。

※余談ですが、最初Stretchでやっていたら、ここで libvlc.so が見つからないとかで止まってしまいました。(2017.09.11時点の)raspbean stretchだとインストール出来ないらしいという記事を見つけ、jessieを焼き直しました。
https://downloads.raspberrypi.org に過去のバージョンがあるので、そこからダウンロードする。
今回使ったのは 2017-06-21-raspbian-jessie.zip 
ここまでのrpiでの作業を繰り返し。jessieだとうまく行った。

「デバイスを登録して」と出るので yes を押してアマゾンへ誘導される。(※ブラウザのhttpsがunsafeだと言われるのは気にせずアクセスする)
Amazonにログインして、okayを押す。

device tokens readyという文字列が表示されたらブラウザを閉じて Java application のポップアップに戻ってOKを押す。

 

3:

とりあえず、kitt_aiでやってみる。

 

起動したら、「Alexa」と話しかけるとポンという合図音が聞こえるので、スキルを何か言ってみる。

「Weather in Tokyo」と言ってみると答えてくれます。72 ℉と言ってます。

 

■raspi起動時に自動でAlexaサンプルアプリが起動するようにしてみる。


raspi起動時にサンプルを自動的に起動するには
~/.config/autostart/
その下に設定ファイルを書く。(autostartディレクトリが無ければ作成)

https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=108958

Execの部分は3つのターミナルから実行するコマンドを.shに書いてそれを指定しました。

これで、ラズパイに電源を挿すだけで、しばらく待つと「Alexa」という呼びかけに応答してくれます。

起動したらLEDつけるとかしたいですが、それはまた今度。

 



■ちなみに、Androidの場合はビルドしてスマホでcompanionAppが起動する所までしかやっていませんが、そこまでの情報をメモ。

パソコンにサンプルアプリをcloneしておく。

デベロッパポータルで先ほど作成したPRODUCTのSecurity ProfileのAndroid/Kindle Settings タブを開いて、

API Key Name: Alexa Voice Service Test Android App

Package: com.amazon.alexa.avs.companion

Signature: 以下のようにして取得する

と入力してGENERATE KEYをクリック。

ここのSignature に入れるMD5を取得するためにはサンプルをcloneしたディレクトリのapp/で

xxx/alexa-avs-sample-app/samples/androidCompanionApp/app

パスワードは 適当に android とか。

姓名:XXX
組織単位名:XXX
組織名:XXX
都市:XXX
都道府県:XXX
2文字の国コード:JP
最後によろしいですか[いいえ]:y

これで keystore.jks が作成される。

次にsignatureを取得する

こんなログが出ます。

$ keytool -list -v -alias androiddebugkey -keystore keystore.jks

キーストアのパスワードを入力してください:

証明書のフィンガプリント: MD5:  〜〜〜

SHA256:〜〜〜

署名アルゴリズム名: SHA1withRSA バージョン: 3

 

フィンガープリントが取得できたので、

さっきから開いてるAndroid/Kindle SettingsのSignatureにMD5とSHA256のフィンガープリントを入れて、GENERATE KEY。

するとAPI keyが生成されるので、このキーをapp/assets/api_key.txtというファイルを作成して保存する。

 

■証明書を作成
サンプルをcloneしたディレクトリのトップに行って、javaclient/ssl.cnfを開く

 

このYOUR_で始まる部分をkeystore作成時に入れた、CN, OU, O, L, ST, Cの値で置き換えて、

コマンドを実行可能にして

 

で実行
すると色々聞かれるのでデベロッパーポータルで作成した通りに入力する

Product ID:  my_device

Serial Number: 今回はプロトタイピングなので123456でOKらしい

Password for Keystores: blankで良いらしいがとりあえず android と入れてみる

■ companionService/config.jsを編集する

sslKey を xxx/alexa-avs-sample-app/samples/javaclient/certs/server/node.key
sslCert を xxx/alexa-avs-sample-app/samples/javaclient/certs/server/node.crt
sslCaCert を xxx/alexa-avs-sample-app/samples/javaclient/certs/ca/ca.crt
に置き換える。

 

■ /javaclient/config.json.を編集する

これでAndroid Studioでビルドできるようになる。