Alexaのウェイクワードを変更してみた!

インターンをしている樋口です.

タイトルの通り,Alexaのウェイクワードを変更してみました.

今回の開発は製品として販売されているAlexaを直接弄るのではなく,Raspberry PiとAVSで構築したモックを弄っています.
Raspberry PiのセットアップとAVSのアカウント登録に関しては,他に記事が多くあるので省きます.


1.AVS SDKを落とす

セットアップの完了したRaspberry Piを用意したら,作業用ディレクトリを適当に作ってください.

mkdir avs_sdk

cd avs_sdk


次に,必要なファイルを落としてきます.
(最新版を落とすと,色々とエラーがあり大変だったのでv1.9から取得しています.少し調べれば最新verでもできると思うので,どうしてもっていう人はv1.9のところをmasterに変えてください.)

wget https://raw.githubusercontent.com/alexa/avs-device-sdk/v1.9/tools/Install/setup.sh && wget https://raw.githubusercontent.com/alexa/avs-device-sdk/v1.9/tools/Install/config.txt && wget https://raw.githubusercontent.com/alexa/avs-device-sdk/v1.9/tools/Install/pi.sh


2.ビルドの準備

落としてきたファイルの内,config.txtにAVSの登録情報を記載します.
CLIENT_IDとPRODUCT_IDを変更してください.

次に,ウェイクワードを変更するための事前準備をします.
今いるディレクトリに"third-party"という名前のフォルダを新規作成してください.
その後,third-party内にsnowboy(ウェイクワード検索エンジン)を落としてきます.

sudo git clone https://github.com/Kitt-AI/snowboy.git

さらに,必要なライブラリを追加でインストールします.

sudo apt install libatlas-base-dev

次に,ビルドに使うファイルの設定を一部変更する必要があります.
/AVS-SDK/avs-sdk/setup.shをテキストエディタで開いてください.

  echo "==============> BUILDING SDK =============="
  echo

  mkdir -p $BUILD_PATH
  cd $BUILD_PATH
  cmake "$SOURCE_PATH/avs-device-sdk" \
      -DCMAKE_BUILD_TYPE=DEBUG \
      -DKITTAI_KEY_WORD_DETECTOR=ON \
      -DKITTAI_KEY_WORD_DETECTOR_LIB_PATH="$THIRD_PARTY_PATH/snowboy/lib/rpi/libsnowboy-detect.a" \
      -DKITTAI_KEY_WORD_DETECTOR_INCLUDE_DIR="$THIRD_PARTY_PATH/snowboy/include" \
      "${CMAKE_PLATFORM_SPECIFIC[@]}"

  cd $BUILD_PATH
  make SampleApp -j2

else
  cd $BUILD_PATH
  make SampleApp -j2
fi

echo
echo "==============> SAVING CONFIGURATION FILE =============="

BUILDING SDKと書いてある項目をこのように変更してください.
snowboyをウェイクワードエンジンに設定するような命令文を追加しています.


3.ビルド

これが完了したら
いよいよ,ビルドです.必要な方は下記コマンドでsudo権限を与えてから,ビルドを実行します.

sudo chmod 777 pi.sh setup.sh
sudo setup.sh config.txt

ターミナル上の文字がもの凄い速度で流れて行きます.途中で,同意を求められるので"agree"や"yes"とタイプしてください.

しかし,今回は強制的にウェイクワードエンジンを変更しているので,エラーが吐かれると思います.
それでもエラーになる所までのビルドは完了している筈です.(ディレクトリ内にファイルが増えている筈)
次に,途中までビルドしたお陰でディレクトリに増えた設定ファイル達を変更して,再ビルドします.

/avs-sdk/startsample.sh を開いて

"/home/pi/avs-sdk/third-party/alexa-rpi/models" 

とある,音声モデルのパス指定部を

"/home/pi/avs-sdk/third-party//snowboy/resources" 

に変更してください.
後ほど,このパスに自作の音声モデルを配置します.

さらに,/avs-sdk/avs-device-sdk/build/cmake/BuildOptions.cmake を開いて

# Set up the compiler flags.
add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

となるように変更してください.

これが終わったら,先ほどと同じコマンドをターミナルから叩いて再ビルドです.

 sudo ./setup.sh config.txt 

今度は,エラーが出ずに最後まで進む筈です.
環境によっては,何処かに引っかかる可能性があるかもしれませんが...

この2回目のビルドが完了すれば,作業は終わったも同然です.
あとは,snowboyで作成したpmdlファイルを「alexa.umdl」というファイル名にリネームしてから,先ほど設定したパスに置いてください.

テストです.

sudo ./startsample.sh

を実行してみてください.
あなたの登録した音声モデルを呼びかけたり,別の言葉を呼びかけたり,精度を試してみてください.
精度向上の方法等は,他サイトに纏まっていますので,そちらを参考にしてください.

参考サイト
【Raspberry Pi】【AVS Device SDK】ラズパイでAlexaする - かっこいいブログ名つけたい