「Google AIY Voice Kit」でAlexaのプロトタイプを作ってみる

2017.12.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Echoの招待が来ていない同志に向けて贈る記事第二弾です。(前回はこちら)

Google AIY Voice Kit

Google AIY Voice Kitというキットが販売されていますね。もともとはRaspberry Pi向け雑誌であるMagPi issue 57の付録だったもので、Raspberry Piと組み合わせてGoogle Homeを自作してみようという趣旨のキットです。この号はたいへん好評だったようで、売り切れ&入手の問い合わせが殺到したそうです。そのため単体キットとして発売されることとなり、今年の秋から予約受付をしていました。実は英国のPimoroniというオンラインショップから予約&購入済みだったのですが、すっかりご報告が遅くなってしまいました。Google AIY Voice Kitを使ってGoogle Homeを試す方法については、詳細が公式ページや添付の資料にも解説されています(英文ですが)。専用のイメージファイルも提供されていますので、簡単に試せるようです。

今回は、Google AIY Voice Kitを使って、招待の来ないEchoの代わりにしてみようという趣旨のレポートです。今では国内でも、スイッチサイエンスさんや秋月電子さんなどで取り扱いが始まっていますので、入手も容易です。ぜひ試してみてください。

キットの中身と必要機材

キットはこんな箱で届きました。

中身はこんなガイドと、

パーツがこんな感じで納められています。

ケースはダンボールです。

中にRaspberry Piの本体を納めることができ、コンパクトに仕上がります。

メインの基板です。スピーカ&マイクの回路の他、なにやらServosとかDriversという文字が見えます。音声入出力以外にも使えるようです。

マイクは別の基板に付いています。左右に二つです。

キットの他に、下記の機材が必要になります。

  • Raspberry Pi 3
  • microSDカード(8G以上)
  • HDMI接続のディスプレイ、USBキーボード、マウス

手順のアウトライン

手順のアウトラインは以下の通りです。

  1. SDカードにイメージを書き込む
  2. Google Voice Kitを組み立てる
  3. ドライバを組み込む
  4. 開発者ポータルで、クライアントID、クラアントキー、セキュリティポリシーを作成する
  5. サンプルアプリケーションを構築する
  6. サンプルアプリを実行してみる
  7. 自動実行スクリプトを作成する

RaspbianをダウンロードしmicroSDカードに書き込む

この手順は前回と同じですが、再掲します。使用するOSのバージョンですが、このガイドによると、カーネルが4.9以上である必要があるようです。最新のRaspbianを選べば問題ないようです。Raspbianの公式サイトから、最新版のイメージをダウンロードします。今回はデスクトップ環境が必要なので、全部入りのものを使用しました。ファイル名は、2017-11-29-raspbian-stretch.zipでした。

Mac Book Proでは下記の手順でSDカードに直接書き込むことができます。ターミナルを開いて、zipファイルを展開、SDカードをアンマウントして、ddコマンドでイメージを書き込みます(十数分かかります)。書き込み終わったらFATボリューム(boot)が自動マウントされるので、sshが使えるようにsshという空ファイルを作成しておきます。

$ unzip 2017-11-29-raspbian-stretch.zip
$ sudo diskutil unmountDisk disk2
$ sudo dd if=2017-11-29-raspbian-stretch.img of=/dev/disk2 bs=1m
$ touch /Volumes/boot/ssh

ついでに、WiFi設定のためwpa_supplicant.confファイルを/bootに用意しておくと、最初からWiFiがセットアップされた状態で起動できるようです。セットアップ済みRaspberry Piがすでにあるなど、wpa_supplicant.confファイルをご用意できる場合にはお試しください。

AIY Voice Kitを組み立てる

キットを組み立てます。公式サイトに写真入りで丁寧に解説されていますので、詳しくはそちらもご参照ください。

ケースとなるダンボールを組み立てます。番号が書いてあるので順番に折り曲げていきます。

Raspberry Piにメイン基板を差し込みます。無精をしてネジは使用しませんでした。

