Edited at

Raspberry PiでAlexa Voice Service(AVS)を利用する方法


追記:2019/07/30


1. はじめに

先日(2018/03/03)、Japanese Raspberry Pi Users Group 様主催の「ラズパイでAlexaがしゃべりだす? - AVSハンズオン Raspberry Piでスマートスピーカーに挑戦(Amazon Voice Kit編)」に参加させて頂きました。講師をなさってくださいました しきや 先生、ありがとうございました。

今回は、自分自身への復習を兼ね、自宅のRaspberry Pi3でハンズオンと同じことができるか、チャレンジした内容をお伝えしたいと思います。


1-1. この記事を読んでできること


  • Amazon Developer Portal を用いた、Alexa Voice Service(AVS)の利用登録ができるようになる。

  • Raspberry Pi3に、Alexa Voice Service(AVS) SDKをセットアップできるようになる。

  • Raspberry Pi3が、Amazon Echo スマートスピーカ代わりに使えるようになる。

  • Raspberry Pi3で、アレクサ(英語版)が動かせるようになる。

  • Raspberry Pi3で、アレクサ(日本語版)が動かせるようになる。

  • Raspberry Pi3で、アレクサ(日本語版)のAlexaスキル(音声スキル)が動かせるようになる。


1-2. 事前注意


  • Amazon様の規約により、今回の手順でセットアップしたデバイス(Raspberry Pi3)からは、Amazon Musicがご利用できないそうです。

  • 今回の手順でセットアップしたデバイス(Raspberry Pi3)は、永久利用できません。3ヵ月ほど経つと自動的に使えなくなるそうです。(対処案を記事の最後に載せていますので参考にしてください。)

  • 今回の手順でセットアップしたデバイス(Raspberry Pi3)は、譲渡禁止、販売禁止の扱いとなるそうです。

  • 日本語化されたRaspberry Pi3では、正常にセットアップできない可能性があります。

  • 一部の認証作業で、必ずオンラインで作業する必要があります、オンラインで作業をしなかった場合、そのSDカードでのセットアップは不可能となるそうです。


1-3. 原本マニュアル(英語)

今回のセットアップ手順の原本は、Raspberry Pi Quick Start Guide with Scriptに記載されております。合わせてご参考ください。


2. 必要なもの


2-1. デバイス編


  • セットアップ対象デバイス(Raspberry Pi3 / Raspberry Pi2 / Linux OSが動くパソコンやMacやLinuxでもセットアップは可能だそうです。)

  • 有線LANポートのあるパソコン(Windows / Mac)、有線LANポートがない場合パソコンはUSB型のイーサネットアダプターでも可。

  • USBマイク(サンワサプライ USBマイクロホン MM-MCU02BKであれば、ドライバインストール不要で利用できるそうです。)

  • 3.5mm ステレオミニプラグ スピーカーアンプ付きが好ましい(音声出力先はHDMI出力でも可。)

  • microSDカード(Raspberry Pi用)

  • LANケーブル(ストレート、クロス どちらでも可)


