Google AIY Voice Kit V1 で「OK, Google」が出来なくなった対策。バージョンアップしたら Segmentation fault

Google AIY Voice Kit V1が動作しなくなったので、 Google AIYプロジェクトが 配布するイメージファイルを2019-11-13 版にバージョンアップしてみたところ、Segmentation faultが発生し、ライブラリを旧バージョンに戻す対策を行いました。

動作しなくなったサンプル(一例)
・assistant_library_demo.py
・assistant_library_with_local_commands_demo.py

対策の内容

本ページでは、対策方法を説明します。手順としては、以下のようになります(それぞれの詳細は後述)。

1. assistant.jsonのバックアップ
2. 新しいmicro SDカードの作成
3. assistant.jsonを新環境へ
4. ライブラリのバージョン・ダウン
5. 新デバイスのアクセス認証

対策前の状態

① Google Cloud Platform のクライアント認証が通らなくなり、 古いソフトウェアが動作しなくなりました。GCP上のプロジェクトを作り直しても、認証できませんでした。cloudspeech_demo.py については、動作していました。

② 最新の AIY Voice KIT用イメージ・ファイル 2019-11-13 版 にアップデートすると、Segmentation faultが発生しました。

対策後の効果・対策のメリット

① 動作しなかったassistant_library_demo.pyなどが動作するようになりました。

② 従来は、日本語言語に設定してあった場合であっても、英語の発音で 「OK, Google」と呼ばないと反応しませんでしたが、日本語の発音で「オッケー、グーグル」と呼んでも反応するようになりました。

AIY Voice KIT用イメージ・ファイル 2019-11-13 版 で、Hotwordが日本語に対応したようです。しかし、ローカルtts(Google Cloudを利用しない応答メッセージ)については、これまでと変わらず、日本語に対応していません(Google Cloudからの応答は日本語に対応)。
ローカルttsの日本語応答には、日本語に対応した音声合成エンジンを追加するか、英単語で日本語らしい言葉を作るといった工夫が必要です。(対応言語:en-US、en-GB、de-DE、es-ES、fr-FR、it-IT)。

対策の手順

1. assistant.jsonのバックアップ

現在、使用しているRaspberry Piのホームディレクトリ(/home/pi)に保存してあるファイルassistant.jsonをPCなどにバックアップ(コピー)します。もし、cloud_speech.jsonがあれば、そちらもバックアップしておきましょう。

・assistant.json
・cloud_speech.json (Assistantには不要)

2. 新しいmicro SDカードの作成

新しいmicro SDカードを用意します。古いmicro SDカードは、すでに劣化してきていると思います。現状の環境の保存用にすれば良いでしょう。

AIY Voice KIT用のイメージ・ファイルを下記からダウンロードし、micro SDカードへの書き込みツールEtcherなどを使って、新しいmicro SDカードへ書き込みます。

最新版
https://github.com/google/aiyprojects-raspbian/releases

ボクがダウンロードした2019-11-13版
https://github.com/google/aiyprojects-raspbian/releases/download/v20191113/aiyprojects-2019-11-13.img.xz

micro SDカードへの書き込みツール(Etcherは拡張子.img.xzのまま利用可能)
https://etcher.io/

3. assistant.jsonを新環境へ

新しい、micro SDカードで、Raspberry Piを起動し、予め、バックアップしておいたassistant.jsonを/home/piフォルダへコピーします。

念のため、デスクトップの「Check audio」で、①音声の再生、②音声の録音、③録音した音声の再生を行い、動作確認をしておきましょう。

問題が無ければ、Raspberry PiをWi-Fi接続し、サンプル・プログラムを起動してみます。

cd /home/pi/AIY-projects-python/src/examples/voice
python3 assistant_library_demo.py

ここで、 Segmentation faultが発生します(※2019-11-13版の場合)。発生しなければ、このまま使えばよいでしょう(より新しいバージョンだと改良されているかもしれません)。

また、音声認識デモのcloudspeech_demo.pyを使用する場合は、cloud_speech.jsonを /home/piへコピーしてください。 こちらは、Segmentation fault は発生せずに、そのまま動作します。

cd /home/pi/AIY-projects-python/src/examples/voice
python3 cloudspeech_demo.py

4. ライブラリのバージョン・ダウン

Segmentation faultが発生 してしまった場合は、以下のコマンドを入力し、ライブラリのバージョン・ダウンを行います( 2019-11-13版の1.0.1→1.0.0)

sudo pip3 install google-assistant-library==1.0.0

再度、以下のコマンドを実行してみましょう。

cd /home/pi/AIY-projects-python/src/examples/voice
python3 assistant_library_demo.py

5. 新デバイスのアクセス認証

同じRaspberry Piであっても、セットアップしなおすと、新しいデバイスとしてGoogle Cloud へアクセスするための認証が必要です。

実行すると、認証用のURLが表示されるので、リンクをコピーし、Webブラウザでアクセスし、お使いのGoogle Cloudのアカウントで承認します。

新バージョンのサンプル・プログラムについて

新バージョンのサンプル・プログラムは、以下の通りです。

assistant_library_demo.py
Hotword(OK,Google)でGoogle Assistantとの会話が出来るデモ

assistant_library_with_button_demo.py
Google AIYのボタンで Google Assistantとの会話 を開始するデモ

assistant_library_with_local_commands_demo.py
「OK Google, power off」でRaspberry Piの電源を切るなどのローカル・コマンドに対応したデモ

assistant_grpc_demo.py
Google Assistant の Hotword(OK,Google) 無しのデモ

cloudspeech_demo.py
「turn on the light」で、 Google AIYのボタンが点灯するデモ。本サンプルでは Google Assistant は使用しない代わりに、Google CloudSpeechを使用する。要セットアップ(cloud_speech.json が必要)

voice_recorder.py
AIYキットの動作確認用デモ( デスクトップの「Check audio」 とほぼ同一)

参考文献

Google AIYプロジェクトのページ: https://aiyprojects.withgoogle.com/voice-v1/

aiyprojects-raspbian/issues (Segmentation Fault):
https://github.com/google/aiyprojects-raspbian/issues/660

by ボクにもわかるRaspberry Pi
http://bokunimo.net/raspi/