ラズベリーパイに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! #
########################################
ひとまず今日はここまで。導入したアレクサの使用方法はこちらに記載があるので、後日実践。