2-2. ソフトウェア編


  • Raspbian OSイメージファイル(Raspbian

  • ZIP解凍ソフト(7-Zip

  • テキストエディタ(Mery

  • SSHクライアント(TeraTerm

  • VNCクライアント(VNC-Viewer


3. Alexa Voice Service(AVS)での作業

Raspberry PiでAlexa Voice Service(AVS)をセットアップにあたり、まずは Amazon Developer Portal から、Alexa Voice Service(AVS)を登録する必要があります。ここでは、その手順を説明します。


3-1. Amazon Developer Portal へのログイン


  • この作業は、お持ちのPC(Windows / Mac)からおこなう。

  • Amazon Developer Portalをお持ちでない方は、失敗しないAlexa開発者アカウントの作り方を参考にアカウントを事前作成する。
     

  • Amazon Developer Portal を開き、「Developer Console」 をクリックし、ログインする。




3-2. Alexa Voice Service(AVS) への製品登録


  • 「Alexa」 をクリックし、Alexa Voice Service 側の 「始める」 をクリックする。

     

  • 「製品を作製する」をクリックする。



  • 「製品情報」として、以下の内容を入力し、設定が終わったら「次へ」をクリックする。



製品名(任意文字列)

RasPi Smart Speaker System



製品ID(任意文字列、後からの変更はできません。)

proto_01



製品はアプリやデバイスを使用しますか?

「端末」をチェック



ご使用の端末は、コンパニオンアプリを使用しますか?

「いいえ」をチェック



商品カテゴリー

「その他(指定してください)」を選択

Raspberry Pi


製品概要

raspi hands on



エンドユーザーは、商品とどのようにやり取りするのでしょうか?

「タッチで開始される」をチェック

「ハンズフリー」をチェック


画像をアップロード

(設定不要)



この製品を商品として配信する予定ですか?

「いいえ」をチェック



これは子供向け商品、それ以外は13歳以下の子供向けですか?

「いいえ」をチェック



  • LWA(Login with Amazon)を作製するため、「プロフィールを新規作成する」をクリックする。
     

  • 「セキュリティプロファイル名」と「セキュリティプロファイル記述」を入力し、「次へ」をクリックする。


セキュリティプロファイル名

Sample Profile



セキュリティプロファイル名

Sample Profile Description



  • 「許可された出荷地」と「許可された返品 URL」を入力する、入力する際は、httpとhttpsの2つのURLを登録する必要あり。


許可された出荷地(2つ)間違えるとAlexaが反応しなくなるらしい。

http://localhost:3000

https://localhost:3000


許可された返品URL(2つ)間違えるとAlexaが反応しなくなるらしい。

http://localhost:3000/authresponse

https://localhost:3000/authresponse


  • 「以下に同意する」をチェックして、「完了」をクリックする。


3-3. 製品登録内容の確認


  • 問題なければ、製品一覧の画面に、登録した製品名が表示される。

  • 「管理する」をクリックする。


 


  • 「マイ商品」に表示されている、「クライアントID」、[クライアントのシークレット]、「製品ID」は、Raspberry Piでの設定で用いるため、メモ帳などにコピーしておくこと。


 


  • うまく登録が行なえていれば、以下の登録内容になっていると思います。参考にしてください。

 

 

 

 

 

 


3-4. セキュリティプロファイルの有効化


  • ブラウザで、新規タブを開く。

  • セキュリティプロファイルを有効にするためのURLにアクセスする。


セキュリティプロファイルを有効にするためのURL

https://developer.amazon.com/lwa/sp/overview.html


 

- プルダウンメニューから、今回作成したセキュリティプロファイル名「Sample Profile」を選択し、「Confirm」をクリックする。

- 「Consent Privacy Notice URL」にダミーURLを指定し、「Save」をクリックする。


ダミーURL

http://example.com



  • AVS登録は以上です、Amazon Developer Portalからログアウトし、ブラウザを閉じてください。


4. Raspberry Pi 用の microSDカード作成

ここでは、Raspberry Pi の microSDカードを作成します。今回は、PC と Raspberry Pi を直接、有線LAN接続し、セットアップをすすめますので、そのための事前準備もおこないます。


4-1. OSイメージファイル(RASPBIAN STRETCH WITH DESKTOP)の入手


  • 以下のURLから、OSイメージファイル(RASPBIAN STRETCH WITH DESKTOP)をダウンロードする。OSイメージファイルは、NOOBSでもよいらしいが、少しセットアップがややこしくなるらしいので、ここでは、Raspbianを推奨します。


RASPBIAN_STRETCH_WITH_DESKTOPダウンロードサイトURL

https://www.raspberrypi.org/downloads/raspbian/


参考:この記事作成時のファイルバージョン:2017-11-29-raspbian-stretch.zip

 


4-2. microSDカードのフォーマット



  • SD Formatter for Windowsなどのソフトを用いて、使用するmicroSDカードをフォーマットしておく。


4-3. microSDカードへOSイメージの書き込み(所要時間:15分)



  • Win32 Disk Imagerなどのソフトを用いて、使用するmicroSDカードへOSイメージを書き込む。


4-4. Raspberry Pi の有線LAN 固定IPアドレスの設定



  • Meryなどのソフトを用いて、microSDカード直下フォルダの「cmdline.txt」ファイルを開き、1行目の行末に固定IPアドレスを追記し、保存する。保存の際は、テキストファイルの文字コード、改行コードが変わらないよう注意すること。



cmdline.txt

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=49783f5b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles ip=192.168.1.2



4-5. Raspberry Pi のSSH有効化の設定


  • microSDカード直下フォルダにファイル名「ssh」(空ファイル拡張子なし)で新規作成する。保存の際は、不要なファイル拡張子(.txt等)が付かないよう注意すること。


4-6. Raspberry Pi のWi-Fi設定(追記:2018/03/11)


  • あらかじめWi-Fi設定を済ませておきたい場合に設定してください。

  • 設定に自信がない方は、このあとの手順で、Raspberry Pi の GUIからでも設定できます。

  • microSDカード直下フォルダにファイル名「wpa_supplicant.conf」(改行コード:LF)で新規作成し、ファイルの内容を以下のとおり設定する。(ssidとパスワードpskは、各自の環境に合わせて設定してください。)


wpa_supplicant.conf

country=JP

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="----Your-WiFi-SSID----"
psk="----PLAIN-PASSPHRASE----"
}


4-7. microSDカード の完成


  • 完成した microSDカード を、PCからおもむろに抜き取りする。

  • Raspberry Pi 経験者なら、直ぐにRaspberry Pi を起動したくなるはずですが、しばし待つこと山の如く。(マイクとスピーカをうまくラズパイに認識させる必要があるため、全ての手はずが整うまで待ってください。)


5. PCの有線LAN 固定IPアドレス設定

ここでは、PC側(Windwos / Mac)の有線LAN IPアドレスを、固定IPアドレスに設定します。

普段、PCを有線LANでお使いの方は、一時的にオフラインとなります。このあと、Raspberry Pi側で、無線LANネットワークを利用し、オンライン認証が必要となります。必ず、無線LANネットワークが確保できている状況でこれからの作業を進めてください。お持ちのPCに、有線LANポートが付いていない場合は、USB型のイーサネットアダプタ等をご用意ください。


5-1. イーサネットのアダプタオプション変更


  • 「Windowsアイコン」→「設定」→「ネットワークとインターネット」→「アダプタのオプションを変更する」を選択する。

 


  • ネットワーク接続画面の「イーサネット」を右クリックし、「プロパティ」を選択する。

  • イーサネットのプロパティ画面で、「インターネットプロトコルバージョン4(TCP/IPv4)を選択し、「プロパティ」ボタンをクリックする。

 


  • 全般タブ内の「次のIPアドレスを使う」をチェックし、「IPアドレス」および「サブネットマスク」を設定し、「OK」ボタン、「適用」ボタンをクリックする。



IPアドレス

192.168.1.1



サブネットマスク

255.255.255.0


 


  • これで、PCの固定IPアドレス(192.168.1.1)と、Raspberry Piの固定IPアドレス(192.168.1.2)の設定が完了し、有線LANケーブルを用いて接続できる準備がととのいました。今回の方法を用いることで、通常、Raspberry Piのセットアップで必要となる、USBキーボード、USBマウス、HDMIケーブル、モニタ等を用意せずともRaspberry Piのセットアップを進めることができます。Alexa Voice Service(AVS)のセットアップに限らず、今回の方法を活用してみてください。


6. PC(Windows / Mac)からRaspberry PiへSSH&VNC接続

ここでは、Raspberry Piへ遠隔操作(SSH&VNC接続)するため、PC(Windows / Mac)とRaspberry Piの接続(有線LAN接続)をおこないます。


6-1. 注意点


  • Raspberry Piは、文字化けによる影響をなくすため、日本語化はしないこと。

  • Raspberry Piを起動するまえに、必須デバイス(3.5mmステレオジャックスピーカ、USBマイク)を、必ずRaspberry Pi接続済みの状態にし、電源ONすること。

3.5mmスピーカの代わりに、HDMI音声出力も可能だが、検証はしていないので各自の判断でチャレンジしてください。

USBマイクは、Raspberry Piで、ドライバ追加不要で動くものを選ぶとよい。


6-2. Raspberry Piの起動


  • Raspberry Piの必須デバイス(スピーカ、マイク)を接続する。

  • Raspberry Piの電源をONにし、Raspberry Piにたましいを吹き込む。



6-3. PC と Raspberry Pi との有線LAN接続


  • Raspberry Pi の有線LANポートにLANケーブルをぶっさす。

  • 片方のLANケーブルを、PCの有線LANポートにぶっさす。

  • PCで、ターミナル端末を起動(Windowsの場合は、Win旗印をクリックし、「cmd」を入力後、コマンドプロンプトをクリックすると真っ黒画面が起動する。)

  • ターミナル端末から、pingコマンドを実行し、ネットワークの疎通確認をする。


pingコマンド(疎通確認PC→RaspberryPi)

ping 192.168.1.2


 


6-4. SSHクライアントでの接続


  • PCで、SSHクライアント(TeraTerm 等)を起動し、ホストにRaspberry Piの固定IPアドレス「192.168.1.2」を入力し、OKボタンをクリックする。


 


  • セキュリティ警告が出た場合は、「続行」ボタンをクリックする。


 


  • SSH認証画面で、ユーザ名とパスフレーズを入力し、「OK」ボタンをクリックする。


ユーザ名(デフォルト)

pi



パスフレーズ(デフォルト)

raspberry


 


  • SSHクライアントで、ログインが確認できたことを確認する。


 


6-5. 環境設定の設定(SSHクライアントでの操作)


  • SSHクライアントから、以下の操作をおこない、環境設定「タイムゾーン」と「VNC接続の許可」を設定する。


環境設定

$ sudo raspi-config

4 Localisation Options → I2 Change Timezone → Asia → Tokyo

5 Interfacing Options → P3 VNC → YES → Ok

設定が済んだら、「Finishi」を選択し、環境設定を終了する。


 

 

 

 


6-6. VNCクライアントでの接続


  • VNCクライアントを起動し、Raspberry Piの固定IPアドレスを入力し、接続する。


RaspberryPiの固定IPアドレス

192.168.1.2


 


  • VNCクライアントで、Raspberry Piのパスワードを入力し、接続する。


RaspberryPiのパスワード(デフォルト)

raspberry


 


6-7. Raspberry Piで無線LAN(Wi-Fi)接続する(VNCクライアントでの操作)

そろそろ大詰めですが、ここからのコマンド操作では、オンラインでの認証作業が必要となり、Raspberry Piをオンラインに接続する必要があります。手順に従い、Raspberry Piをオンライン状態にしてください。


  • VNCクライアントから、ネットワークアイコンをクリックし、各自の無線LANアクセスポイント(Wi-Fi)に接続する。


 

- VNCクライアントでの、Raspberry Piで無線LAN(Wi-Fi)接続が完了したら、ネットワークアイコンが、無線LANアイコンに代わることを確認する。

 


6-8. Raspberry Pi のソフトウェアアップデートおよびファームウェアアップデートの実行


  • (追記:2018/03/06)今回の手順でセットアップを全てやり終えた後に、Raspberry Pi のソフトウェアアップデート(sudo apt-get update、sudo apt-get upgrade、sudo apt-get dist-upgrade)とファームウェアップデート(sudo rpi-update) をおこなったところ、アレクサのスピークスピードが極端に遅くなり使いものにならなくなりました。ということで、Raspberry Pi のソフトウェアアップデートおよびファームウェアアップデートは、このタイミングでおこないましょう。(検証しておりませんが、自己責任でおねがいします。)手順は参考サイトをご参考にしてください。


アップデートコマンド&アップグレードコマンド

$ sudo apt update

$ sudo apt upgrade

このコマンドで、「パッケージ一覧の更新」および「パッケージの更新」が完了します。


参考:Raspberry Pi 3(RASPBIAN JESSIE)OSインストールから初期設定【セットアップ前編 】

参考:Raspberry Pi 3(RASPBIAN JESSIE)SSH・ネットワーク設定・ユーザー変更【セットアップ後編】


7. Raspberry PiへAlexa Voice Service(AVS)をインストール(SSHクライアントでの操作)

やっとこさ、準備が整いましたね。手順としては、残すところあとわずかですが、Alexa Voice Service(AVS)のインストールに時間がかかります。作業前に休憩を入れるなり、準備万端の状態で作業を進めてください。

また、ここからの作業はオンライン必須の作業となります。Raspberry Piで無線LAN(Wi-Fi)接続がおこなえていることを確認してから、作業を進めてください。


7-1. SSHクライアントからRaspberry Piへ接続する。


7-2. インストールスクリプトと設定ファイルのダウンロード(想定時間:10秒)


  • SSHクライアントから、以下のwgetコマンドを実行し、インストールスクリプトと設定ファイルをダウンロードする。


wgetコマンド

wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/RaspberryPi/setup.sh && wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/RaspberryPi/config.txt


 


7-3. 設定ファイル(config.txt)の編集(想定時間:3分)


  • wgetコマンドでダウンロードした設定ファイル(config.txt)をテキストエディタ(GUIテキストエディタLeafpad または viコマンド 等)で開き、「クライアントID」、[クライアントのシークレット]、「製品ID」を入力し、設定ファイル(config.txt)を保存する。今回の例では、GUIテキストエディタLeafpadを用いて、テキスト編集をおこないました。


 


7-4. セットアップスクリプト(setup.sh)の実行(想定時間:60分)


  • 設定ファイル(config.txt)をコマンド引数に設定し、インストールスクリプト(setup.sh)を実行する。


インストールスクリプト(setup.sh)の実行コマンド

sudo bash setup.sh config.txt


 


  • インストールスクリプト(setup.sh)を実行すると、直ぐに処理が止まるので、「AGREE」と入力しエンターキーを押下し、処理を続行する。(ここ、ひっかかりポイントです!!)


 


  • インストールスクリプト(setup.sh)を実行中、30分くらい経つと、次は「スペース」キー押下して1ページ単位でスクロールする箇所が出てくるので、適宜「スペース」キーを連続押下する。(私は、ここで「Enter」キーを連続押下してしまったために、次のところで同じメッセージがめちゃくちゃ出ていて、悪い見本となります。)


 


  • 次に、ライセンスを受け入れに同意しますか?メッセージがめっちゃ出てくるので、「yes」を入力しリターンキーを押下し同意する。


 


  • するとSDK構築の処理実行が開始されるので、しばし待つ。(想定時間:15分)

  • 全てが正常終了すると、「Completed Configuration/Build」のメッセージが表示されます。


 


7-5. 認証トークンの生成(想定時間:5分)


  • 認証トークン生成シェル(startauth.sh)を実行する。


認証トークン用シェル(startauth.sh)の実行コマンド

sudo bash startauth.sh


 


  • すると、localhost(127.0.0.1:3000)に認証用のサーバが立ち上がる。



  • 認証用のサーバが起動している間に、Raspberry Piのブラウザから「http://127.0.0.1:3000」もしくは「http://localhost:3000」にアクセスし、Amazon Developer Portalと同じアカウントでログインする。(PCのブラウザからは直接アクセスできません。必ずRaspberry Piのブラウザでアクセスしてください。また、この作業はオンライン認証をおこなうため、オンライン状態が必須の作業となります。)



 


  • 次に、「Allow」ボタンをクリックする。


 

- 成功すれば、「The file is written successfully.」のメッセージが表示され、認証用のサーバが自動的シャットダウンするので、ブラウザを閉じる。


8. Raspberry Pi版スマートスピーカの起動&実行

ようやく、すべての準備が整いました。実行前に一度、Raspberry Piを再起動させた方がよいみたいです。Raspberry Piの再起動が行なえたら、Raspberry Pi版スマートスピーカを起動しましょう。


8-1. Raspberry Piの再起動

SSHクライアントから、再起動コマンドを実行し、Raspberry Piを再起動する。しばらく経てば、再起動が完了していますので、再度SSHクライアントからRaspberry Piへログインを済ませてください。


RaspberryPiの再起動コマンド

$ sudo shutdown -r now


 


8-2. スマートスピーカの起動(サンプルアプリケーションの実行)


  • スマートスピーカ起動用のサンプルアプリケーション(startsample.sh)を実行する。


サンプルアプリケーション(startsample.sh)の実行コマンド

sudo bash startsample.sh


 


  • この画面になれば、Raspberry Piで、アレクサ(英語版)の呼び出しができるようになっています。「アレクサ、ワッタイム?」などと話しかけてみてください。コツは、まず「アレクサ!」と話しかけると、画面上にログが流れるので、ログが流れ終わったら続きの「ワッタイム?」と話すといいでしょう。
    それでもうまくいかない場合は、「t」を入力しエンター押下で「アレクサ、」と話したかわりになるの(ボタンによるアレクサ起動)で、続けて「ワッタイム?」と話しかけてください。


 


  • 今回の手順では、Raspberry Piのパスワード変更は省略しています。参考サイトをのせておきますので、適宜、Raspberry Piのパスワード変更し、万全のセキュリティ状況を保持しましょう。

参考:Raspberry Pi 3(RASPBIAN JESSIE)OSインストールから初期設定【セットアップ前編 】

参考:Raspberry Pi 3(RASPBIAN JESSIE)SSH・ネットワーク設定・ユーザー変更【セットアップ後編】


8-3. アレクサの日本語化


  • アレクサ(英語版)のままでは、コミュニケーションがとりづらいので、アレクサを日本語化します。日本語化の方法は、サンプルアプリケーション(startsample.sh)が実行されている状態で、「c」→「1」→「6」の順番でキー入力してください。


 


  • マイク感度をチューニングしたり、スピーカをアンプ付きのものに代えてみたり、いろいろ志向錯誤してみてください。あと、「アレクサ、今何時?」と聞いた場合、日本時間を答えてくれないかと思います。これについては、スマホのAlexaアプリの設定から、今回登録したデバイスの所在地およびタイムゾーン設定をおこないましたが、改善しませんでした。推測ですが、カリフォルニア(バージニアまたはオハイヨ)の地域設定が適用されているものだと思います。

  • スマホのAlexaアプリから、日本のAlexaスキルを有効にすることで、日本の音声スキルを使うこともできます。ちなみに私が作成したおそらく日本初のRPG風音声ゲームスキル「ぽいもんの森」も実行できることも確認しました。無料でご利用いただけますので、よければAlexaスキルを「有効」にして、ぜひ、あそんでみてください。


8-4. 補足(3ヵ月に認証が切れ使えなくなった場合のリカバリ)

事前注意のところでもお伝えしましたが、「今回の手順でセットアップしたデバイス(Raspberry Pi3)は、永久利用できません。3ヵ月ほど経つと自動的に使えなくなるそうです。」

ただ、試したわけではありませんが、以下のコマンドを再実行して、構築しなおせば、復活利用できるかもしれないそうです。困ったときは、ひとまず、お試しあれ。


インストールスクリプト(setup.sh)の再実行コマンド

sudo bash setup.sh config.txt



認証トークン用シェル(startauth.sh)の再実行コマンド

sudo bash startauth.sh



9. さいごに

みなさん、Raspberry PiでAlexa Voice Service(AVS)をセットアップはいかがでしたか?Amazon Echo をお持ちでない方でも、自分専用のスマートスピーカの作成をお楽しみ頂けたのではないでしょうか?

みなさんの中には、うまくセットアップできなかった方もいらっしゃるかもしれませんが、今回の体験を通して、スマートスピーカの興味・関心が深まって頂ければ幸いです。

うまくセットアップできた方は、Raspberry Pi以外にも、他のLinuxディストリビューションや、Mac OS Xでもチャレンジするとより理解が深まると思います。(この記事を元に、カーナビにAVSをセットアップして、ナビを音声指示で動かしてみたり、バイクインカムでAlexaスキルが呼び出せるようになったりすると、音声スキルの世界観が広がりますね。エンベデッドエンジニアのみなさま頑張ってください、応援しています。)

また、興味があれば、Alexa音声スキルの作成にも、ぜひ、チャレンジしてみてください。

今後も、スマートスピーカ関連の記事を、アップしていきますので、お楽しみに。

2018/03/04 TAKAHIRO NISHIZONO