【実験】PaPeRo i本体でAlexaを動かす

 PaPeRpo i本体でAmazonのAIアシスタントAlexaを動かしてみる方法について、技術面に限ってご紹介します。
もしPaPeRo iのアプリに組み込みたい場合には事前に十分な調査・確認・調整が必要と思われますのでご注意ください。

Raspberry Pi用の環境を借りる

 Raspberry PiでAlexaを動かす方法が公開されていますので、これを使わせてもらうことにします。このため【実験】Raspbianを使えちゃう様にするでご紹介したchroot環境を利用しますが、OSはMINIBIAN WHEZYではなく最新のRASPBIAN STRETCHの、LITEではなくWITH DESKTOPが必要になります。RASPBIANはこちらからダウンロードできます。動作確認は執筆時の最新2017-11-29版で行いました。
 なお今回は使い方(6)の/etc/apt/sources.listは変更しなかったのですが、変更する場合にはwheezyではなくstretchを指定する必要があります。また、/etc/debian_chrootには”raspbian_stretch”と書き込んでいます(chroot時のプロンプトに反映されます)。
 以上にご注意のうえ、chroot環境(USBメモリ)を作成してください。

Amazon登録手順

 もう一つ事前準備として、Amazonに製品とセキュリティプロファイルを登録する必要があります。
(1) https://developer.amazon.com/home.htmlのアカウントを作成します。
(2) ALEXAタブで「Alexa Voice Serviceの始める」をクリック→「製品を作成する」をクリックします。
(3) 製品名、製品IDを入力します。よくわからなかったので同じ文字列をセットしましたが、問題ありませんでした。ここで入力した製品IDを後で使用します。
 他の項目も入力し、「次へ」をクリックします。
(4) LWAセキュリティプロファイルステップ1/2で、「プロファイル新規作成」とし、プロファイル名と説明を入力して次へをクリックします。
(5) LWAセキュリティプロファイルステップ2/2で、「許可された出荷地」にhttp://localhost:3000とhttps://localhost:3000を追加します。
(6) 同じく「許可された返品URL」にhttp://localhost:3000/authresponseとhttps://localhost:3000/authresponseを追加し、完了します。
 ここで表示される「クライアントID」、「クライアントのシークレット」を後で使用します。

ALEXA AVS Sample Appインストール手順

(1) OpenWRTのシェルでdateコマンドで時計合わせを行います。
(2) 同じくインターネット接続できるように設定・確認します。
(3) 準備用シェルスクリプトを実行した上でRASPBIAN STRETCH環境にchrootし、raspi-configでja_JP.UTF-8のロケールを追加してデフォルトに設定します。

root@aterm:~# chroot /mnt /bin/bash
(raspbian_stretch)root@aterm:/# apt-get update
(raspbian_stretch)root@aterm:/# raspi-config

(4) piユーザにsuし、git cloneでファイル一式をダウンロードします。

(raspbian_stretch)root@aterm:/# su pi
(raspbian_stretch)pi@aterm:/$ cd
(raspbian_stretch)pi@aterm:~$ mkdir Desktop
(raspbian_stretch)pi@aterm:~$ cd Desktop
(raspbian_stretch)pi@aterm:~/Desktop$ git clone https://github.com/alexa/alexa-avs-sample-app.git

 なお動作確認時のバージョンはcommit 5bdd02a1c53fb99aa49ecb016f12da7cfefaba88(2017/12/18)でした。

(5) インストールスクリプトに製品ID、クライアントID、クライアントシークレットを書き込みます。

(raspbian_stretch)pi@aterm:~/Desktop$ cd alexa-avs-sample-app
(raspbian_stretch)pi@aterm:~/Desktop/alexa-avs-sample-app $ nano automated_install.sh

(6) インストールスクリプトを実行します。

(raspbian_stretch)pi@aterm:~/Desktop/alexa-avs-sample-app $ . automated_install.sh

 質問にはy、言語は6) ja-JPを選択します。実行には約1時間かかりました。

