UKey's Labo

Raspberry Pi を Alexaにする

動作環境

環境 バージョン
model Raspberry Pi 3 Model B Plus Rev 1.3
OS Raspbian GNU/Linux 9.6 (stretch)

ラズパイの準備(マイク、スピーカー)

こちらについては以下を参照してください。

Amazon Developerへの登録

以下サイトでAlexaインストールの準備を行う。

Amazon開発者コンソール

Amazonで買い物したことがあれば、そのアカウントでログイン可能です。

ラズパイにAlexaをインストール後、インストールしたAlexaの製品情報をAmazonで認証する必要があるため、ここで製品登録を行います。

あなたのAVS製品を管理する「製品」をクリック。

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

製品情報を登録していきます。

「次へ」

プロフィールを新規作成するをクリック。

「次へ」

他のデバイスやプラットフォームをクリック。

クライアントID名 – 任意。自分の分かりやすいクライアントID名を入力。

「一般ID」をクリック。

「ダウンロード」をクリックすると、config.jsonファイルがダウンロードできる。
こちらはAlexaの認証で必要となるため、ダウンロード後はAlexaをインストールするラズパイに転送する必要があります。

こちらの書面に合意しますにチェックを入れ、「完了する」をクリック。

これで製品登録が完了しました。

scp等でraspberry pi にconfig.jsonを転送しましょう。

AVS SDKのインストール

以下のサイトを参考に、作業を行う。

Raspberry Pi Quick Start Guide with Script

以下、3ファイルをダウンロードする。

wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh \
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/genConfig.sh \
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh

setup.shを実行する前にpipがインストールされているか確認する。

python -m pip -v

なければインストール、アップデートする。

sudo apt-get install -y python-dev python-pip
sudo pip install --upgrade pip

上記が終了したら、setup.shを実行。

sudo bash setup.sh ~/config.json -s [device serial number]

device serial number
アルファベット、数値のいずれか64文字以内とする。

途中、「止める」か「同意する」か聞かれるので、AGREEを入力してエンター。

