AIY: 2018年2月版に更新

AIYを一月ほど寝かせていたら、比較的安定してきたような感じだったが、結局RaspbianのUpdateをしたらまたhotword起動しなくなった。わりと気難しい性格らしい。
調べていたら、2月に新しいバージョンが出ているようで、どうやらこれで日本語が使えるとのこと。

結局更新してみることにした。

  1. サイトからイメージファイルをダウンロード(今回は1Gを超えている!)
  2. UbuntuのファイルマネジャであるNautilusに標準で装備されているイメージ作成機能でSDカードをつくる
  3. sshの空ファイルとwpa_supplicantをルートにコピー(今回のバージョンは、sshは既に用意されていたので、実際に使ったのはwpa_supplicantのみ。これには家庭LANへの接続パラメタが入っている)
  4. RPiにSDカードを入れて電源をつなぐ。TVでモニターすると、簡単に起動しているのが分かる。
  5. PCからsshでログインする(ここで躓いた。sshのログインをRSA認証を使っていたので、ホスト側となるラズパイのOSをまっさらに変更したことから、鍵が合わなくなってしまった。認証系はよく理解していないので、どこかのサイトを参考にしたのだが、結局、エラーメッセージのとおりにキーを打って一旦認証を消去して、新しく認証しなおせばよいことがわかった。
  6. SDカードのパーティションの拡張(デフォルトでは3Gしか使わない設定)
  7. ロケールやタイムゾーンを設定
  8. リブート

この後、OSのアップデートをするべく sudo apt updateをしたら、また新たなエラーメッセージが・・・(´・ω・`)

パッケージリストを読み込んでいます... エラー!
E: Problem parsing dependency 20
E: golang-github-google-cadvisor-dev を処理中にエラーが発生しました (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/mirrordirector.raspbian.org_raspbian_dists_stretch_main_binary-armhf_Packages
E: パッケージリストまたはステータスファイルを解釈またはオープンすることができません。

例によってぐぐってみました。コチラのサイト(ナントカnet:apt-getできないトラブル)によると、アップデートのリストが何らかの形で壊れているので、それを削除しなさいとのこと。わりと単純なエラーですね。今回はアップデート項目が多いようなので、読み込みに失敗したのでしょう。

その後エラーの出るファイルを/var/apt/cache/の中で探しては消去しつつ、しつこく何度もUpdateとUpgradeを繰り返し、SDカードの更新に成功。

次いで、Google Cloud Platformの自分のダッシュボードから認証ファイルassistant.jsonをダウンロードして設定終了。

結局、終日を使ってしまった。

日本語化は週末に挑むことにするが、本当にできるのか、心配になってきたぞ。


Google AIY Voice Kitの改修

いまのところ目標は以下の通り。

  1. 日本語化したい。できればバイリンガルにして質問した言語で回答するようにしたい。
  2. ラズパイにVNCで入ってAIYコマンドを起動させる方法ではなく、PC側のTerminalから起動させる方法にしたい。その際、PCを落としてもAIYは継続するように。

今日は、envの起動の方法はわかったので、次はPythonのデモをよく見て、AIYの起動方法を勉強しよう。


Voice Kitの復旧

この一月の間、放置していたGoogle AIY Voice Kitを久しぶりに起動させた。

といっても、本当に放置していたわけではなく、OSであるRaspbianが安定しているかどうかを、ちょくちょくアップデートを重ねながら様子を見ていた。

1月にパッケージが新しくなっていたのだが、前回は古いパッケージでセットアップしてしまい色々と苦労をしたが、新しいものも別の意味で手探り状態で対応しなければならないことが多いので、他の人が使って「ダメ出し」をした後に使うという魂胆。素人はこれに限る。

相変わらずマニュアルを見ないと何もできないレベルの低さは変わらないが、VoiceKITのマニュアルそのものがかなり変更されていて、わかりやすくなっていた。

そのため、復旧は簡単にできてしまい、途中でひかかることなくOK Googleまでたどり着くことができた。

相変わらず日本語は使えないが、自動起動と日本語化の参考になるサイトがあったのでメモ。

ラズパイダ:Google AIY Voice Kitで日本語で受け答えするGoogleアシスタントを作る!その2 自動起動で実行させる

先日更新した、Remminaは相変わらず使っていると落ちる(だが、再度アクセスすると元の画面のまま使える。つまりラズパイ側は安定している。)。そろそろ、ラズパイのGUIではなくPC側のTerminalからSSHで入った状態でコマンドが使えるようにならないと、この先に進めないな (´・ω・`)


AIY:ディスクから作り直し

AIYが調子が悪いので、ブートイメージから作り直すことにした。
もともとの作業が1月8日でその際のOSのダウンロードをしたのが数日前だったと思うが、9月日付だった。つまりこのキットができたときのまま。しかし今回調べたら、1月3日付けのイメージがサーバにあった。

1月8日の作業記録があるのでこれに従って再実行。

焼付が早く終わったのだが、よくよく見ると3G程度のファイル容量しか使っておらず、せっかくの16Gのうち4分の1しか使っていないことになる。これは後半の、「容量拡大」を参照。

今回の変更点は、sshとwpa_supplicantを最初のブート前に/bootにコピーしておく必要があるのだが、sshは既にイメージディスクに用意されていたことか。

ディスプレイは繋がっているので無事にブートしたことを確かめたが、sshで入ってもログインができない。No route to hostという冷たいメッセージが来るだけ・・・(´・ω・`)

arp -a でもよくわからない。調べてみると、デフォルトでraspberrypi.localというホスト名が割り当てられているということだ。これは朗報!

ping raspberrypi.local

Raspberry Pi 3 コンソールのみ(ヘッドレス)でRaspbianセットアップからLチカまで

やってみたら、これまでとは異なるIPアドレスが振られていた。固定IPにしなければイケないことを実感。

とりあえず無事に起動してsshログインまで成功。

この後にVNCサーバを立ち上げていきなりGUIでアクセスしたいのですが、まずは、sudo raspi-configで設定を変更。

  • hostnameをデフォルトのraspberrypiから自分の好みに
  • localeをJP_UTF-8にしてTime ZoneをTokyo

他はそのままで先ずは保存してリブート。
次回からアクセスは、

ssh usr@hostname.local

という形になる。

ディスクのパーティション容量拡大

3G程度しか使っていないのは勿体ないので、空いている領域を拡大して使おうと目論んだら、fdiskなるコマンドがあることを知った。だけどとても難しそうで、またぶっ壊しそうで怖い。さらに調べると、RaspbianOSの中のraspi-configにコマンドが用意されていることがわかった。これだと簡単(ただし、空き領域を拡張するだけなので割当などはできない。)。調べてよかった。

SDカードのパーティションの拡張

ここで一旦システムをリブートした後、アップグレードする。

sudo apt update
sudo apt upgrade -y

ついでVNCサーバとして、デフォルトのRealVNCではなく他でも使っているので慣れているtightvncserverに置き換える。

sudo apt install tightvncserver

さらに日本語も使えるように、fcitx-mozcをインストールしておく。

sudo apt install fcitx-mozc

これでRemminaからVNCアクセスできるようになったら一先ずシステム設定としては終わるので次に、AIYの設定に入る。


AIY: 日本語化

Google AIY Voice KitHot WordsとかWake Voiceといわれる呼びかけの言葉がOK Googleなのは構わんのですが、その後の言葉が英語です。
大したことを聞くわけでもないので英語のままでも支障はありませんが、SDKが日本語対応したと聞くと自分もやってみたくなるというのが趣味の世界。実用という意味では、かみさんが台所仕事をしながらタイマーセットしたりするのに、日本語のほうがよろしいかなということもあり、早速挑戦です。

クレウエタンさんのサイトから(https://kureuetan.com/web/iot/4818/)

こちらは、スマホアプリAssistant SDKから制御することを前提にした内容

ブログだいちゃん:Google Assistant SDKの hotword.py が日本語に対応した
(http://www.love-hokuto.com/?p=6441)

こちらも同じですが、より簡単

あみこども未来ラボ:ラズパイで「OK Google」(http://amikodomolabo.org/2018/01/13/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%81%A7%E3%80%8Cok-google%E3%80%8D/)

いずれも同じ方法です。さっそくやってみました。

タブレットにGoogle Assistantをインストールして設定を見ると、あれ、すでに日本語になっています。
何か変だなと思いつつ、「OK Google、日本語わかる?」と聞いてみたら、LEDが点灯したまま無言状態・・・・・(´・ω・`)

ラズパイに乗っているSDKのバージョンを見たら9月のままでした。やはり拙速はいけません。関係するファイルの更新をやってから再挑戦です。

設定のやり直し

認証ファイルのダウンロードからやり直しました。ここでまた同じ失敗。IDを切り替えるのをつい忘れてしまい、AIY用ではない元のアカウントで認証キーを作ってしまいました。気がついたから良かったものの、前回動かない原因で気づかずに一番苦労したところです。

パイソンの環境(env)に入るためのshスクリプトを見つけたので、それを叩いて、アップデートします。

pi@RPi02-AIY:~ $ cd bin
pi@RPi02-AIY:~/bin $ ls
AIY-voice-kit-shell.sh
pi@RPi02-AIY:~/bin $ AIY-voice-kit-shell.sh
Build info: Tue Sep 12 00:36:20 UTC 2017 @ 3955cac
Dev terminal is ready! Hint: enter src/assistant_library_demo.py
(env) pi@RPi02-AIY:~/AIY-voice-kit-python $ pip install google-assistant-library --upgrade
Successfully installed google-assistant-library-0.1.0 google-auth-1.0.1 requests-2.14.2
(env) pi@RPi02-AIY:~/AIY-voice-kit-python $ pip install google-assistant-sdk[samples] --upgrade
Requirement already up-to-date: google-assistant-sdk[samples] in ./env/lib/python3.4/site-packages
Requirement already up-to-date: google-auth-oauthlib[tool]>=0.1.0 in ./env/lib/python3.4/site-packages (from google-assistant-sdk[samples])
Successfully installed CFFI-1.11.4 futures-3.1.1 google-assistant-grpc-0.1.0 google-auth-1.3.0 googleapis-common-protos-1.5.3 grpcio-1.8.4 monotonic-1.4 protobuf-3.5.1 pycparser-2.18 requests-2.18.4 setuptools-38.4.0 sounddevice-0.3.10 tenacity-4.8.0

最後は時間がかかりました。

(env) pi@RPi02-AIY:~/AIY-voice-kit-python $ pip install --upgrade google-auth-oauthlib[tool]
最初は赤い文字で、エラーが出たのでおののきましたが、単なるスペルミス。

Could not find a version that satisfies the requirement google-auth-oauhtulib[tool] (from versions: )
No matching distribution found for google-auth-oauhtulib[tool]

再度確認して、漸く。

(Requirement already up-to-date:

続いて、認証の処理をします。

(env) pi@RPi02-AIY:~/AIY-voice-kit-python $ google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless --client-secrets ~/client_secret_xxxxxx.apps.googleusercontent.com.json
Please visit this URL to authorize this application:
Enter the authorization code:
credentials saved: /home/pi/.config/google-oauthlib-tool/credentials.json

無事認証は終わり。実はここでも痛恨のスペルミスがあり、prototypeをproptypeとしていたために何度やっても失敗しました。

(env) pi@RPi02-AIY:~ $ googlesamples-assistant-devicetool register-model --manufacturer "Assistant SDK developer" --product-name "Assistant SDK light" --type LIGHT --model
Creating new device model
Model successfully registered

次にひかかったのがここです。この処理はHomeディレクトリですべきところをこれまでの流れでそのままやっていたので、認証ファイルが存在しないということでエラーが続きました。

ようやくエラーから脱出して、次のコマンド

googlesamples-assistant-hotword --project_id xxxx --device_model_id yyyyyy

これで何やら長いメッセージが出てきて受付状態になりますが、なんだか調子が悪いです。
でも、音は小さいけど例のごとく、時間とかお天気は回答はしてくれます。しかし日本語にはなりません。

スマホからのアクセス

アンドロイドスマホであれば、Google Assistantの設定でできるとか、Google Homeでできるとか出ていますが、どうやらGoogle Homeプロダクト向けであって、ラズパイではもうひとひねり必要なようですね。

あわてず英語でしばらく続けます。

困ったのが、最初のデモが動かなくなったことですね。
LEDが点灯したり点滅したりするので、活動状態がわかってよかったのですが、いまのgooglesample-assistant-hotword.pyはお化粧部分(機能に関係なくライトを制御するところ)が外してあるので、外見からは寝ているように感じます。
インタフェースは大切ですね。