1: 2018-05-06 (日) 04:58:51 yuji ソース
Line 1: Line 1:
 +* 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フォルダにあったファイルにしている。


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 1926, today: 1, yesterday: 0