|
1: 2018-05-06 (日) 04:58:51 yuji |
| + | * AVS Device SDKを動かしてみる [#he5cb35e] |
| | | |
| + | AVS Device SDKをRaspberry Piにインストールする手順は, |
| + | https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide |
| + | に書かれている。 |
| + | |
| + | ** 準備 [#s31f3360] |
| + | ホームにsdk-folderを作成して,作業をするようにした。 |
| + | $ cd /home/yuji/ |
| + | $ mkdir sdk-folder |
| + | $ cd sdk-folder |
| + | $ mkdir sdk-build sdk-source third-party application-necessities |
| + | $ cd application-necessities |
| + | $ mkdir sound-files |
| + | |
| + | ** 依存関連をインストール [#i18b0f40] |
| + | AVS Device SDKは,いくつかのライブラリを必要とするので,それをインストールする。 |
| + | $ sudo apt-get install git gcc cmake build-essential libsqlite3-dev libcurl4-openssl-dev libfaad-dev libsoup2.4-dev libgcrypt20-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-good libasound2-dev doxygen |
| + | |
| + | PortAudioが,マイクを使用するのに必要なのでビルドしておく。 |
| + | $ cd /home/yuji/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 |
| + | |
| + | commentjsonは,AlexaClientSDKConfig.jsonをパースするのに必要。 |
| + | commentjsonを以下のようにしてインストールする。 |
| + | $ pip install commentjson |
| + | |
| + | ** AVS Device SDKとSensory wake word engineを取得する [#c877f7ca] |
| + | サイトには,以下のようにしろと書いてある。 |
| + | + AVS Device SDKをsdk-sourceにクローンする~ |
| + | $ cd /home/yuji/sdk-folder/sdk-source |
| + | $ git clone git://github.com/alexa/avs-device-sdk.git |
| + | + Sensory wake word engineをthird-partyにクローンする~ |
| + | $ cd /home/yuji/sdk-folder/third-party |
| + | $ git clone git://github.com/Sensory/alexa-rpi.git |
| + | + Sensory's wake word engineを動かすためのライセンスを取得する: |
| + | $ cd /home/yuji/sdk-folder/third-party/alexa-rpi/bin/ |
| + | $ ./license.sh |
| + | |
| + | 上のWake wordを認識するプログラムをSensoryの代わりにSnowboyにするため,Snowboyをダウンロードし依存パッケージを追加。 |
| + | - Snowboyを取得する。~ |
| + | $ cd /home/yuji/sdk-folder/third-party |
| + | $ git clone https://github.com/Kitt-AI/snowboy.git |
| + | - Snowboyが必要とするライブラリをインストールする。 |
| + | $ sudo apt-get install libatlas-base-dev |
| + | |
| + | ** Snowboyのビルドエラー対策を行う [#e1c23a19] |
| + | Snowboy向けcmakeを実行してSampleアプリをビルドしようとすると,ビルドエラーが発生してしまう。ビルドエラーは2個あった。 |
| + | |
| + | 以下のように修正した。 |
| + | |
| + | ''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/KWD/KittAi/src/KittAiKeyWordDetector.cpp'' |
| + | std::chrono::milliseconds msToPushPerIteration) : |
| + | AbstractKeywordDetector(keyWordObservers, keyWordDetectorStateObservers), |
| + | m_stream{stream}, |
| + | m_maxSamplesPerPush{(audioFormat.sampleRateHz / HERTZ_PER_KILOHERTZ) * static_cast<unsigned int>(msToPushPerIteration.count())}{ |
| + | に,キャスト''static_cast''を追加。 |
| + | |
| + | ''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/build/cmake/BuildOptions.cmake'' |
| + | add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0) |
| + | を, |
| + | # Set up the compiler flags. |
| + | の下あたりに追加。 |
| + | |
| + | ** AVS Device SDKのビルド [#a5c40dd0] |
| + | |
| + | *** Makefileを作成 [#re188a80] |
| + | ビルドするには, |
| + | $ cd /home/yuji/sdk-folder/sdk-build |
| + | $ cmake /home/yuji/sdk-folder/sdk-source/avs-device-sdk -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=/home/yuji/sdk-folder/third-party/alexa-rpi/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/alexa-rpi/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=/home/yuji/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/portaudio/include |
| + | とある。 |
| + | |
| + | Snowboyにするため,以下のように変更してcmakeでMakefileを作成する。 |
| + | $ cd /home/yuji/sdk-folder/sdk-build |
| + | $ cmake /home/yuji/sdk-folder/sdk-source/avs-device-sdk -DKITTAI_KEY_WORD_DETECTOR=ON -DKITTAI_KEY_WORD_DETECTOR_LIB_PATH=/home/yuji/sdk-folder/third-party/snowboy/lib/rpi/libsnowboy-detect.a -DKITTAI_KEY_WORD_DETECTOR_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/snowboy/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=/home/yuji/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=/home/yuji/sdk-folder/third-party/portaudio/include |
| + | |
| + | *** AVS Device SDKをビルド [#d94583f0] |
| + | 後は,SDKのサンプルアプリをビルドする。 |
| + | $ make |
| + | |
| + | ** SDKの起動とオプション [#ua75d18f] |
| + | 公式手順では起動時オプションがこう書いてある。 |
| + | $ cd /home/yuji/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp /home/yuji/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json /home/yuji/sdk-folder/third-party/alexa-rpi/models |
| + | |
| + | 最後の引数がどうもWake word認識プログラム用らしく,これをSensoryからSnowboyに変更する。~ |
| + | そのため,以下のように変更して実行する。 |
| + | $ cd /home/yuji/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp /home/yuji/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json /home/yuji/sdk-folder/third-party/snowboy/resources/ |
| + | snowboyのresouucesというフォルダを参照する形にすればいいようだ。 |
| + | |
| + | これで起動して,「アレクサ」って言ったら,応答してくれたら成功。~ |
| + | しかし,「アレクサ」っていうと反応はしているようだが,音が出ない。~ |
| + | MediaPlayer/src/MediaPlayer.cppの588行目を, |
| + | MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "autoaudiosink"); |
| + | のようになっているのを, |
| + | MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "alsasink"); |
| + | に変更した。 |
| + | |
| + | ** 感度とボリュームの変更 [#h336c7c9] |
| + | デフォルト状態だとマイクの感度が低すぎてなかなか反応しない。~ |
| + | マイク感度と音声のボリュームは,ソースに値が決め打ちされている。~ |
| + | ''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/KWD/KWDProvider/src/KeywordDetectorProvider.cpp''の26行目に, |
| + | /// The sensitivity of the Kitt.ai engine. |
| + | static const double KITT_AI_SENSITIVITY = 0.60; |
| + | |
| + | /// The audio amplifier level of the Kitt.ai engine. |
| + | static const float KITT_AI_AUDIO_GAIN = 2.0; |
| + | と,ハードコーティングされている。~ |
| + | KITT_AI_SENSITIVITYでWake upでのマイク感度,KITT_AI_AUDIO_GAINで音声の大きさを設定できるみたい。~ |
| + | KITT_AI_SENSITIVITY = 0.7 |
| + | KITT_AI_AUDIO_GAIN = 0.5 |
| + | にした。 |
| + | |
| + | ** ちょっと追加 [#taa71456] |
| + | 現状だと,AlexaがVoice Wakeupされているかどうかを画面以外からはわからない。~ |
| + | そこで,Wake upしたら音で反応するようにしてみた。 |
| + | |
| + | ''/home/yuji/sdk-folder/sdk-source/avs-device-sk/SampleApp/src/UIManager.cpp''の372行目あたりに, |
| + | switch (m_dialogState) { |
| + | case DialogUXState::IDLE: |
| + | ConsolePrinter::prettyPrint("Alexa is currently idle!"); |
| + | return; |
| + | case DialogUXState::LISTENING: |
| + | system("aplay /home/yuji/sdk-folder/third-party/snowboy/resources/dong.wav 1>/dev/null 2>/dev/null "); |
| + | ConsolePrinter::prettyPrint("Listening..."); |
| + | と追加した。system関数でaplayで音を出力しているだけ。 |
| + | wavファイルは,Snowboyのresourceフォルダにあったファイルにしている。 |