################################################################################
################################################################################
AVS Device SDK Raspberry pi Script - Terms and Agreements
The AVS Device SDK is dependent on several third-party libraries, environments,
and/or other software packages that are installed using this script from
third-party sources ("External Dependencies"). These are terms and conditions
associated with the External Dependencies
(available at https://github.com/alexa/avs-device-sdk/wiki/Dependencies) that
you need to agree to abide by if you choose to install the External Dependencies.
If you do not agree with every term and condition associated with the External
Dependencies, enter "QUIT" in the command line when prompted by the installer.
Else enter "AGREE".
################################################################################
################################################################################
AGREE

必要なライブラリのダウンロードが始まるのでしばらく待つ。

ライセンスの確認を要求されるので、エンター。

Cloning into 'alexa-rpi'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 217 (delta 2), reused 11 (delta 1), pack-reused 205
Receiving objects: 100% (217/217), 9.32 MiB | 283.00 KiB/s, done.
Resolving deltas: 100% (68/68), done.
The Sensory TrulyHandsfree binaries are not licensed.
Press RETURN to review the license agreement and update the files.

長いライセンスが表示されるので、スペースでどんどん先に進んでいく。

ライセンスに同意するため、yesを入力してエンター。

Copyright © Sensory, Inc. 2016. All Rights Reserved. (http://sensory.com/)
Do you accept this license agreement? [yes or no]: yes #← yesを入力してエンター

インストールが完了すると、以下のログが流れて終了します。

// To enable DEBUG, build with cmake option -DCMAKE_BUILD_TYPE=DEBUG. By default it is built with RELEASE build.
// And run the SampleApp similar to the following command.
// e.g. ./SampleApp /home/ubuntu/.../AlexaClientSDKConfig.json /home/ubuntu/KittAiModels/ DEBUG9"
 **** Completed Configuration/Build ***

※インストールの進みが遅い場合は、スワップメモリを増やしてやると比較的早くセットアプが完了します。

インストール時のトラブルシューティング

何某かの理由で処理が途中で終了してしまっている場合、再度setup.shを実行して問題ありません。

中断されたところから開始されます。

sudo bash setup.sh ~/config.json -s [device serial number]

ExternalMediaPlayerのコンパイルでエラー

[ 57%] Building CXX object CapabilityAgents/AudioPlayer/src/CMakeFiles/AudioPlayer.dir/AudioPlayer.cpp.o
[ 59%] Built target Bluetooth
[ 59%] Built target Equalizer
[ 59%] Building CXX object CapabilityAgents/ExternalMediaPlayer/src/CMakeFiles/ExternalMediaPlayer.dir/ExternalMediaPlayer.cpp.o
[01mc++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.
CapabilityAgents/AudioPlayer/src/CMakeFiles/AudioPlayer.dir/build.make:62: recipe for target 'CapabilityAgents/AudioPlayer/src/CMakeFiles/AudioPlayer.dir/AudioPlayer.cpp.o' failed
make[3]: *** [CapabilityAgents/AudioPlayer/src/CMakeFiles/AudioPlayer.dir/AudioPlayer.cpp.o] Error 4
CMakeFiles/Makefile2:6492: recipe for target 'CapabilityAgents/AudioPlayer/src/CMakeFiles/AudioPlayer.dir/all' failed
make[2]: *** [CapabilityAgents/AudioPlayer/src/CMakeFiles/AudioPlayer.dir/all] Error 2
make[2]: *** Waiting for unfinished jobs....
[01mc++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.
CapabilityAgents/ExternalMediaPlayer/src/CMakeFiles/ExternalMediaPlayer.dir/build.make:62: recipe for target 'CapabilityAgents/ExternalMediaPlayer/src/CMakeFiles/ExternalMediaPlayer.dir/ExternalMediaPlayer.cpp.o' failed
make[3]: *** [CapabilityAgents/ExternalMediaPlayer/src/CMakeFiles/ExternalMediaPlayer.dir/ExternalMediaPlayer.cpp.o] Error 4
CMakeFiles/Makefile2:7089: recipe for target 'CapabilityAgents/ExternalMediaPlayer/src/CMakeFiles/ExternalMediaPlayer.dir/all' failed
make[2]: *** [CapabilityAgents/ExternalMediaPlayer/src/CMakeFiles/ExternalMediaPlayer.dir/all] Error 2
CMakeFiles/Makefile2:10105: recipe for target 'SampleApp/src/CMakeFiles/SampleApp.dir/rule' failed
make[1]: *** [SampleApp/src/CMakeFiles/SampleApp.dir/rule] Error 2
Makefile:2526: recipe for target 'SampleApp' failed
make: *** [SampleApp] Error 2

以下のリンクを参照して、解決しました。

https://github.com/alexa/avs-device-sdk/issues/1026(https://github.com/alexa/avs-device-sdk/issues/1026)

openHABが起動している場合、このようなエラーが発生してしまうようです。

.. openHABとは — Hatena Keyword

家庭内の家電などをコントロールするホームオートメーションを統合するプラットフォームを提供することを目指している。

僕の場合は、lircが動いてました。
なので、lircを止めて、再度インストールを実行します。

sudo systemctl stop lirc
sudo systemctl stop lirc.socket

InteractionManagerのコンパイルでエラー

[ 97%] Building CXX object SampleApp/src/CMakeFiles/SampleApp.dir/UIManager.cpp.o
c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-6/README.Bugs> for instructions.
SampleApp/src/CMakeFiles/SampleApp.dir/build.make:158: recipe for target 'SampleApp/src/CMakeFiles/SampleApp.dir/InteractionManager.cpp.o' failed
make[3]: *** [SampleApp/src/CMakeFiles/SampleApp.dir/InteractionManager.cpp.o] Error 4
make[3]: *** Waiting for unfinished jobs....
CMakeFiles/Makefile2:10093: recipe for target 'SampleApp/src/CMakeFiles/SampleApp.dir/all' failed
make[2]: *** [SampleApp/src/CMakeFiles/SampleApp.dir/all] Error 2
CMakeFiles/Makefile2:10105: recipe for target 'SampleApp/src/CMakeFiles/SampleApp.dir/rule' failed
make[1]: *** [SampleApp/src/CMakeFiles/SampleApp.dir/rule] Error 2
Makefile:2526: recipe for target 'SampleApp' failed
make: *** [SampleApp] Error 2

以下のサイトの通り、スワップメモリを増やして解消します。

https://github.com/alexa/avs-device-sdk/issues/622

.. スワップメモリとは ー スワップメモリ

仮想メモリー機能。 実際に付いている(搭載されている)メモリー容量が足りなくなると、ハードディスクの一部がメモリーの代わりとして使われる。

スワップメモリを設定してあるファイルを開く。

sudo vim /etc/dphys-swapfile

以下を修正。今回は1GBに変更する。

CONF_SWAPSIZE=100
↓
CONF_SWAPSIZE=1024

変更後、再起動。

sudo systemctl restart dphys-swapfile

反映されているか確認

free -h
              total        used        free      shared  buff/cache   available
Mem:           433M         32M        305M         24M         95M        330M
Swap:          1.0G          0B        1.0G

Alexaの認証

インストールが完了すると、startsample.shが作成されます。
これを実行して認証を行いますが、今のままでは動かないので、以下をインストールします。

sudo apt install -y gstreamer1.0-alsa

その後、startsample.shを実行。

sudo bash startsample.sh

以下が出力されれば成功。

##################################
#       NOT YET AUTHORIZED       #
##################################

################################################################################################
#       To authorize, browse to: 'https://amazon.com/us/code' and enter the code: ******       #
################################################################################################

コード(******の箇所)をメモしておきます。

認証します。上記のURL(https://amazon.com/us/code)にブラウザからアクセスします。

すると以下の画面。

rspi alexa
01.png

ここに先程メモしたコードを入力してContinue。

![](/Users/ukey/Pictures/rspi-alexa_02.png)

Allow

以下の画面が表示されれば認証完了です。

![](/Users/ukey/Pictures/rspi-alexa_03.png)

サンプルの実行

認証が完了したら、いよいよAlexaを起動しますが、このままstartsample.shを実行するとログが大量に流れるため、startsample.shを編集します。

sudo vim startsample.sh
cd "/home/{install dir}/build/SampleApp/src"

./SampleApp "/home/{install dir}/build/Integration/AlexaClientSDKConfig.json" "/home/{install dir}/third-party/alexa-rpi/models" DEBUG9

DEBUG9の記載があると思うので、そのDEBUG9を削除して、ログが出力されないように修正します。

その後、以下を実行します。

sudo bash startsample.sh

# # # ##### ##### ###### # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### ##### # # ### ####### # # # # # # # # # # # # # # # # # # # # # # # ##### ##### ###### # # ##### # # # ## # # ##### # ###### # # ##### ##### # # # ## ## # # # # # # # # # # ##### # # # ## # # # # ##### # # # # # # # ###### # # ##### # # ####### ##### ##### # # # # # # # # # # # # # ##### # # # # # ###### ###### # # # # SDK Version 1.11.0

上記が出力されて、ログが大量に流れ出せば、Alexa起動完了です。

日本語対応

上記ログと一緒に以下も表示されていると思います。

+----------------------------------------------------------------------------+
|                                  Options:                                  |
| Wake word:                                                                 |
|       Simply say Alexa and begin your query.                               |
| Tap to talk:                                                               |
|       Press 't' and Enter followed by your query (no need for the 'Alexa').|
| Hold to talk:                                                              |
|       Press 'h' followed by Enter to simulate holding a button.            |
|       Then say your query (no need for the 'Alexa').                       |
|       Press 'h' followed by Enter to simulate releasing a button.          |
| Stop an interaction:                                                       |
|       Press 's' and Enter to stop an ongoing interaction.                  |
| Privacy mode (microphone off):                                             |
|       Press 'm' and Enter to turn on and off the microphone.               |
| Echo Spatial Perception (ESP): This is for testing purpose only!           |
|       Press 'e' followed by Enter at any time to adjust ESP settings.      |
| Playback Controls:                                                         |
|       Press '1' for a 'PLAY' button press.                                 |
|       Press '2' for a 'PAUSE' button press.                                |
|       Press '3' for a 'NEXT' button press.                                 |
|       Press '4' for a 'PREVIOUS' button press.                             |
| Settings:                                                                  |
|       Press 'c' followed by Enter at any time to see the settings screen.  |
| Speaker Control:                                                           |
|       Press 'p' followed by Enter at any time to adjust speaker settings.  |
| Firmware Version:                                                          |
|       Press 'f' followed by Enter at any time to report a different        |
|       firmware version.                                                    |
| Info:                                                                      |
|       Press 'i' followed by Enter at any time to see the help screen.      |
| Reset device:                                                              |
|       Press 'k' followed by Enter at any time to reset your device. This   |
|       will erase any data stored in the device and you will have to        |
|       re-register your device.                                             |
|       This option will also exit the application.                          |
| Reauthorize device:                                                        |
|       Press 'z' followed by Enter at any time to re-authorize your device. |
|       This will erase any data stored in the device and initiate           |
|       re-authorization.                                                    |
| Quit:                                                                      |
|       Press 'q' followed by Enter at any time to quit the application.     |
+----------------------------------------------------------------------------+

cで言語選択できます。cを入力して、エンター。

+----------------------------------------------------------------------------+
|                          Setting Options:                                  |
| Change Language:                                                           |
|       Press '1' followed by Enter to see language options.                 |
| Change Do Not Disturb mode:                                                |
|       Press '2' followed by Enter to see Do Not Disturb options.           |
+----------------------------------------------------------------------------+

1を入力して、エンター。

+----------------------------------------------------------------------------+
|                          Language Options:                                 |
|                                                                            |
| Press '1' followed by Enter to change the language to US English.          |
| Press '2' followed by Enter to change the language to UK English.          |
| Press '3' followed by Enter to change the language to German.              |
| Press '4' followed by Enter to change the language to Indian English.      |
| Press '5' followed by Enter to change the language to Canadian English.    |
| Press '6' followed by Enter to change the language to Japanese.            |
| Press '7' followed by Enter to change the language to Australian English.  |
| Press '8' followed by Enter to change the language to French.              |
| Press '9' followed by Enter to change the language to Italian.             |
| Press 'a' followed by Enter to change the language to Spanish.             |
| Press 'b' followed by Enter to change the language to Mexican Spanish.     |
+----------------------------------------------------------------------------+

6を入力して、エンター。

###################################
#       locale set to ja-JP       #
###################################

上記が表示されて完了です。

トラブルシューティング

アレクサが無視する

「アレクサ」と呼びかけても、反応がない場合。

以下、リンクでマイクで録音テストを行い、問題がない場合はハード的な問題ではなく、ソフト的な問題となります。

startsample.shDEBUG9を追記して、アレクサの動きをデバッグしてみましょう。

sudo vim startsample.sh

startsample.sh

cd "/home/{install dir}/build/SampleApp/src"

./SampleApp "/home/{install dir}/build/Integration/AlexaClientSDKConfig.json" "/home/{install dir}/third-party/alexa-rpi/models" DEBUG9 #←追加

startsample.shを実行します。

sudo bash startsample.sh

t + enterで wake word実行。

話かけてみます。「今何時?」

「・・・」無反応。

以下ページでアレクサとのやり取りの履歴が確認できます。 自分の声をアレクサが認識しているか確認します。

https://alexa.amazon.co.jp/spa/index.html

上記URLをブラウザで開いて、ログインを促される場合はそのままログイン。

menu ▸ 設定 ▸ Alexaアカウント ▸ 履歴

![](/Users/ukey/Pictures/rspi-alexa_04.png)

![](/Users/ukey/Pictures/rspi-alexa_05.png)

上記のような画面が表示され、履歴がある場合は、コンソールでエラーが出ていないか確認しましょう。

コンソールを遡ってみると、以下のエラーログが出力されてました。

Your GStreamer installation is missing a plug-in

2019-01-31 14:45:05.837 [  5] E MediaPlayer:handleBusMessageError:source=decoder,error=Your GStreamer installation is missing a plug-in.,debug=gstdecodebin2.c(4592)\: gst_decode_bin_expose ()\: /GstPipeline\:audio-pipeline/GstDecodeBin\:decoder\:
no suitable plugins found\:
Missing decoder\: MPEG-1 Layer 3 (MP3) (audio/mpeg\, mpegversion\=(int)1\, mpegaudioversion\=(int)2\, layer\=(int)3\, rate\=(int)24000\, channels\=(int)1\, parsed\=(boolean)true)

2019-01-31 14:45:05.838 [  5] 0 MediaPlayer:callingOnPlaybackError:type=MEDIA_ERROR_INTERNAL_DEVICE_ERROR,error=Your GStreamer installation is missing a plug-in.,currentId=2

上記のようなエラーが発生している場合、以下のリンクが参考になります。

https://github.com/alexa/avs-device-sdk/issues/500#issuecomment-366829573

現状、何かしらgst(gstreamer)関係がインストールされていないか、確認します。

dpkg -l | grep gstreamer
ii  gstreamer1.0-alsa:armhf     1.10.4-1           armhf              GStreamer plugin for ALSA
ii  gstreamer1.0-omx            1.10.4-1+rpt3      armhf              GStreamer OpenMAX plugins
ii  gstreamer1.0-omx-rpi        1.10.4-1+rpt3      armhf              OpenMax plugins for GStreamer
ii  gstreamer1.0-omx-rpi-config 1.10.4-1+rpt3      armhf              OpenMax plugins for GStreamer
ii  gstreamer1.0-plugins-base:a 1.10.4-1           armhf              GStreamer plugins from the "base" set
ii  gstreamer1.0-plugins-good:a 1.10.4-1           armhf              GStreamer plugins from the "good" set
ii  gstreamer1.0-tools          1.10.4-1           armhf              Tools for use with GStreamer
ii  gstreamer1.0-x:armhf
ii  libgstreamer-plugins-bad1.0 1.10.4-1           armhf              GStreamer development files for libraries from the "bad" set
ii  libgstreamer-plugins-bad1.0 1.10.4-1           armhf              GStreamer development files for libraries from the "bad" set
ii  libgstreamer-plugins-base1. 1.10.4-1           armhf              GStreamer libraries from the "base" set
ii  libgstreamer-plugins-base1. 1.10.4-1           armhf              GStreamer development files for libraries from the "base" se
ii  libgstreamer1.0-0:armhf     1.10.4-1           armhf              Core GStreamer libraries and elements
ii  libgstreamer1.0-dev         1.10.4-1           armhf              GStreamer core development files

必要と思われる、gstreamer関係のパッケージをインストールします。

sudo apt-get install -y gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly

インストール完了後、ラズパイを再起動します。

起動後、再度startsample.shを実行。

t + enterでwake。

反応してくれるか確認します。

課題

日本語の「アレクサ」で呼びかけても、反応してくれません。
すこし英語調で、「アゥレクサ」を呼びかけると、反応してくれます。

室内に一人とはいえ、なんだか恥ずかしいので、「アレクサ」で反応してほしい。

参考サイト