ボタンを取り付け、コネクタを接続。スイッチや、スピーカ、Raspberry Piとメイン基板を所定の場所に納めつつ、ダンボールのスペーサーを入れていきます。ちょっとしたパズル状態ですが、最終的にはうまく納められるはずです。

二つの穴からそれぞれマイクが表から見えるように位置を合わせて基板をテープで止めます。

 

完成です。


ドライバをインストールする

ドライバをインストールする手順は、このガイドの手順にしたがって作業を進めます。

まずは、Raspbian stretchをインストール済みのSDカードを挿入し、起動します。コンソールまたはssh経由でログインしておきます。
gitをインストールしておきます。そして、githubからコードやスクリプトをダウンロードしておきます。
$ sudo apt-get install git
$ git clone https://github.com/google/aiyprojects-raspbian.git AIY-projects-python
スクリプトを使って、依存するツールをインストールします。ここはしばらく時間がかかります。
$ cd AIY-projects-python
$ scripts/install-deps.sh
成功したら、サービス、そしてドライバをインストールします。うまくいったら、一度リブートしておきます。
$ sudo scripts/install-services.sh
$ sudo scripts/configure-driver.sh
$ sudo reboot

再起動がうまくいったら、スクリプトでALSA用の設定を作成します。/etc/asound.conf ファイルが作成されます。

$ sudo scripts/install-alsa-config.sh
Renaming /etc/asound.conf to /etc/asound.conf.bak...
Installed voiceHAT ALSA config at /etc/asound.conf

arecord/aplayを使って、サウンドデバイスの認識状況を確認しておきます。正常だとこんな感じになります。

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 []
 Subdevices: 0/1
 Subdevice #0: subdevice #0
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-hifi-0 []
 Subdevices: 1/1
 Subdevice #0: subdevice #0
サウンドデバイスの入出力動作を確認してみます。下記のコマンドは2秒間録音を行い、ファイルに保存。そしてそれを再生する例です。
$ arecord -d 2 -r 16000 -f S16_LE > rec.raw 
$ aplay -r 16000 -f S16_LE rec.raw
~/.asoundrcファイルが存在しているとうまく動作しない場合があります。確認してみましょう。 /etc/asound.confが作成されているのであれば、~/.asoundrcは消してしまっても大丈夫でした。
$ rm ~/.asoundrc
以上でドライバのセットアップは完了です。

開発者ポータルで製品を登録する

Amazon開発者ポータルのアカウントを準備しておきます。ログイン後、Alexaを選んで、Alexa Voice Service の選択します。

「製品を作成する」ボタンをクリックし、必要事項を記入していきます。

  • 製品名:AIYVoiceKit
  • 製品ID: AIYVoiceKit
  • 製品タイプ:端末
  • コンパニオンアプリの使用:いいえ
  • 商品カテゴリー:ワイヤレススピーカー
  • 製品概要:Raspberry Pi Sample Project
  • ハンズフリー
  • 商品:いいえ
  • 子供向け:いいえ

セキュリティプロファイルを新たに作成し、セキュリティプロファイルIDをメモしておきます。

クライアントIDと、クライアントシークレットが発行されますので、こちらもメモしておきます。

許可するURLとして、

  • http://localhost:3000/
  • https://localhost:3000/

応答URLとして、

  • http://localhost:3000/authresponse
  • https://localhost:3000/authresponse

を指定しておきます。実際に使われるのはhttpsのほうでした。

 

セキュリティプロファイルIDや、クライアントID、シークレットは、いつでも開発者ポータルで参照することが可能です。

これで必要な情報が揃いました。次にサンプルアプリケーションの準備と設定を行います。

alexa-sample-appのセットアップ

Raspberry Pi上で、githubからサンプルアプリケーションのソースコードをcloneします。使用するリポジトリは、alexa-avs-sample-appの本家です。

$ git clone https://github.com/alexa/alexa-avs-sample-app.git

インストールスクリプトの先頭部分に、製品ID(ProductID)、クライアントID(ClientID)、クライアントシークレット(ClientSecret)を設定する箇所がありますので、さきほど開発ポータルで設定、取得した値に書き換えます。