(7) rootに戻ってtightvncserverとw3mをインストールします。

(raspbian_stretch)pi@aterm:~/Desktop/alexa-avs-sample-app $ exit
(raspbian_stretch)root@aterm:/# apt-get install tightvncserver w3m

Alexaを動かす

(1) rootでvncサーバを起動します。

(raspbian_stretch)root@aterm:/# tightvncserver

 初回起動時にはパスワードを聞かれるので設定します。プロンプトが戻ってきますがサーバは起動しています。

(2) Windows PCからvncクライアントで接続します。確認はTigerVNC 1.8.0のvncviewer64-1.8.0.exeで行いました。

(3) 一つ目のTerminalを開き、認証用のweb serviceを実行します。

(raspbian_stretch)root@aterm:/# cd /home/pi/Desktop/alexa-avs-sample-app/samples/companionService
(raspbian_stretch)root@aterm:/home/pi/Desktop/alexa-avs-sample-app/samples/companionService# npm start

(4) 二つ目のTerminalを開き、AVSとの通信アプリを起動します。

(raspbian_stretch)root@aterm:/# cd /home/pi/Desktop/alexa-avs-sample-app/samples/javaclient
(raspbian_stretch)root@aterm:/home/pi/Desktop/alexa-avs-sample-app/samples/javaclient# mvn exec:exec

(5) アプリのメインウィンドウ(Alexa Voice Service – v20160207.7)とダイアログ(Login to Register/Authenticate your Device)が開きます。
 ここでYesをクリックするとRaspberry Piであればデフォルトブラウザが開くのですが、PaPeRo iのchroot環境ではエラー終了してしまうので、表示されているhttps://localhost:30000/provisions/xxxxxxxの文字列をコピーしたうえでNoで閉じます。

(6) 3つ目のTerminalを開き、コピーしたURLを指定してw3mを起動します。

(raspbian_stretch)root@aterm:/# w3m https://localhost:30000/provisions/xxxxxxx

(7) Amazonのサイトにリダイレクトされます。E-mail or mobile number: の後ろの赤線の部分をマウスでダブルクリックすると最下部にTEXT:と表示され入力待ちになるのでAmazonのアカウント+Enterを入力します。

(8) 同様にwhat is your password? の後ろの赤線の部分をダブルクリックしパスワードを入力します。

(9) 赤字になっているSign in using our secure serverをダブルクリックします。

(10) 表示がdevice tokens readyに変わります。qで抜けます。なおこの認証は最初の実行時のみ必要です。

(11) Login to Register/Authenticate your Device/Please register….ダイアログをOKボタンで閉じます

(12) 3つ目のTerminalでwakeWordAgentを起動します。

(raspbian_stretch)root@aterm:/# cd /home/pi/Desktop/alexa-avs-sample-app/samples/wakeWordAgent/src
(raspbian_stretch)root@aterm:/home/pi/Desktop/alexa-avs-sample-app/samples/wakeWordAgent/src# ./wakeWordAgetn -e kitt_ai

(13) “alexa”と呼びかけるかTap to speak to Alexaの下のマイクボタンをクリックしてPaPeRo iのマイクに話しかけると、PaPeRo iのスピーカーでAlexaが返答します。

(14) https://alexa.amazon.com/spa/index.htmlでAlexaと行ったやり取りなどが確認できます。

補足

  • “Alexa”の呼びかけによる反応は動作が安定せず認識してくれない場合が多い様でした。

  • 普通の声の大きさでは、PaPeRo iに20 cmくらいまで顔を近づけないと反応しませんでした。

  • STRETCHではPaPeRo iのLinuxカーネルとのバージョンの差が大きいせいかlsusbやdfコマンドが正常に動作しないのですが、何も指定していない状態でPaPeRo i本体のマイクとスピーカーでAlexaが動作しました。

  • 動作確認時点でUSBメモリは5GByte弱の使用量でした。