Google AIY VoiceKit V2とM5StickVを連携させてスマートスピーカーを作る
このシステムを作った経緯
2018に発売されたGoogleAIYVoiceKitV2。当時はスマートスピーカーを自分で作れると評判でした。しかし、実際に買って使ってみるとベースのラズパイがZeroWHであるためウェイクワードの「OK,Google」から起動できないというスマートスピーカーとは言えない制限がありました。そのため、snowboyというクラウドのホットワード認識システムを利用していた時期もありましたが、精度も悪く使い道を見いだせず埃をかぶっていました。
しかし、時代は進歩して2019にK210というAI向けのRISC-Vチップを搭載したM5StickVが発売され、2020/10に開発プラットフォームのMaixPyに音声認識機能が実装されました。調べてテストしたところ認識の感じも今まで試した方法より良い感じがしました。それで眠っていたGoogleAIYVoiceKitV2にウェイクワードで起動する機能を追加できると思い、3年越しの夢(?)を実現してみました。
注意(OSのアップグレードはしないでください。)
2021/2にRaspberryPi OSのカーネルが5.4から5.10にアップグレードされるようになりました。VoiceBonnetのドライバがカーネル5.10に対応していないようで音が出なくなります。初期セットアップの下記の画面の時にアップグレードしないように注意してください。(sudo apt upgradeもダメです。)
用意するもの
ハードウェア
- GoogleAIYVoiceKitV2
スマートスピーカーの中核です。RaspberryPiZeroWHとmicroSDも含まれています。 - M5StickV(マイク搭載版)
「OK,Google」などのウェイクワードを認識するために使用します。マイクを使うため古いM5StickVでは動かないので注意してください。 - M5Stack ExtIO Unit
M5StickVは外部のGPIOがGrove互換ポート(HY-2.0-4P)しかないためGPIOを拡張する目的で使います。 - microSDカード
M5StickVのFlashを使えば不要ですが、手順が難しいのでmicroSDカードで説明します。★ M5StickVはmicroSDに相性問題があるので初心者の方はM5StickVとmicroSDカードのセットがおススメです。 - 電源
電源はVoiceKitV2用(microUSB端子5V2A)とM5StickV用(USB Type-C端子5V1A)の2つ必要です。 - USBキーボードとマウス、miniHDMI-HDMIケーブル、microUSBのOTGケーブル
★ SSH経由でヘッドレスセットアップできる方は不要です。ヘッドレスセットアップで固定IPを設定する。 - PC
ファームウェアの書き込みやSSHを使うのにPCが必要です。
ソフトウェア
- AIY Kits Release 2020-11-20
恐らく付属のmicroSDに書き込まれているOSは古いので、最新版のaiyprojects-2020-11-20.img.xzをダウンロードします。 - Raspberry Pi Imager
1でダウンロードしたxzファイルをmicroSDカードに書き込むために利用します。 - kflash_gui
M5StickVのファームウェアを書き込むために利用します。 - ソースとM5StickVのファームウェア一式
ソースとファームウェアはGitHubで公開しています。
機器の準備(接続した後でも可能)
GoogleAIYVoiceKitV2
GoogleAIYVoiceKitV2の組み立て
下記のHPが分かりやすいです。
GoogleAIY OSのセットアップとGoogleCloudPlatformへの登録
下記のHPに解説がありますので、OSのセットアップとGoogleCloudPlatformへの登録作業を行います。クレジットカードが必要ですが、GoogleAssistantAPIだけ使う場合には課金されません。
ボタンを押してGoogleアシスタントが起動するまで完了してください。
M5StickVと連携するためのソースを置く
GitHubに公開している「assistant_demo_with_m5stick_extio.py」をダウンロードしてコピーします。sshや端末から下記のようにコマンドを実行してください。
cd ~
git clone https://github.com/mongonta0716/AiyvoiceV2-with-M5StickV.git
cp ./aiyvoicev2-with-m5stickv/aiy/assistant_demo_with_m5stickv_extio.py ./AIY-projects-python/src/examples/voice/
M5StickV
1.ファームウェアの書き込み(kflash_guiを利用)
GitHubからファームウェアをダウンロードしてbinファイルを書き込みます。
2. microSDカードにソースを入れる。
boot.pyとpca9554.pyの2つのソースをmicroSDカードのルートにコピーします。
3.Ext.IOと接続
GroveケーブルでExt.IOを接続します。
4.音声データの録音と認識
1秒以上の言葉を3つ用意します。(なんでも構いません。動画では「コマンド1」「コマンド2」「コマンド3」の三種類です。)ここで登録した言葉を認識するとそれぞれ1,2,3という数字でGoogleAIYVoiceKitV2に送られる仕組みです。
注意、録音は静かな部屋で行ってください。ボタンを押した音にも反応するので静かに押しましょう。
機器の接続
M5StickVとExtIO UnitはGroveケーブルを使用
M5StickV | ExtIO Grove |
---|---|
GND | GND |
5V | 5V |
35 | SDA |
34 | SCL |
ExtIO UnitとVoiceKitV2はジャンパーワイヤー(メスーメス)を使用
ExtIO GPIO | VoiceBonnnet GPIO(向かって左から) |
---|---|
GND | GND |
3 | PIN_D |
2 | PIN_C |
1 | PIN_B |
0 | PIN_A |
接続なし | 5V |
接続するとこのようになります。
動かしてみる
GoogleAIYVoicekitV2上でにsshか端末から下記のコマンドを実行します。
AIY-projects-shell.sh
src/examples/voice/assistant_demo_with_m5stickv_extio.py
assistant_demo_with_m5stickv_extio.pyのデフォルトでは下記のようになっています。
- Googleアシスタントの起動
- ボタンLEDを赤くする
- ボタンLEDを青くする
カスタマイズ
誤動作の対策
誤動作はスマートスピーカーと比べると多いです。その点は言葉やboot.pyのパラメータを変えて調整してみてください。
登録できる言葉は最大15個
boot.pyのwords配列を増やすと認識できる言葉の数を増やせます。ただし、VoiceBonnet側のGPIOが4本しかないので、1~15までしか受信できません。
もっと多くの連携をしたい場合
VoiceBonnetにピンヘッダを半田付けしてGPIOを取り出せば使えます。詳しくは下記のリンクを見てください。
【GoogleAIYVoiceKitV2】GPIOを取り出す。【上級者向け】| ラズパイ好きの日記
AIYVoiceKitの方はラズパイができる範囲で何でも可能
assistant_demo_with_m5stickv_extio.pyを改変すればラズパイでできる範囲で何でも実行できます。(subprocessを使えば「sudo reboot」や「sudo shutdown -h now」も実行可能です。)
下記で制限されている機能もローカルフォルダにある音楽を再生というのは可能だと思います。
GoogleAIYVoiceKitの制限
GoogleAIYVoiceKitではデバイスの制限で音楽やラジオを聴いたり、タイマー・アラーム・リマインダー機能も使えません。
機能 | AIYVoiceKit | GoogleHome |
---|---|---|
「OK,Google」で起動 | × | 〇 |
音楽配信サービス | × | 〇 |
ニュースの読み上げ | × | 〇 |
スマートホーム連携 | 〇 | 〇 |
タイマー・アラーム | × | 〇 |
天気予報 | 〇 | 〇 |
検索機能 | 〇 | 〇 |
ショッピングリスト | 〇 | 〇 |
音量の調整 | 〇 | 〇 |
おわりに
技術や製品の進歩により、3年前は諦めていたことが実現できてうれしくなってしまいました。GoogleAIYVoiceKitV2が眠っている方は是非挑戦してみてください。
投稿者の人気記事
-
mongonta555
さんが
2021/02/11
に
編集
をしました。
(メッセージ: 初版)
-
mongonta555
さんが
2021/02/12
に
編集
をしました。
-
mongonta555
さんが
2022/02/18
に
編集
をしました。
ログインしてコメントを投稿する