Alexa-Voice-Service AVS対応スマートスピーカーを作ったときのこと

去年になりますが、Alexa-Voice-Service (以下AVS)対応スマートスピーカーのプロトタイプを作ったのでメイキングです。Alexa-Skills-Kit(ASK)の記事は多く出ていますが、AVSの情報はASKにくらべて少ないので、なにか参考になる部分があれば幸いです。

ハードウェア選定

ある程度のノイズが想定される場所での展示だったため、マイクアレイでの音声方向検出は必須と考え、対応ボードを探しました。マイクアレイと指向性関係はロボスタの記事がまとまっています。(すごい人は自分でつくりますが、スキルも時間も足りないため、ボードを購入します)

robotstart.info

またハードウェアの形に制限がない場合は、AVSのサイトで動作確認済のDevKitを購入するのが良さそうです。

developer.amazon.com

今回の要件では筐体の大きさの制限が厳しく、Raspberry Piでは大きすぎたので、Raspberry Pi Zero x Seeed Studio社のReSpeaker 2 Mics Pi-HATを選定してみました。 2chマイクではありますが、1chよりはましでしょう…。

ソフトウェア選定

ソフトウェア選定にあたりこの記事を参考にしました。

Raspberry PiにAlexaを召喚する3つの方法 - Qiita

今やるならavs-device-sdk一本とのことで、こちらから取り組みはじめました。

github.com

実際に手を付けてみると、avs-device-sdkc++制でソースの量も多く、Raspberry Pi 3でのコンパイルすると1時間くらい。また、Raspberry Pi Zeroの動作は公式にはサポートされていないようでした。サンプルも複雑で、製品組み込みには使えても、Raspberry Pi Zero上での短い時間で細かくイテレーションを繰り返したい、というプロトタイプ用途としては向いていないと判断しました。

いくつかの選択肢を試した中、Seeed Studioの公開しているAVSライブラリはpython製でソースコードもシンプル。RaspberryPi Zeroでも動作したので、こちらを使用しました。(GPLライセンスなので注意)言語設定切り替えに対応していない、access_token取得方法が古いなどいくつかの問題がありましたが、ソースコードが綺麗だったため、修正は比較的簡単にできました。→この辺のやり取り。開発は止まっているようなので、今から始めるとしたら別途選択肢を探すほうがいいかもしれません。

github.com

Wake Word検出ライブラリ

Wake Wordは。Alexaなら「アレクサ」,Google Homeなら「オーケー、グーグル」という、起動時の決り文句です。変更もできます。常時サーバーに音声を送るわけではなく,Wake Wordはローカルで検出します。

  • Sensory: aws-device-sdkデフォルト。精度いまいち
  • Snowboy:精度いい感じ。商用の場合はお金かかるのでプロトタイプとして使うのにオーバースペックかも…。
  • Porcupine:精度いい感じ。カスタムのWake Word登録は商用できないが、デフォルトのモデルは使えるらしい。

以上の3ライブラリから検討し、ライセンスの関係からPorcupineを使っています。

参考にした情報

上記以外に参考にした記事です。

RaspberryPiでGPIO(I2S)を使ってマイクから録音する - キノコの自省録 Snowboy Hotword DetectionをRaspberry Piで動かす - Qiita Pi Zero Wはモバイルバッテリーでどのくらいの時間動作するか | 日記というほどでも

スピーカーづくり

まずはFusion360でスイッチサイエンスなど簡単に購入できるパーツを配置して、大きさを検討します。

あとで請求書つくるときと、自分で今回もこんなに買い物をしてしまった…と見返すためにBOMとまでは行きませんが、パーツリストもちゃんと残します。

Fusion360で最終的なパーツをちまちま作ってレイアウト。パーツを作るのをさぼった部分はなぜか組立工程で問題がでるので…。

青色の部分は、DMM 3Dプリントでナイロン素材で発注しています。この図にはありませんが、外側にプロダクトデザイナーの方が作った筐体がかぶさります。

LED基盤

光のアニメーションを凝りたいとのオーダーだったので、LEDを贅沢に配置しています。ReSpeakerには、GroveタイプのI2C端子がついていたので、それにつなげる想定の基盤のKiCadつくっていきます。回路設計は素人ですが…こんな感じです。

Gerberは紙にレイヤー毎に印刷してチェックすると何故かミスが見つかります。アナログチェックは重要。

基盤はPCBGoGoで発注。一週間もかからずに届きました。私の用途ではクオリティも十分です。

ちっちゃい…。中国でiPhone修理する人とかすごすぎる…。

Imgur

全部実装して、動作確認。うごいた!

シュミレーター

LEDのアニメーションは、普段よく使っているUnityでシュミレーターを作成してつくりました。

完成

Imgur

組み立ててこんな感じ。最終的には外側にプロダクトデザイナーの方が作った筐体がハマります。

以上こんなこともやってます。というメイキングでした。