$ cd ~/alexa-avs-sample-app
$ vi automated_install.sh
...snip...
# This is the name given to your device or mobile app in the Amazon developer portal. To look this up, navigate to https://developer.amazon.com/edw/home.html. It may be labeled Device Type ID.
ProductID=AIYVoiceKit
# Retrieve your client ID from the web settings tab within the developer console: https://developer.amazon.com/edw/home.html
ClientID=amzn1.application-oa2-client.c1dXXXXXXXXXXXXXXXXXXXXXXXX66f
# Retrieve your client secret from the web settings tab within the developer console: https://developer.amazon.com/edw/home.html
ClientSecret=d84XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX782

書き換えを行ったら、インストールスクリプトを走らせます。いくつか質問項目がありますがデフォルトのままでOKです。途中の質問でロケールを聞かれますので、"ja_JP"を選ぶことで日本語にできます。

完了までしばらく時間がかかりますので、しばし待ちましょう。

$ . automated_install.sh
...snip...
*****************************
========= Finished ==========
*****************************
=============================

To run the demo, do the following in 3 seperate terminals:
Run the companion service: cd /home/pi/alexa-avs-sample-app/samples/companionService && npm start
Run the AVS Java Client: cd /home/pi/alexa-avs-sample-app/samples/javaclient && mvn exec:exec
Run the wake word agent:
  Sensory: cd /home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e sensory
  KITT_AI: cd /home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e kitt_ai
  GPIO: PLEASE NOTE -- If using this option, run the wake word agent as sudo:

  cd /home/pi/alexa-avs-sample-app/samples/wakeWordAgent/src && sudo ./wakeWordAgent -e gpio

インストールログの最後に、アプリケーションの起動方法が表示されています。

サンプルアプリケーションを起動する

サンプルを動作させてみます。いくつかのプロセスを手動で動作させる必要があります。それぞれのプロセス用にターミナルを個別に開いて起動します。

まずは認証用サーバーです。ポート3000で待受をするプロセスです。

$ cd ~/alexa-avs-sample-app/samples/companionService && npm start
次に本体です。最初一度だけ、サウンドデバイスの設定ファイルをコピーしておく必要があります。
$ cd ~/alexa-avs-sample-app/samples/javaclient && mvn exec:exec
ウェイクワードを認識するためのエージェントを起動します。sensoryという技術で認識を行ないます。このライブラリは評価用に短期間のライセンスで提供されているようです。その旨の表示が出てきます。
$ cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e sensory

動かしてみる

"アレクサ"とウェイクワードを発すると、ピボッっと音がして反応します。なにか話しかけてみましょう。

「アレクサ!、おはよう」と話しかけてみた動画です。季節の話題として、夏目漱石の飼い猫の墓の話をしゃべりだし出しました。

 

自動起動スクリプトを準備する

電源を入れたらすぐにAVSが動作してほしいですよね。そこで自動起動スクリプトを用意してみました。

$ vi start-avs.sh
#!/bin/sh
AVS_SAMPLES=/home/pi/alexa-avs-sample-app/samples
(cd $AVS_SAMPLES/companionService && npm start) &
pid1=$!
(sleep 10; cd $AVS_SAMPLES/wakeWordAgent/src && ./wakeWordAgent -e sensory) &
pid2=$!
cd $AVS_SAMPLES/javaclient && mvn exec:exec
kill $pid1
kill $pid2

こんなスクリプトを用意して、GUIが起動したときに自動実行されるよう、~/.config/lxsession/LXDE-pi/autostartに追記します。

$ vi ~/.config/lxsession/LXDE-pi/autostart
@/home/pi/start-avs.sh

これを仕込むことで、自動的にAVSが起動するようになります。

最後に

Google AIY Voice Kitで、Alexaのサンプルを動作させることができました。スピーカやマイクも付いており、とても納まりが良く、AVSのプロトタイプを作成することができます。Googleさん、ごめんなさい。

このレポートは以上です。