ラズベリーパイへのアレクサ(AVS)の導入

ラズベリーパイにAVSを導入する日本語のHow to記事がいくつかあるが、参考にしてもビルドの途中でエラーが出てうまくいかなかった。Amazon開発者向けの公式資料によると、現在公開されているRaspberry Pi向けビルドスクリプトは現在機能していないとのこと。したがって、以下の記載による方法で導入した。私はすべてSSHによるCUIで完結した。

https://developer.amazon.com/ja-JP/docs/alexa/avs-device-sdk/raspberry-pi.html

ちなみに私はアレクサをラズベリーパイZeroで稼働させる予定だったが、ビルドするのにメモリが足りないので、Step4あたりまではラズベリーパイ4を使用した。こういったことをするのにやはり高性能なラズパイは手元に1台あった方がいいと実感した。

Step1. AVSを利用する端末(ラズベリーパイ)をAmazonに登録する。詳しい方法は以下を参照するとよい。

https://qiita.com/zono_0/items/2c485b4176d349964876

Step2. ラズベリーパイの環境設定をする。

cd /home/pi/
mkdir sdk-folder

cd sdk-folder
mkdir sdk-build sdk-source third-party sdk-install db
cd /home/pi/
sudo apt-get update

以下はコアSDKの依存関係のインストール。(私はうまくいかなかったのでこれをスキップした。)

sudo apt-get -y install \
git gcc cmake build-essential libsqlite3-dev libcurl4-openssl-dev libfaad-dev \
libssl-dev libsoup2.4-dev libgcrypt20-dev libgstreamer-plugins-bad1.0-dev \
libnghttp2-dev nghttp2 gstreamer1.0-plugins-good libasound2-dev doxygen  

Port Audioとcurlをインストール。

cd /home/pi/sdk-folder/third-party
wget -c http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz
tar zxf pa_stable_v190600_20161030.tgz
cd portaudio
./configure --without-jack
make

cd /home/pi/sdk-folder/third-party
wget https://github.com/curl/curl/releases/download/curl-7_67_0/curl-7.67.0.tar.gz
tar xzf curl-7.67.0.tar.gz  
cd curl-7.67.0
./configure --with-nghttp2 --prefix=/home/pi/sdk-folder/third-party/curl-7.67.0 --with-libssl
make

Step3. AVSデバイスSDKをダウンロードする。

cd /home/pi/sdk-folder/sdk-source
git clone --single-branch git://github.com/alexa/avs-device-sdk.git

Step4. AVSデバイスSDKをビルドする。

cd /home/pi/sdk-folder/sdk-build
cmake /home/pi/sdk-folder/sdk-source/avs-device-sdk \
-DGSTREAMER_MEDIA_PLAYER=ON \
-DPORTAUDIO=ON \
-DPKCS11=OFF \
-DPORTAUDIO_LIB_PATH=/home/pi/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a \
-DPORTAUDIO_INCLUDE_DIR=/home/pi/sdk-folder/third-party/portaudio/include
-DCURL_INCLUDE_DIR=/home/pi/sdk-folder/third-party/curl-7.67.0/include/curl \
-DCURL_LIBRARY=/home/pi/sdk-folder/third-party/curl-7.67.0/lib/.libs/libcurl.so
make SampleApp

私の場合、上記のcmakeコマンドを実行するのに以下のようなエラーが出ていた。(curlが入っているにも関わらず。)

Could NOT find Libcurl (missing: CURL_LIB CURL_INCLUDE_DIR)

その場合、以下の記事を参考にlibcurl4-openssl-devをインストールするとうまくいった。

sudo apt-get install libcurl4-openssl-dev

https://qiita.com/the_remonn/items/c7c23313e2b96688fe2f

Step5. SDK構成ファイルのセットアップをする。

AVSの管理ページからダウンロードしてきたconfig.jsonを、/home/pi/sdk-folder/sdk-source/avs-device-sdk/tools/Install に配置してから以下を実行すること。私はSSHでクライアントPCからラズベリーパイへscpコマンドを使用してconfig.jsonを転送した。

https://qiita.com/chihiro/items/142ebe6980a498b5d4a7

cd /home/pi/sdk-folder/sdk-source/avs-device-sdk/tools/Install

bash genConfig.sh config.json 12345 \
/home/pi/sdk-folder/db \
 home/pi/sdk-folder/sdk-source/avs-device-sdk \
/home/pi/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json \
-DSDK_CONFIG_MANUFACTURER_NAME="raspberrypi" \
-DSDK_CONFIG_DEVICE_DESCRIPTION="raspberrypi"

オーディオ再生を有効にする。

vi /home/pi/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json

“cblAuthDelegate”:{… と書いてある直前に以下を挿入して保存。

{
    "gstreamerMediaPlayer":{
        "audioSink":"alsasink"
    },

Step6. マイクのセットアップをする。

vi ~/.asoundrc

以下を追記して保存。(私の場合、すでに記述があったので特になにもしていない。)

pcm.!default {
    type asym
    playback.pcm {
        type plug
        slave.pcm "hw:0,0"
    }
    capture.pcm {
        type plug
        slave.pcm "hw:1,0"
    }
}

サウンドテストを実行してみる。

sudo apt-get install sox -y && rec test.wav

そうすると以下の表示が出てくる。ラズベリーパイにマイクを接続している状態で音声入力をすると、音声認識バーのようなものが動く。

In: 0.00% 00:00:01 [00:00:00:00] out:0.00M [     |     ] clip:0

Step7. サンプルアプリを認証して実行する。

cd /home/pi/sdk-folder/sdk-build
PA_ALSA_PLUGHW=1 ./SampleApp/src/SampleApp ./Integration/AlexaClientSDKConfig.json DEBUG9

以下のような表示がされたら、ブラウザでそのURLにアクセスして、表示されている4桁のコードを入力する。

##################################
#       NOT YET AUTHORIZED       #
##################################
################################################################################################
#       To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX}       #
################################################################################################

認証がうまくいくと、以下のような表示になる。

###########################
#       Authorized!       #
###########################
########################################
#       Alexa is currently idle!       #
########################################

ひとまず今日はここまで。導入したアレクサの使用方法はこちらに記載があるので、後日実践。

https://developer.amazon.com/ja-JP/docs/alexa/avs-device-sdk/use-the-sample-app.html#interact-with-alexa-by-using-tap-to-talk