batoo3の備忘録

プログラミング学習のアウトプットをぼちぼち

Raspberry PIにAVSを入れてやろう計画!その1

AlexaをRaspberry PIに入れてやろう計画!

Alexaの搭載されたスマートスピーカーなどの端末は、スキルを有効にすることでゲームや機能追加などが行えるのはご存知の通り!

 

今回は、Alexa自体をRaspberry PIに入れる。つまりAlexa Voice Service(AVS)を使い、ラズパイをオリジナルのスマートスピーカーとして動作できればいいなという感じからスタートしました。 最終的には独自のウェイクワードで起動させたい。

 

f:id:batoo3:20180924164547j:plain

さて、こちらが我が愛機のRaspberry PI ~batoo Edition~ (ただ本体に3.5inchディスプレイがついているだけ)。こいつにAVSを入れていきます。

 

ただ入れるだけでは面白くないので、ウェイクワードエンジン(WWE)を変更して独自の単語で起動できるようカスタマイズしてやりましょう。

 

AVSをRaspberry PIに入れる際の下準備など

とりあえず、ラズパイにOSは以前入れていたものを放置していたのでアップデート。Raspberry PIにAVSを入れる前には、開発者コンソールから必要な項目を登録をしておく必要があります。

 

この辺りは、Twitterで先にいただいていた@zono_0さんの情報が大変分かりやすかったです!ありがとうございます!

今回ラズパイ本体へのSSH接続の項目は、ネット環境という諸事情からパス。小さいながらもディスプレイついてるので、それを見ながら直接ターミナルにBluetoothキーボードでちまちま打ち込んでいく感じで作業しました。

 

最後の認証方法が変わっている!?

ステップが多いかもしれないけど、順を追えばなんということはないもの。ここまででAVSを使うための端末の登録など、すべて完了!あとはサンプルアプリが実行できるようにセットアップスクリプト(setup.sh)を実行するだけ!

 

しかし、セットアップスクリプト完了後。端末を認証するスクリプト(startauth.sh)が生成されない。調べてみると、認証方法に変更があった模様。

 

認証はサンプルアプリ実行時に出てくるURLから行う

どうやら、サンプルアプリ(startsample.sh)を起動すればいいそうな。


サンプルアプリを起動すると、以下の内容がコンソールに表示される。

######################################################
#       > > > > > NOT YET AUTHORIZED < < < < <       #
######################################################

############################################################################################
#     To authorize, browse to: 'https://amazon.com/us/code' and enter the code: {XXXX}     #
############################################################################################

 

このURLにアクセスするとログイン画面が表示されるので、端末をAVS製品として登録したアカウントでログインしちゃいます。

 

するとコード入力を求められるので、同じく表示されているcodeを入力すると認証が通ります…

 

えっと…。通るはずなんですが、なぜかIn Limited Mode(制限モード)で動作しました。

 

指定すべきクライアントIDが以前とは違う

これについても、変更があったようです。

 

AVSに登録した商品詳細から、セキュリティプロファイル→他のデバイスやプラットフォームとたどり、クライアントID名の欄に任意の名前を入力。

 

これで自動生成されるIDをクライアントIDとして設定すると、ようやく完全版としてサンプルアプリを動作させることができました。

 

とりあえず、今できているのはここまで。随時、テスト中なので進んだら進捗報告します!厄介な問題としては、マイクが反応しないという…。

 

前途多難。でも、頑張って目的達成を目指すぞ!

 

Alexaスキル「ピアノドレミ」作成時に学んだこと!

ピアノドレミ

6月からちまちま作成をはじめ、8月に個人で初めて公開できたのが「ピアノドレミ」というAlexaスキル。ピアノで何の音が鳴ったかを当てるゲームです。

Alexaスキル ピアノドレミ

https://www.amazon.co.jp/dp/B07G89FYYJ

 

昨年12月にAlexaハンズオンに参加し、スキルの大体の作成方法は学習済み。しかし、それも今は昔の話。すでにAlexa Skills Kit SDK for Node.js(Ver2)が出てきていたため、新しい書き方になれることをメインの目標としてスキルの作成を開始したわけです。

 

今回は、その際に学んだことをまとめてみました。

 

Alexa Skills Kit SDK for Node.js(Ver2)を用意する

まだVer1しかなかった頃は、AWS Lambdaに用意されたテンプレートを使うことで簡単に関数のひな形を作成できていたのですが…。Ver2はテンプレートにはないため、手動で作成してあげなければ。

ASK SDKのセットアップ — ASK SDK for Node.js ドキュメント

 

npmを使うには?

正直な話、npmモジュールとしてインストールとか言われてもわかんないぜ!ということで探していくと、Node.jsをインストールすればnpmコマンドが叩けることが発覚。

npmコマンドをたたくことで、とりあえず必要なパッケージが落ちてきました。もちろん、ローカルに自分で作成したフォルダに。

 

Lambdaにアップロード

このパッケージをスキルで利用するには、発話を受け取るエンドポイントとなるサーバーに移動させないとしょうがない…。何とか本番環境となるLambdaに移動させる方法を探すことに。

 

これは簡単な話でLambda側で関数を作成したあと、zipで固めてアップロードするのが正解でした。

 

ここまでの初動、Visual Studio CodeというエディタとかASK-CLI?ってのを使うと楽になりそうな感じですね。これは次回のスキル作成までに学んでいこうかなと考えてます。(ちょうど、このエントリー書いた次のAlexa道場がASK-CLIの回だったはず。)

 

音を出したい!

Alexaスキルの基本は、会話のキャッチボールを行うことが肝要。ただ今回のスキルを作るにあたっては、加えて何か音を鳴らそうと考えていました。audioタグを用いてmp3を鳴らせることが分かったので、すぐに試してみたのですが…。

 

残念なことに、最初に用意したmp3音源は全く音が鳴りませんでした。

 

mp3ファイルのフォーマットやサイズ等に注意

音が鳴らなかった理由は、Alexaで読み込めるファイルフォーマットではなかったことが理由。正しいフォーマットやサイズにするためには、FFmpegを利用して変換する必要がありました。

正しいフォーマットにすると、それまでが嘘かのように音が鳴るからびっくりですよね。

 

あとがき

今回学んだことはこんな感じです! 

リリース申請の際は、インテントの発話例が不足・重複してるなどの小さなミスだけだったので修正は容易でした。とりあえずはこんな感じで、初めてのリリース完了したというところです。

 

スキル次回作は今のところ未定。思いつき次第ってことで。直近ではAVS(Alexa Voice Service)をラズパイに入れるチャレンジ、Androidアプリ作成方法を思い出す(むしろ新しく開発言語に採用され、iOSにも流用できそうなKotlinを勉強する)方針。

ブログ始めました

Hello World

こんばんは、シバトウです。この度ブログを開設してみました。

勉強したことをアウトプットすることが大切だということを知り、少し前から開設を考えていたのですが…。今回個人で作ったAlexaスキルが初めて公開されたのを機に、ようやく重い腰を上げたものです。

 

自身のプログラミング学習におけるアウトプット練習のため、三日坊主にならないよう気負わずに学んだことを発信できればという感じですね。

とりあえず、最初の記事はこんなところから。すごく短いですが、徐々に書くことに慣れようと思ってます。

 

今回のAlexaスキル作成の際に学んだことについては、次の記事で書いてみます。