ラズパイをグーグル・ホームにしてみる | 理系ママの、育児と家事と山と株とプログラミング

理系ママの、育児と家事と山と株とプログラミング

美容・語学・IT・子供・レジャー・資産運用など、思いつくままに色々と書きたいと思います。ひょっとすると雑貨・介護・風水なんかの話もするかもしれません。

ラズパイをアレクサにしてみる」でアレクサになってしまった、うちの次男のラズパイ

今週末はグーグル・ホーム(Google home)にしてみました。

やり方は、例によって雑誌「インターフェース」の2018年4月号に書いてあります。なのでやってみたい人はそちらをみてください。

 

 

記事がかなり親切なのでほぼ問題ないのですが、いくつか手間取ったところがあったのでそれについてだけ、記事の章立てに沿って書いておきます。

グーグルへの登録やSDKの入手

まずはGoogle Cloud Platform Consoleへの登録ですが、アマゾン開発者アカウントのように住所などを入力させられることもなく、いつものgmailアカウントを入力しただけであっさり終わりました。

実に楽チンです。

 

そしてこの後の作業もほとんど引っかかることなく、記事の通りにサクサク進みます。

手順がちょっと多くてコンソール入力が少し面倒に見えますが、簡単なのでさくっとやってみてください。

 

ラズパイ側の準備

この章の最後の方にデバイスモデル登録のための「リスト5の入力」というのがありますが、ここが最初のひっかかりポイントです。

ここでは下記のように入力するという説明です。


(env) $ googlesamples-assistant-devicetool register-model --manufacturer "Assistarnt SDK developer" --product-name "Assistant SDK sample" --type LIGHT --model samplemodel

ところがこれを入力すると、クライアントシークレットやプロダクトIDを指定して実行するか、jsonファイルを現在のディレクトリに持って来て実行するように、というエラーが出ます。


Error: Error loading client secret: [Errno 2] No suc file or directory: 'client_secret_***.apps.googleusercontent.com.json'.
Run the device tool with --client-secrets or --project-id option.
Or copy the client_secret_***.apps.googleusercontent.com.json file in the current directory.

 

ここに来るまでの手順でプロジェクトは作っているので、そのプロジェクトのクライアントシークレットかプロダクトIDを引数で与えてもいいと思いますが、今回は前の手順でダウンロードしてあった json ファイルを今のディレクトリに持って来てコマンドを再実行しました。


(env) $ cp Downloads/client_secret_***.apps.googleusercontent.com.json ./
(env) $ googlesamples-assistant-devicetool register-model --manufacturer "Assistarnt SDK developer" --product-name "Assistant SDK sample" --type LIGHT --model samplemodel

 

ところがこれでもエラー。

同じデバイスモデルIDがすでにあるとのこと。


Error: Failed to register model: 409
Could not create the device model. A model with the same device_model_id (samplemodel) already exists.

登録状況を確認する get コマンドも試してみましたが、「権限がありません。自分のプロジェクトで登録したデバイスモデルかどうか確認してください。」というエラー。


(env) $ googlesamples-assistant-devicetool get --model samplemodel
Error: Failed to get resourcce: 403
Could not get the device model. You don't have permission to get device model samplemodel. Make sure you registerd this device_model under your project (ここに自分で作ったプロジェクト名)

 

どうもリスト5に出て来た samplemodel というのはこの記事の作者が作ったデバイスモデルのようで、他の人は同じ名前で登録できないようです。

 

samplemodel2 という名前も試してみましたが、やっぱり「同じデバイスモデルIDがすでにある」というエラーが出ました。

他の人と競合しないよう、もっと長い名前にしてみてようやく成功です。


(env) $ googlesamples-assistant-devicetool register-model --manufacturer "Assistarnt SDK developer" --product-name "Assistant SDK sample" --type LIGHT --model samplemodel20180421
Creating new device model
Model samplemodel20180421 successfully registered

samplemodel20180421 というデバイスモデルは、もうとっちゃいましたからね。

皆さんは他の名前で登録してください。

 

「OK Google」って話しかけてみる

準備はほとんどこれだけ。

「リスト5」でちょっとつまづきましたが、その他はほぼ問題なしでした。

これで記事に載っている「リスト7」


(env) $ googlesamples-assistant-hotword --project_id "my-dev-project" --device_model_id "samplemodel20180421"

 

を入力するともう「OK Google」に反応して会話ができるようになっています。

あ、ここもちょっと注意が必要ですね。

最後デバイスモデルIDの指定が本だとなぜか今まで出てこなかった my-model という名前になっていますが、ここはさっき苦労した「自分で新たに登録したデバイスモデル」を指定しておく必要があります。

 

あと実はもう一つハマったのですが、「リスト5」の時にjsonファイルを持って来ることで --project_id オプションの指定を省略したので、今回の「リスト7」でも「これ、省略しちゃっていいよね」と思って省略してしまったんです。

結果的にこれはダメで、ここで会話はできるようになるもののGoogleアシスタントからの認識ができなくなり、日本語化ができない状態になりました。

なので登録時に json ファイルで乗り切って --project_id オプションの指定を省略した人も、ここでは省略せずちゃんと入力してください。

 

