1: 2018-05-06 (日) 04:58:51 yuji | 現: 2020-12-26 (土) 16:07:50 yuji at 2018-05-11 (金) 23:45:41 |
||
---|---|---|---|
Line 1: | Line 1: | ||
* AVS Device SDKを動かしてみる [#he5cb35e] | * AVS Device SDKを動かしてみる [#he5cb35e] | ||
- | AVS Device SDKをRaspberry Piにインストールする手順は, | + | Amazon Alexaを動かすにはいくつかのやり方があるようだ。 |
- | https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide | + | - [[alexa-avs-sample-app>https://github.com/alexa/alexa-avs-sample-app]]~ |
- | に書かれている。 | + | Javaで作成されているフロントエンドアプリ。GUI環境が必要。~ |
+ | (いつの間にか,公開されなくなってしまった。) | ||
+ | - [[avs-device-sdk>https://github.com/alexa/avs-device-sdk]]~ | ||
+ | C++で作成されているアプリ。製品なんかに組み込む用途向けらしい。CUI環境のみで動作する。~ | ||
+ | (月1回のペースで更新されているようだ。) | ||
+ | |||
+ | このページでは, [[AVS Device SDK>https://developer.amazon.com/ja/alexa-voice-service/sdk]] を手持ちのAIY Voice Kitを載せているRaspberry Pi 3Bで,試してみることにした。 | ||
+ | |||
+ | AVS Device SDKをRaspberry Piにインストールする手順は,https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide に書かれている。 | ||
+ | |||
+ | AVSは,Alexa Voice Serviceのこと。 | ||
** 準備 [#s31f3360] | ** 準備 [#s31f3360] | ||
- | ホームにsdk-folderを作成して,作業をするようにした。 | + | ホームにsdk-folderを作成する。 |
$ cd /home/yuji/ | $ cd /home/yuji/ | ||
$ mkdir sdk-folder | $ mkdir sdk-folder | ||
Line 13: | Line 23: | ||
$ cd application-necessities | $ cd application-necessities | ||
$ mkdir sound-files | $ mkdir sound-files | ||
+ | |||
+ | ** サウンドdriverとalsa,pulseaudioの設定 [#na7cfacd] | ||
+ | [[AIY Voice Kit(V1になった古いやつ)>/PC/RaspberryPi/スマートスピーカー/AIY Voice KIT]] をRaspberry Pi 3Bに乗っけた物があるので,それにAVSを動かすようにしてみた。 | ||
+ | |||
+ | ''/boot/config.txt''でのサウンドdriverをロードする部分を,''AIY Voice Kitのみ''使うようにしてみる。~ | ||
+ | # Enable audio (loads snd_bcm2835) | ||
+ | #dtparam=audio=on | ||
+ | #dtoverlay=i2s-mmap | ||
+ | dtoverlay=googlevoicehat-soundcard | ||
+ | このように修正して,Raspberry Piのオンボードのサウンド機能をoffにして,AIY Voice KitのVoice HATのみを使えるようにする。 | ||
+ | |||
+ | alsaの設定ファイルを,AIY Voice Kitのマイクとスピーカーを使用するようにする。~ | ||
+ | [[/etc/asound.conf>http://www.alsa-project.org/main/index.php/Asoundrc]]を以下の内容にする。~ | ||
+ | options snd_rpi_googlemihat_soundcard index=0 | ||
+ | |||
+ | pcm.softvol { | ||
+ | type softvol | ||
+ | slave.pcm dmix | ||
+ | control { | ||
+ | name Master card 0 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | pcm.micboost { | ||
+ | type route | ||
+ | slave.pcm dsnoop | ||
+ | ttable { | ||
+ | 0.0 30.0 | ||
+ | 1.1 30.0 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | pcm.!default { | ||
+ | type asym | ||
+ | playback.pcm "plug:softvol" | ||
+ | capture.pcm "plug:micboost" | ||
+ | } | ||
+ | |||
+ | ctl.!default { | ||
+ | type hw | ||
+ | card 0 | ||
+ | } | ||
+ | |||
+ | そして,''~/.asoundrc''にコピーしておく。 | ||
+ | $ cp /etc/asound.conf ~/.asoundrc | ||
+ | |||
+ | AVS Device SDKは,PulseAudioを使用してはいないようだ。また,Raspbianを更新したらPulseAudioが起動しなくなっていた。 | ||
+ | |||
+ | しかし,AVSを動かす時に音関連はPulseAudio経由で行うことにする。~ | ||
+ | なので,PulseAudioの設定ファイル''/etc/pulse/default.pa''を設定しておく。 | ||
+ | load-module module-alsa-sink device=dmix | ||
+ | load-module module-alsa-source device=dsnoop | ||
+ | #load-module module-alsa-source device=hw:0,0 | ||
+ | : | ||
+ | : | ||
+ | # comment out by Yuji Ueno | ||
+ | ### Automatically load driver modules depending on the hardware available | ||
+ | #.ifexists module-udev-detect.so | ||
+ | #load-module module-udev-detect | ||
+ | #.else | ||
+ | # Use the static hardware detection module (for systems that lack udev support) | ||
+ | # comment out by Yuji Ueno | ||
+ | #load-module module-detect | ||
+ | #.endif | ||
+ | このようにして,PulseAudioからALSAライブラリ(dmix/dsnoopプラグイン使用)経由でサウンドを使用するようにする。~ | ||
+ | また,udevによる自動でサウンドドライバーをロードしないようにしておく。(起動時にロードするので) | ||
+ | |||
+ | Raspberry Piをリブート後,pacmdを使って,音量とマイク入力レベルの調整をしておく。pacmdを使うのは,amixerだとマイク入力を100%以上に設定できないため。 | ||
+ | // $ amixer sset Master 50% | ||
+ | // $ amixer sset Capture 100% | ||
+ | $ pacmd set-sink-volume alsa_output.dmix 0x6667 | ||
+ | $ pacmd set-source-volume alsa_input.dsnoop 0x15000 | ||
+ | |||
+ | マイク入力レベルを上げるのは,最近のStretchだとなぜかマイク感度が凄く低くなってしまったため。(おそらく,AIY Voice KitのVoice HATのドライバーの設定だとは思うが,対応方法がわからなかった。) | ||
** 依存関連をインストール [#i18b0f40] | ** 依存関連をインストール [#i18b0f40] | ||
- | AVS Device SDKは,いくつかのライブラリを必要とするので,それをインストールする。 | + | 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 | $ 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が,マイクを使用するのに必要なのでビルドしておく。 | + | マイクを使用するのに[[PortAudio>http://portaudio.com/]]を使用するので,ダウンロードしてビルドしておく。 |
- | $ cd /home/yuji/sdk-folder/third-party | + | $ cd ~/sdk-folder/third-party |
$ wget -c http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz | $ wget -c http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz | ||
$ tar zxf pa_stable_v190600_20161030.tgz | $ tar zxf pa_stable_v190600_20161030.tgz | ||
$ cd portaudio | $ cd portaudio | ||
- | $ /configure --without-jack | + | $ ./configure --without-jack |
$ make | $ make | ||
- | commentjsonは,AlexaClientSDKConfig.jsonをパースするのに必要。 | + | [[commentjson>https://github.com/vaidik/commentjson]]は,AlexaClientSDKConfig.jsonをパースするのに必要。 |
commentjsonを以下のようにしてインストールする。 | commentjsonを以下のようにしてインストールする。 | ||
$ pip install commentjson | $ pip install commentjson | ||
- | ** AVS Device SDKとSensory wake word engineを取得する [#c877f7ca] | + | ** AVS Device SDKとWakeWordエンジン(音声トリガー)をダウンロードする [#c877f7ca] |
- | サイトには,以下のようにしろと書いてある。 | + | Alexaは,話しかけた言葉に反応するようなシステム。その話しかけた言葉を認識するシステムがWakeWordエンジンって言うみたい。~ |
+ | 上記のサイトには,以下のようにAVS Device SDKとWakeWordエンジンには''Sensory''をインストールしろと書いてある。 | ||
+ AVS Device SDKをsdk-sourceにクローンする~ | + AVS Device SDKをsdk-sourceにクローンする~ | ||
- | $ cd /home/yuji/sdk-folder/sdk-source | + | $ cd ~/sdk-folder/sdk-source |
$ git clone git://github.com/alexa/avs-device-sdk.git | $ git clone git://github.com/alexa/avs-device-sdk.git | ||
- | + Sensory wake word engineをthird-partyにクローンする~ | + | + Sensory's WakeWord Engineをthird-partyにクローンする~ |
- | $ cd /home/yuji/sdk-folder/third-party | + | $ cd ~/sdk-folder/third-party |
$ git clone git://github.com/Sensory/alexa-rpi.git | $ git clone git://github.com/Sensory/alexa-rpi.git | ||
- | + Sensory's wake word engineを動かすためのライセンスを取得する: | + | + Sensory's WakeWord Engineを動かすためのライセンスを取得する: |
- | $ cd /home/yuji/sdk-folder/third-party/alexa-rpi/bin/ | + | $ cd ~/sdk-folder/third-party/alexa-rpi/bin/ |
$ ./license.sh | $ ./license.sh | ||
- | 上のWake wordを認識するプログラムをSensoryの代わりにSnowboyにするため,Snowboyをダウンロードし依存パッケージを追加。 | + | しかし今回は,WakeWordを認識するプログラムをSensoryではなく [[Snowboy>https://snowboy.kitt.ai/]] を利用する。~ |
- | - Snowboyを取得する。~ | + | 変える理由は,デフォルトのSensoryだと,WakeWord認識時のマイク感度を調整出来ないのと,使用できるライセンスが時限(3ヶ月)があるため。また,Snowboyだと,「アレクサ」って呼びかける言葉も''任意の言葉に変えられる''みたい。 |
- | $ cd /home/yuji/sdk-folder/third-party | + | |
+ | AVS Device SDKとSnowboyをダウンロードし,その依存パッケージを追加する。 | ||
+ | + AVS Device SDKをsdk-sourceにクローンする~ | ||
+ | $ cd ~/sdk-folder/sdk-source | ||
+ | $ git clone git://github.com/alexa/avs-device-sdk.git | ||
+ | 上と同じ~ | ||
+ | + Snowboyを取得する。~ | ||
+ | $ cd ~/sdk-folder/third-party | ||
$ git clone https://github.com/Kitt-AI/snowboy.git | $ git clone https://github.com/Kitt-AI/snowboy.git | ||
- | - Snowboyが必要とするライブラリをインストールする。 | + | Snowboyはコンパイル済みのバイナリ供給のようだ。 |
+ | + Snowboyが必要とするライブラリをインストールする。 | ||
$ sudo apt-get install libatlas-base-dev | $ sudo apt-get install libatlas-base-dev | ||
- | ** Snowboyのビルドエラー対策を行う [#e1c23a19] | + | Snowboyのリソースファイル(「アレクサ」に反応する)をセットしておく。 |
- | Snowboy向けcmakeを実行してSampleアプリをビルドしようとすると,ビルドエラーが発生してしまう。ビルドエラーは2個あった。 | + | $ cd ~/sdk-folder/third-party/snowboy/resources |
+ | $ cp alexa/alexa-avs-sample-app/alexa.umdl . | ||
+ | |||
+ | ** AVS Device SDKのビルド [#a5c40dd0] | ||
+ | |||
+ | *** Makefileを作成 [#re188a80] | ||
+ | ビルドするには,まずcmakeでMakefileを作成しろと書いてある。 | ||
+ | $ cd ~/sdk-folder/sdk-build | ||
+ | $ cmake ~/sdk-folder/sdk-source/avs-device-sdk -DSENSORY_KEY_WORD_DETECTOR=ON -DSENSORY_KEY_WORD_DETECTOR_LIB_PATH=~/sdk-folder/third-party/alexa-rpi/lib/libsnsr.a -DSENSORY_KEY_WORD_DETECTOR_INCLUDE_DIR=~/sdk-folder/third-party/alexa-rpi/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=~/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=~/sdk-folder/third-party/portaudio/include | ||
+ | |||
+ | Snowboyにするため,以下のように変更してcmakeでMakefileを作成した。 | ||
+ | $ cd ~/sdk-folder/sdk-build | ||
+ | $ cmake ~/sdk-folder/sdk-source/avs-device-sdk -DKITTAI_KEY_WORD_DETECTOR=ON -DKITTAI_KEY_WORD_DETECTOR_LIB_PATH=~/sdk-folder/third-party/snowboy/lib/rpi/libsnowboy-detect.a -DKITTAI_KEY_WORD_DETECTOR_INCLUDE_DIR=~/sdk-folder/third-party/snowboy/include -DGSTREAMER_MEDIA_PLAYER=ON -DPORTAUDIO=ON -DPORTAUDIO_LIB_PATH=~/sdk-folder/third-party/portaudio/lib/.libs/libportaudio.a -DPORTAUDIO_INCLUDE_DIR=~/sdk-folder/third-party/portaudio/include | ||
+ | |||
+ | *** AVS Device SDKをビルド [#d94583f0] | ||
+ | 後は,SDK Sampleアプリをビルドする。 | ||
+ | $ cd ~/sdk-folder/sdk-build | ||
+ | $ make | ||
+ | |||
+ | *** Snowboy関連でビルドエラー [#e1c23a19] | ||
+ | SDK Sampleアプリをビルドしようとすると,%%Snowboy関連でビルドエラーになった。%%~ | ||
+ | 最近更新されているソース(v1.11.0)だと,どのバージョンからかわからないけど修正されていたので,以下は必要なくなった。 | ||
以下のように修正した。 | 以下のように修正した。 | ||
- | ''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/KWD/KittAi/src/KittAiKeyWordDetector.cpp'' | + | ''~/sdk-folder/sdk-source/avs-device-sdk/KWD/KittAi/src/KittAiKeyWordDetector.cpp'' |
std::chrono::milliseconds msToPushPerIteration) : | std::chrono::milliseconds msToPushPerIteration) : | ||
AbstractKeywordDetector(keyWordObservers, keyWordDetectorStateObservers), | AbstractKeywordDetector(keyWordObservers, keyWordDetectorStateObservers), | ||
m_stream{stream}, | m_stream{stream}, | ||
m_maxSamplesPerPush{(audioFormat.sampleRateHz / HERTZ_PER_KILOHERTZ) * static_cast<unsigned int>(msToPushPerIteration.count())}{ | m_maxSamplesPerPush{(audioFormat.sampleRateHz / HERTZ_PER_KILOHERTZ) * static_cast<unsigned int>(msToPushPerIteration.count())}{ | ||
- | に,キャスト''static_cast''を追加。 | + | と,''static_cast''を追加。 |
- | ''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/build/cmake/BuildOptions.cmake'' | + | それと,''~/sdk-folder/sdk-source/avs-device-sdk/build/cmake/BuildOptions.cmake'' |
add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0) | add_definitions (-D_GLIBCXX_USE_CXX11_ABI=0) | ||
を, | を, | ||
Line 67: | Line 181: | ||
の下あたりに追加。 | の下あたりに追加。 | ||
- | ** AVS Device SDKのビルド [#a5c40dd0] | + | 再度,makeでビルドする。 |
- | *** Makefileを作成 [#re188a80] | + | ** 設定ファイルを編集 [#k0733acf] |
- | ビルドするには, | + | [[Amazon開発者コンソール(USAのAmazon)>https://developer.amazon.com/ja/]]でAVS Device SDK用にデバイス登録(製品登録)する。 |
- | $ 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 | + | 好きな名前で良い。AIYVoiceKit |
+ | - 製品ID~ | ||
+ | 好きなIDで良い。AIYVoiceKit | ||
+ | - 製品タイプ~ | ||
+ | Alexa内臓の端末。 | ||
+ | - ご使用の端末は、コンパニオンアプリを使用しますか~ | ||
+ | はい | ||
+ | - 商品カテゴリ~ | ||
+ | ワイヤレススピーカー | ||
+ | - 製品概要~ | ||
+ | なんでもよい。Raspberry Pi Sample Project | ||
+ | - 画像をアップロード~ | ||
+ | 未登録。 | ||
+ | - エンドユーザーは、商品とどのようにやり取りするのでしょうか ~ | ||
+ | ハンズフリーなのかも。ファーフィールドにしてみた。 | ||
+ | - この製品を商品として配信する予定ですか ?~ | ||
+ | いいえ。 | ||
+ | - お客様の端末は以下のために使用されますか Alexa for Business?~ | ||
+ | いいえ。 | ||
+ | - お客様の端末は以下のために使用されますか: Alexaモバイルアクセサリー プロトコルですか?~ | ||
+ | いいえ。 | ||
- | *** AVS Device SDKをビルド [#d94583f0] | + | セキュリティプロファイル:~ |
- | 後は,SDKのサンプルアプリをビルドする。 | + | 情報と同じに登録した。~ |
- | $ make | + | ウェブのところのクライアントIDをメモしておく。 |
+ | |||
+ | こんなように登録してみた。 | ||
+ | |||
+ | 登録した情報を,''~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json''ファイルにをセットする。~ | ||
+ | { | ||
+ | "deviceInfo":{ | ||
+ | "clientId":"amzn1.application-oa2-client.xxxxxxxxxxxxxxxxxxxxxxxxxxx", | ||
+ | "deviceSerialNumber":"yyyyyy", | ||
+ | "productId":"AIYVoiceKit" | ||
+ | }, | ||
+ | "alertsCapabilityAgent":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/alerts.db" | ||
+ | }, | ||
+ | "certifiedSender":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/certifiedSender.db" | ||
+ | }, | ||
+ | "settings":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/settings.db", | ||
+ | "defaultAVSClientSettings":{ | ||
+ | "locale":"ja-JP" | ||
+ | } | ||
+ | }, | ||
+ | "notifications":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/notifications.db" | ||
+ | }, | ||
+ | "cblAuthDelegate":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/cblAuthDelegate.db" | ||
+ | }, | ||
+ | "dcfDelegate":{ | ||
+ | }, | ||
+ | "miscDatabase":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/miscDatabase.db" | ||
+ | }, | ||
+ | "sampleApp":{ | ||
+ | "endpoint": "https://avs-alexa-fe.amazon.com", | ||
+ | "displayCardsSupported":true | ||
+ | }, | ||
+ | "gstreamerMediaPlayer":{ | ||
+ | "audioSink":"alsasink" | ||
+ | } | ||
+ | } | ||
+ | deviceInfoのclientId,deviceSerialNumber,productIdを設定する。~ | ||
+ | それぞれ,[[Amazon開発者コンソール>https://developer.amazon.com/ja/]]で作成したデバイスの内容を設定するんだけど,deviceSerialNumberは,なんでも良いみたいなんで,123456789にした。 | ||
+ | |||
+ | Locale設定を,''ja-JP''にしておく。 | ||
+ | |||
+ | [[エンドポイント>https://developer.amazon.com/ja/docs/alexa-voice-service/api-overview.html#endpoints]] を,日本の https://avs-alexa-fe.amazon.com にする。 | ||
+ | |||
+ | それと,dbファイル名を任意の場所に指定する。 | ||
+ | |||
+ | バージョンが更新されて,以下のエントリが必要になった。 | ||
+ | "deviceSettings":{ | ||
+ | "databaseFilePath":"/home/yuji/sdk-folder/application-necessities/deviceSettings.db" | ||
+ | }, | ||
** SDKの起動とオプション [#ua75d18f] | ** 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 | + | $ cd ~/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json ~/sdk-folder/third-party/alexa-rpi/models |
- | 最後の引数がどうもWake word認識プログラム用らしく,これをSensoryからSnowboyに変更する。~ | + | 最後の引数が,WakeWord認識プログラム用みたいなんで,これを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/ | + | $ cd ~/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json ~/sdk-folder/third-party/snowboy/resources/ |
- | snowboyのresouucesというフォルダを参照する形にすればいいようだ。 | + | snowboyのresouucesというフォルダを参照するようにすればいいようだ。 |
+ | |||
+ | *** アプリの認証 [#ze317ec1] | ||
+ | 起動すると, | ||
+ | ################################## | ||
+ | # NOT YET AUTHORIZED # | ||
+ | ################################## | ||
+ | ###################################################################################### | ||
+ | # To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX} ###################################################################################### | ||
+ | こんなメッセージが出るので,WEBブラウザで https://amazon.com/us/code にアクセスして自分のアカウントでログインした後,SDK SampleAppを実行した時に表示される認証コードを入力する。~ | ||
+ | |||
+ | 承認されれば,SampleAppがauthorizedになって,少し経つとidle状態になる。 | ||
+ | ######################################## | ||
+ | # Alexa is currently idle! # | ||
+ | ######################################## | ||
+ | |||
+ | これで,「アレクサ」って言ったら,応答してくれたら成功なんだけど・・・ | ||
+ | |||
+ | ** 音声がスピーカーから出力されない [#v21f6090] | ||
+ | しかし,「アレクサ」っていうと反応はしているようだが,音がなぜか出ない。 | ||
- | これで起動して,「アレクサ」って言ったら,応答してくれたら成功。~ | + | ''~/sdk-folder/sdk-source/avs-device-sdk/MediaPlayer/src/MediaPlayer.cpp''の以下の行が,(新しいバージョンだと,''~/sdk-folder/sdk-source/avs-device-sdk/MediaPlayer/GStreamerMediaPlayer/src/MediaPlayer.cpp''にソースファイルが変更されている) |
- | しかし,「アレクサ」っていうと反応はしているようだが,音が出ない。~ | + | |
- | MediaPlayer/src/MediaPlayer.cppの588行目を, | + | |
MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "autoaudiosink"); | MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "autoaudiosink"); | ||
のようになっているのを, | のようになっているのを, | ||
MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "alsasink"); | MEDIAPLAYER_AUDIO_SINK_KEY, &audioSinkElement, "alsasink"); | ||
- | に変更した。 | + | に変更して再ビルドしたら,音が出た。 |
+ | |||
+ | Locale設定を日本語にしているんで大丈夫と思うが,もし英語で応答してきた場合は,c<ret>,1<ret>,6<ret>として,Localeをja_JPの日本語に設定できる。以後は日本語で応答してくれる。 | ||
+ | |||
+ | ** マイク感度と音声ボリュームの変更 [#h336c7c9] | ||
+ | デフォルト状態だとマイク感度が低すぎて,「アレクサ」になかなか反応しない。それに対して,しゃべる音声がめちゃくちゃ大きい。~ | ||
- | ** 感度とボリュームの変更 [#h336c7c9] | ||
- | デフォルト状態だとマイクの感度が低すぎてなかなか反応しない。~ | ||
マイク感度と音声のボリュームは,ソースに値が決め打ちされている。~ | マイク感度と音声のボリュームは,ソースに値が決め打ちされている。~ | ||
- | ''/home/yuji/sdk-folder/sdk-source/avs-device-sdk/KWD/KWDProvider/src/KeywordDetectorProvider.cpp''の26行目に, | + | ''~/sdk-folder/sdk-source/avs-device-sdk/KWD/KWDProvider/src/KeywordDetectorProvider.cpp''を, |
/// The sensitivity of the Kitt.ai engine. | /// The sensitivity of the Kitt.ai engine. | ||
- | static const double KITT_AI_SENSITIVITY = 0.60; | + | static const double KITT_AI_SENSITIVITY = 0.6; |
+ | |||
/// The audio amplifier level of the Kitt.ai engine. | /// The audio amplifier level of the Kitt.ai engine. | ||
static const float KITT_AI_AUDIO_GAIN = 2.0; | static const float KITT_AI_AUDIO_GAIN = 2.0; | ||
と,ハードコーティングされている。~ | と,ハードコーティングされている。~ | ||
- | KITT_AI_SENSITIVITYでWake upでのマイク感度,KITT_AI_AUDIO_GAINで音声の大きさを設定できるみたい。~ | + | KITT_AI_SENSITIVITYでWakeWord検知でのマイク感度,KITT_AI_AUDIO_GAINで音声の大きさを設定できるみたい。~ |
- | KITT_AI_SENSITIVITY = 0.7 | + | /// The sensitivity of the Kitt.ai engine. |
- | KITT_AI_AUDIO_GAIN = 0.5 | + | static const double KITT_AI_SENSITIVITY = 0.70; |
- | にした。 | + | |
+ | /// The audio amplifier level of the Kitt.ai engine. | ||
+ | static const float KITT_AI_AUDIO_GAIN = 0.5; | ||
+ | にして,再ビルド。Snowboyの開発者のページには,0から1の間の値を使えと書いてある。 | ||
+ | |||
+ | マイク感度を上げすぎると,スピーカーでの音声出力を拾ったり周りの音に反応したりする。Speaking状態の時はマイクはオフじゃないのかな・・・~ | ||
+ | |||
+ | 残念ながら,AVS Device Kitに含まれるWakeWordエンジンのSensoryやSnowboyには,スピーカーからの音声をマイクで拾った音からキャンセルする仕組み(アコースティックエコーキャンセレーション AEC)や,ビームフォーミングって呼ばれている,ある方向からのユーザー音声を拡大しつつ,他の方向からの干渉を抑える信号処理技術なんかが,入っていないようだ。 | ||
+ | |||
+ | Amazonで販売されているAVS Development Kitや製品のAmazon Echoなんかは,これらの機能が入っているんで問題ないんだろうな。 | ||
+ | |||
+ | もう少し何とかならないかな? | ||
** ちょっと追加 [#taa71456] | ** ちょっと追加 [#taa71456] | ||
- | 現状だと,AlexaがVoice Wakeupされているかどうかを画面以外からはわからない。~ | + | 現状だと,「アレクサ」って言ったときに,Listeningモードになったかどうかが画面以外からはわからない。これは,Raspberry PiにAIY Voice Kitなんでダンボール箱だけで,画面なんかが無いから。~ |
- | そこで,Wake upしたら音で反応するようにしてみた。 | + | そこで,Listeningモードになったら,ポーンというような音で知らせるようにしてみた。さらに,ボタンのランプも点灯させたみた。 |
- | ''/home/yuji/sdk-folder/sdk-source/avs-device-sk/SampleApp/src/UIManager.cpp''の372行目あたりに, | + | ''~/sdk-folder/sdk-source/avs-device-sdk/SampleApp/src/UIManager.cpp''に, |
switch (m_dialogState) { | switch (m_dialogState) { | ||
case DialogUXState::IDLE: | case DialogUXState::IDLE: | ||
+ | system("gpio -g mode 25 out"); | ||
+ | system("gpio -g write 25 0"); | ||
ConsolePrinter::prettyPrint("Alexa is currently idle!"); | ConsolePrinter::prettyPrint("Alexa is currently idle!"); | ||
return; | return; | ||
case DialogUXState::LISTENING: | case DialogUXState::LISTENING: | ||
+ | system("gpio -g mode 25 out"); | ||
+ | system("gpio -g write 25 1"); | ||
system("aplay /home/yuji/sdk-folder/third-party/snowboy/resources/dong.wav 1>/dev/null 2>/dev/null "); | system("aplay /home/yuji/sdk-folder/third-party/snowboy/resources/dong.wav 1>/dev/null 2>/dev/null "); | ||
ConsolePrinter::prettyPrint("Listening..."); | ConsolePrinter::prettyPrint("Listening..."); | ||
- | と追加した。system関数でaplayで音を出力しているだけ。 | + | と追加した。wavファイルは,Snowboyのresourceフォルダにあったファイルにしている。 |
- | wavファイルは,Snowboyのresourceフォルダにあったファイルにしている。 | + | |
+ | ** Amazon Alexaの設定 [#a4f942f3] | ||
+ | WEBブラウザで [[https://alexa.amazon.co.jp/]] にアクセスしてAlexaの設定を行う。(もしくはAndroid端末のAlexaアプリで) | ||
+ | |||
+ | - デバイスの所在地 | ||
+ | - デバイスのタイムゾーン | ||
+ | - 温度の単位 | ||
+ | - 距離の単位 | ||
+ | |||
+ | なんかを設定しておく。天気とか尋ねると,設定した場所について教えてくれるようになる。 | ||
+ | |||
+ | ** 起動時に自動実行する [#hfb2f6e7] | ||
+ | 起動スクリプトを作成する。~ | ||
+ | ''~/startavs.sh'' | ||
+ | #!/bin/bash | ||
+ | |||
+ | pulseaudio -k | ||
+ | pulseaudio -D | ||
+ | pacmd set-sink-volume alsa_output.dmix 0x6667 | ||
+ | pacmd set-source-volume alsa_input.dsnoop 0x15000 | ||
+ | cd ~/sdk-folder/sdk-build/SampleApp/src && TZ=UTC ./SampleApp ~/sdk-folder/sdk-build/Integration/AlexaClientSDKConfig.json ~/sdk-folder/third-party/snowboy/resources/ | ||
+ | PulseAudioがRaspbianを更新したら起動しなくなったんで,起動するようにして,マイク感度を,pacmdで上げている。 | ||
+ | |||
+ | 実行パーミッションを立てる。 | ||
+ | $ chmod 755 startavs.sh | ||
+ | |||
+ | cronを使って,Raspberry Piが起動時にAVS Device SDKのSampleAppを動かすようにする。 | ||
+ | $ crontab -e | ||
+ | @reboot /home/yuji/startavs.sh | ||
+ | |||
+ | これで,Raspberry Piを再起動したら自動的にSampleAppが動くはずなんだけど,なんとRaspberry Piがしばらく反応しなくなってしまい(1分程度),その後,勝手にシステム(OOM killer)に殺されてしまっていた &worried; 結果,SampleAppは動作しない状態に・・・ | ||
+ | |||
+ | あまり上手い方法ではないけど以下のように,''~/sdk-folder/sdk-source/avs-device-sdk/SampleApp/src/UserInputManager.cpp''を修正してみた。~ | ||
+ | while (true) { | ||
+ | |||
+ | // add by Yuji Ueno | ||
+ | std::this_thread::sleep_for(std::chrono::hours(1)); | ||
+ | continue; | ||
+ | // | ||
+ | |||
+ | char x; | ||
+ | 入力をスキップするコードを追加した。 | ||
+ | |||
+ | SampleAppは起動するとユーザーからの入力をstdinから行うようになっているがデーモンのようにバックグラウンドでstdin無しで動かすと入力に失敗して,これが原因でメモリーを食いつぶしてしまっているようだ。 | ||
+ | |||
+ | しょうがないんだが,ユーザー入力を受け付けないように変更した。まあインターラクティブに操作することはしないからこれでいいかな。(これを行う前に日本語ja_JPに設定しておくのを忘れないようにする。)~ | ||
+ | |||
+ | 再度ビルドしたら,無事cronで起動時に自動的に実行できるようになった。 | ||
+ | |||
+ | * Amazon Musicが使えない [#m8fb7e50] | ||
+ | AVS Device SDKのSampleAppだと,なんとAmazon Musicを聞くことは出来ない。あくまでサンプルとしての提供とのこと。それにしても,これは辛いなぁ ;( | ||
+ | |||
+ | Fire TV Stickともつながらないし・・・ | ||
+ | |||
+ | って,以前はつながらなかったんだけど,Fire TV Stick(使っているのはリモコンに音声検索できない古いタイプ)がいつの間にかAlexaが使用できるようになっていたんで,ひょっとしたらと思いAVS Device SDKを更新したら,Fire TV Stickが反応した ;) | ||
+ | |||
+ | あとは,Amazon Musicが使えればなぁ・・・ |