動かす

この章はスキップして大丈夫です。

この後GPIOを使ってラズパイっぽい何かをガシガシしたい人はやっておいてもいいと思いますが、単に「ラズパイグーグル・ホームを動かしてみたい」という人には不要な手順です。

何故か記事の記述もかなり不親切です。「サンプルの実行」の節が単に cd コマンドでディレクトリを移動するだけで、何をどう実行するのかよくわかりません。

 

やってみたい人はまず本に書いてあるように https://github.com/googlesamples/assistant-sdk-python にアクセスし、[Clone or download]ボタンでzipファイルをダウンロードしましょう。

このファイルを展開するとassistant-sdk-python-master のようなフォルダーができ、その下をたどって行くと hotword.py があります。

これを virtualenv で動かすと良いと思います。デバイスモデルの指定を忘れずに。


$ source env/bin/activate
(env) $ python Downloads/assistant-sdk-python-master/google-assistarnt-sdk/googlesamples/assistant/library/hotword.py --device_model_id "samplemodel20180421"

私は http_client_with_backoff.cc の113行目でエラーが出ましたが。

サンプルコードをよくみて頑張って修正すれば何かできるかもしれません。

 

日本語での使用

この時点でも「こんにちは」とか「日本語で話して」とかの簡単なやりとりなら日本語で答えてくれますが、「今日のニュースは?」とか「明日の予定を教えて」とかは理解してくれません。

なのでスマホに Googleアシスタント アプリを入れて設定する方法が記事には書いてあるのですが、なぜか私の Android ではできませんでした。

なぜか「この端末ではGoogleアシスタントはご利用いただけません」の表示。

詳細ページによると下記が必要というのですが、全部満たしているはず。

  • Android 5.0 以降 → 5.0.2 です
  • Googleアプリ 6.13 以降 → 7.25.17.21.arm となっています
  • Google Play 開発者サービス → インストールされています
  • 1.4GBのメモリと720pの画像解像度 → キャッシュを全削除して確保しました
  • 端末の言語設定に制限あり → 日本語だから大丈夫のはず

Google Homeアプリからも見つからず。

 

諦めて iPad でやりました。

iPadも最初デバイスを見つけてくれなかったんですが、それは上述の--project_id オプションの指定を省略が原因で、ちゃんと指定し直してからはデバイスがちゃんと見つかって無事日本語化できました。

 

 

アレクサとグーグル・ホームを比べてみる

昨日は1日かけてラズパイグーグル・ホームをセットアップした後、グーグル・ホームと色々会話してみました。

一週間使っていたアレクサ(on ラズパイ)と比べて、こっちの言ったことを解釈する精度が非常に高く、やりとりもかなり高度な感じがします。

「富士フィルムの株価を教えて」に対しては、アレクサは会社所在地などの簡単な会社紹介を答えましたが、グーグル・ホームは東証での昨日の終値と、前日から何円変化したかという情報を教えてくれました。

あと、例えば羊が一匹、羊が二匹、と数えて欲しい時、アレクサには「羊を数えて」は通じません。

まず「羊数え」のスキルを入れた上で、「アレクサ、羊数えを起動して」のように言う必要があります。

スキルの名前を正確に覚えて、「羊数えを起動」なんて言うかなり不自然な表現でコマンドをしゃべる必要があるわけですね。

これだと「人工知能との会話」でなくて単に「音声によるコマンド実行」という感じしかしません。

でもグーグル・ホームだと「オーケー、グーグル、羊を数えて」でちゃんと数えてくれます。

これだと会話がかなり自然ですね。

 

あ、アレクサにおけるスキルの概念はグーグル・ホームではアクションと呼ばれ、自作アクションで色々遊ぶこともできるはずですが、グーグル・ホームではアレクサと違って使いたいアクションをあらかじめ個別に入れておくということはしないようです。

あらかじめ「羊数えのスキルを入れておく」というようなことをしなくても、「羊を数えて」で数えてくれます。

 

おまけ情報として、昨日やってみてわかった「羊を数える能力」における二つの違いを書いておきます。

アレクサ

  • 優しい人間の声で数えてくれる
  • 二十匹ごとに「手や足が暖かくなってきませんか?」などおしゃべりしてくれる
  • 二百匹まで数えてくれる

グーグル・ホーム

  • 無機質な合成音声
  • 一匹ごとに羊の鳴き声も再生される
  • 百匹で打ち止め

まあ、起動するときの会話の不自然さに目をつぶれば、ダントツでアレクサのがいいです。

 

 

そして結局買ってしまった

GoogleのSDKの悪いところなんじゃないかと思うのですが、ラズパイに入れたグーグル・ホームではどうしてもニュースを聞いたり音楽を再生することができませんでした。

「このデバイスではニュースを再生できません」とか「この端末はその操作に対応していません」のような答えしか返ってきません。

 

なので結局、今日ヤマダ電機で買ってしまいました。

これが今、うちにいるGoogle home miniです。

 

こっちは私の AndroidスマホのGoogle Homeアプリからも、ちゃんと認識できました。

ニュースや音楽も聴けるようになりました。

でもAndroidのGoogleアシスタントだけはまだ使えません。

謎です・・・。