これまで、ラズベリーパイとGoogle AIY Voice Kitで、いろいろ頑張ってまいりましたが、日本語でOK GoogleするGoogle Homeのような機能を期待するのは諦めていた私。
すると、先日のブログのコメント欄に耳よりな情報を書いて下さった方がいらっしゃいました。
どうやら、Google Assistant SDKが日本語その他複数の言語に対応したとのこと。
あらまぁ、それは嬉しいわ。つまり、AIYスピーカーのGoogle Home的日本語版への道が開かれたということ。ということで、再びモチベーションがぐぁぁんと上がった私は、さっそく作業へ取り掛かりました。
結論から言いますと、12月25日現在で、いちおう、日本語でOk Googleのようなことができるようになりました。「Ok Googleのようなこと」と書いたのは、今はまだ、OK Googleと言うのではなく、パソコンのキーを押して話しかけるスタイルになっているからです。
ですが、とにかく、日本語で話しかけて、日本語で答えてくれるレベルには到達したので、こちらで、その過程をメモしておこうと思います。
ただし、その途中では、かなり四苦八苦して、何度もインストールを繰り返したりしたので、途中の段階のプロセスは一部あいまいになっている部分があります(^-^;。
(2018年1月15日追記)
OK Googleと話しかけて、日本語で応対ができるようになりました。記事に下の方に情報を追加しています。
(2018年3月14日追記)
本家のGoogle AIY Voice KitのOSイメージファイルが日本語対応となりました。なので、本記事にあるGoogle Assistant SDKをラズパイに入れなくとも、OSのイメージファイルを更新すれば、日本語対応となります。こちらの記事もご参照くださいませ。
Google Assistant SDKをラズパイに入れる
なお、これから説明する手順は、すべてGoogleのページに書いてあります。
コンピュータにお詳しい方や英語でも分かるよっていう方は、上のページを参考にしてくださいませ。困ったときは、Google本家のページの戻る!です。
この記事は、自分のメモ的に記録に残したものでありますが、何かの参考になれば幸いです。
さて、はじめてみます。
まずは、Google Assistant APIの認証作業を、ブラウザから行ないます。
これまで、Google AIY スピーカーで、Google Assistant APIやCloud Speech APIで、試行錯誤した方は、既に完了していることでしょう。
こちらの記事もご参考ください。
今回は、再び、Google Assistant APIのjson ファイルを、ブラウザからダウンロードします。既に、一度認証作業を行なっているなら、同じ認証ファイルをダウンロードするので大丈夫です。そして、ダウンロードしたら、/home/pi/直下に移動します。今度はリネームせずに長いファイル名のままで置いておきます。
pi直下のファイルのリストを見ると、ちゃんとありますね(client_secretで始まるファイル)。
次に、Googleのアクティビティ管理で、以下の項目が有効化されてるか念のため確認します。これまでAIYスピーカーでやってきた方なら、すでに有効化されているはずです。
- ウェブとアプリのアクティビティ(「Chrome の閲覧履歴と Google サービスを使用するウェブサイトやアプリでのアクティビティを含める」にチェックを入れる)
- 端末情報
- 音声アクティビティ
パイソンの仮想環境
ここから、以下のページを参考に実施していきます。コマンドは基本的に、このページのコピペで実行していきました。
まずは、コマンドラインから、以下を実行(Python3の場合)
sudo apt-get update sudo apt-get install python3-dev python3-venv # Use python3.4-venv if the package cannot be found. python3 -m venv env env/bin/python -m pip install --upgrade pip setuptools source env/bin/activate
こうやって、Pythonの仮想環境を作ってから、これからの作業を実行していきます。
Googleの英文には、これから先、コマンドの最初に(env)$と付いていたので、以下、Pythonの仮想環境で実行していくコマンドとなります。
仮想環境がアクティベートされると、コマンドラインの最初に、
(env)pi@raspberrypi; ~$みたいに、(env)が表示されます。
これが最初分かってなくて、ドツボにハマりました。(env)になっていないところで、これからのコマンドを実行して、エラーが出て、すんごく悩みました。途中から、AIYスピーカーのStart dev terminalのアイコン経由で作業を行なっていたらしくて、デバイスの登録が上手くいかなくて、困った記憶も。この辺から結構、ドツボにはまっていきました。
とにかく次に行きます。「source env/bin/activate」のコマンドで、(env)の環境に入って、やっていきます。
SDKパッケージの取得
次にSDKパッケージの取得です。次のコマンドを実行します。
(env)$ python -m pip install --upgrade google-assistant-library
それが終わったら、次はこっち。
(env)$ python -m pip install --upgrade google-assistant-sdk[samples]
ここはかなり長い時間待ちますが、我慢して、終わるのを待ちましょう。途中で止まってしまったので、てっきり固まったのかと思いましたが、放っておいたらきちんと終了しました。
これが終わったら、認証情報の作成に入ります。
まずはこちらのコマンドを実施。
(env) $ python -m pip install --upgrade google-auth-oauthlib[tool]
この処理が終わったら、こちら。
(env) $ google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless --client-secrets /path/to/client_secret_client-id.json
こちらのコマンドの末尾にある「/path/to/client_secret_client-id.json」は先ほどダウンロードしたご自分のjsonファイルの長い名前を代わりに使います。
具体的には、先ほどダウンロードしたファイルをフォルダで開いて、右クリックで、「パスをコピーする」を選んで、上の、/path/to/client_….を/home/pi/client_secret…に換えてあげます。
すると、画面に、「enter the authorization code」と出てきました。
「認証コードを入力してください」って、いったい何のコードだろう?と一瞬、分かりませんでしたが、画面の直前を見ると、長いURL(httpsで始まり、「enter the authorization code」の直前で終わるやつ)が貼られていました。そこをクリックする必要があります。
URLをクリックしてもページに飛ばなかったので、右クリックでURLをコピーして、ブラウザのアドレスバーに貼り付けてアクセスしました。
すると、Googleアカウントのログイン画面みたいなのが出てきます。
ディベロッパープロジェクトを作ったGoogle アカウントを選択すると。。。
ここで、表示されたコード(4/xxxx)をコピーして、先ほどの「enter the authorization code」の後に貼り付けます。
うまくいくと、ターミナル画面に
「credentials saved: /home/pi/.config/google-oauthlib-tool/credentials.json」と表示されます。
InvalidGrantErrorと表示された場合は、コードが上手く貼り付けられていないので、再度トライする必要があるようです。私は一発でOKでした。
これから、次のステップにいきます。
デバイスの登録
デバイスを登録するために、レジストレーションツールが必要らしい。はぁ。
ええと、英文だとこのページにあたります。
こちらによると、適切な場面で適切なコマンドをGoogle Assistantが言えるために、デバイスを登録する必要があるんだそうです。
まず、デバイスモデル名を考える必要があります。デバイスモデル名には、英数字の他、ピリオド (.)、ハイフン(-)、アンダーバー(_)、スペース( )、プラス(+)といった記号が使えますが、最初の文字は英数字である必要があります。
デバイス固有の名前になるので、最初に登録していた「自分のプロジェクト名‐モデル名」みたいなのがおススメらしい。
で、このようなコマンドを入力するらしいのですが…
(env)$ googlesamples-assistant-devicetool register-model --manufacturer "Assistant SDK developer" --product-name "Assistant SDK light" --type LIGHT --model my-model
なんか、もう、この辺からアップアップになってきて、韓国旅行でハングルだらけのATMを前に手探りで自分のキャッシュカードから現金を引き出してるような気分になりましたが、とりあえず、My modelはシンプルに、自分のプロジェクト名にAIYスピーカーを追加するっていう感じでトライしてみました。
自分のデバイスがきちんと登録されているかどうかは、次のコマンドで確認できます。
(env)$ googlesamples-assistant-devicetool get --model my-model
OKグーグル!なるか
デバイスが登録されているのを確認したら、さっそくグーグルさんを呼び出してみます。
「my-dev-project」には、事前に登録してある自分のプロジェクト名を、「my-model」には、自分で今回考えた名前を入力します。
(env)$ googlesamples-assistant-hotword --project_id my-dev-project --device_model_id my-model
エンターキーを押すと…、うーん、なんかいろいろ出てきた。
ここに表示されている長いID(Devide Model ID)が、デバイスインスタンスIDというものらしいです。
このテキストに気を取られてうっかりしてたのですが、この段階で、OK Googleが機能するんですって。え?何も反応しないんですけど。
再度、同じコマンドを入れて、Enterキーを押してみます。そして、OK Googleと話しかけると、きちんとリアクションありましたー。
ただし英語で。
でも、第一関門突破です。
さらに、「OK Google。Do you understand Japanese?」と聞くと、馴染みのある日本語で(あのGoogle Homeで聞こえてくる日本語で)、「分かりますか」と答えてきた。おぉー、なんか、いい感じ!
ただし、これらのやりとりをする上で、AIYスピーカーの上部のボタンは光りません。
とにかく今は、OK Googleというたびに、英語で反応してくれます。そして、
「OK Google. Japanese hello」というと、日本語で、こんにちは、と聞こえてきました。あきらかに、このAIYスピーカー日本語の知識がある感じ。あともう一息だ!
さて、ここから、どう日本語にしていくんだろう。
とにかく、次からこのGoogle アシスタントを使うためには、
まず、Pythonの仮想環境に入るコマンドを打って、
$ source env/bin/activate
コマンドラインの先頭に(env)が付いたのを確認してから、
(env)$ googlesamples-assistant-hotword --project_id my-dev-project --device_model_id my-model
を入力すれば大丈夫なよう。もっとも、PgUPのキーを押すと、過去に入力したコマンドが出てくるので、それですぐに呼び出せば簡単ですね。
(追記)2018年1月上旬のGoogle Assistant SDKのアップデートにより、Hotwordでも日本語対応となりました。ここから先は、こちらの記事もご参照くださいませ。
日本語にするための、もうワンステップ
ですが、ですが、
これを行なうと、OKグーグルの一声で、スピーカーが話すようになるのですが、相変わらず英語のまま…。日本語にはなりません。
ということで、いったいどうすればいいのでしょう、と再び停滞期来ました(^-^;。
そして、各地をググったり、ネットを徘徊しておりましたら、こんな方がいらっしゃいました。
このブログ主さんは、アマゾンのAlexaとGoogleアシスタントを共存させているツワモノさんでございまして、私の理解の範囲を超えたことをされている方なのですが、こちらの情報によると、「hotword」は日本語にできないけれど、「pushtotalk」は日本語にできるという情報が!
今まで、私が試していたのは、hotwordだから…。もう1つPushtotalkってのがあるのね。
よし、Pushtotalkだ!と、さっそく試してみます。
最初に試したコマンドはこちら(間違ってるバージョン)。
(env)$ googlesamples-assistant-pushtotalk --project_id my-dev-project --device_model_id my-model
しかし、エラーが出ます…いったい、何が悪いのだぁ!とここから、ドツボにはまって、再度インストールしたり、意味不明なことを繰り返すこと1日以上…。
どうやら、Hotwordでは、project_id、device_model_idと、アンダーバーになっているのに対して、pushutotalkでは、project-id、device-model-idと、ハイフンになっているためな気がしてきました。
なので、ここを訂正しまして、アンダーバーをハイフンと書き換えて、再度トライすると…。
(env)$ googlesamples-assistant-pushtotalk --project-id my-dev-project --device-model-id my-model
できました!
こちらのpushtotalkは、パソコンのキーをどこか押して、質問すると答えてくれるGoogleアシスタントさんのようです。「Good morning」とか適当に話しかけると、きちんと答えてくれます。相変わらず英語です。
これを、日本語にしてみます。末尾に「–lang ja-JP」ってつけると日本語になるらしい。
(env)$ googlesamples-assistant-pushtotalk --project-id my-dev-project --device-model-id my-model --lang ja-JP
そして、トライすると…日本語が来ました!!!!!!
「WARNING:root:SoundDeviceStream read overflow (3200, 6400)」という謎のメッセージは出ているものの、グーグルさんはきちんと日本語で、本日の天気予報を教えてくれました。
ただし、質問を入力する際には、AIYスピーカーのボタンや「OK Google」の言葉ではなくて、キーボードのキーをどこか押す必要があります。
しかも、終了の仕方が良くわからないので、ターミナル画面を閉じるしかない、っていう…。
とにかく、AIYスピーカーから日本語が聞こえてくるようになったのは嬉しいかぎりです。
でも、現時点では、AIYスピーカーのボタンは使わないし、OK Googleの音声も使えないし、AIYスピーカーを組み立てた恩恵があまり得られていない状況なので、なんとか、AIYスピーカーのボタンを押したり、Ok Googleの音声で反応するよう、引き続き試行錯誤していきます。
コメント
クレウエタンさん
情報を共有して頂き、ありがとうございます。ライブラリでダメそうだなと思ったらクレウエタンさんの記事を読んで、助かった。
因みに、hotword.pyでも言語を設定できるようなチケットが出たみたいです:
https://github.com/googlesamples/assistant-sdk-python/issues/150
引き続き。。。
フシェさん、コメントありがとうございます。私の記事が少しでもお役に立てたのなら幸いです。
そして、チケットの情報も教えていただき感謝です。hotword.pyでも、言語切り替えできるようになったら良いですねー✨。
ありがとうございます。紹介していただいた手順で試すことができました。
この手順で日本語で呼び出すと、キーを打つ必要がありますが、わりと自然二使えますね。
ピカチュウと呼べばピカチュウを呼び出すこともできました。
ほわいとさん、コメントありがとうございます。
日本語で呼び出せるようになったようで良かったですね。少しでもお役に立てたなら幸いです。
ピカチュウも呼び出せるんですね~。さっそく私も試してみます❗。
hotwordはうまく行ったのですが…
pushtotalkに書き換えて実行したところ以下の様なエラーを吐いてうまくいきません…
アンダーバーは全てハイフンに書き換えています。
何か解決策はありますでしょうか?
INFO:root:Connecting to embeddedassistant.googleapis.com
WARNING:root:Device config not found: [Errno 2] No such file or directory: ‘/home/pi/.config/googlesamples-assistant/device_config.json’
INFO:root:Registering device
ERROR:root:Failed to register device: {
“error”: {
“code”: 400,
“message”: “Could not create the device instance. Client type need to be specified as SDK_LIBRARY or SDK_SERVICE.”,
“status”: “INVALID_ARGUMENT”
}
}
コメントありがとうございます。さて、エラーが出ているんですね。私も同じようなところでエラーが出て、1日以上ウ~ンと唸っていました(^_^;)。
私の場合、理由も分からずあちこち触っていたら、なんとなく解決してしまったので、お力になれる解答ができるか分からないのですが、上のエラーメッセージを見る限り、デバイスの登録の際に問題がありそうな感じがします。
‘/home/pi/.config/googlesamples-assistant/device_config.json’のファイルの内容を確認してみるのはいかがでしょうか。
/home/pi/の下の隠しファイルなので、フォルダのメニューから表示→隠しファイルを表示するで、.configのフォルダが見られるはずなので、その中のdevice_config.jsonに書かれているデバイス名が正しく登録されているか確認してみるとか…。
あとは、どういうわけか現在、私のAIYスピーカーでは、(env)の状態で、デバイス名を書かずに、googlesamples-assistant-pushtotalk –lang ja-JPと打つだけで、使用できる状態になってしまっています。なので、思い切って、デバイス名を書かずに試してみるとか…でしょうか。
少しでも早く、エラーが解決することを願っております(^^)。
お忙しい中返信して頂き、ありがとうございます。
‘/home/pi/.config/googlesamples-assistant/device_config.json’
上記のファイルを探してみたのですが、ファイル自体が存在していませんでした。
.configフォルダの中を探してもgooglesamples-assistantフォルダが見つかりませんでした。
どうすれば良いのでしょうか?
とある名無しさん、
> .configフォルダの中を探してもgooglesamples-assistantフォルダが見つかりませんでした。
フォルダ自体がなかったのですね。.configフォルダの中に、google-oauthlib-toolのフォルダはありますか?
あるなら、認証までは大丈夫なはずなので、上の記事であるところの、「デバイスの登録」を再度行なってみるのはいかがでしょうか。
初めまして。私も年末年始を利用して頑張って設定していたのですが、MagPiの本やホームページで記載されている手順ではうまくいかず、ネットを検索していてここにたどり着きました。丁寧な内容で、私も英語では会話でき、SWのLEDを日本語でON-OFFさせるところまでは来ましたが、あとは日本語で会話できれば…
私もとある名無しさんが書かれているように隠しファイルが見当たらない状況ですが、ここのブログでずいぶん助かりました、ありがとうございます。
ソーセイジさん、コメントありがとうございます。この記事が少しでもお役に立てたのなら幸いです(^^)。
ソーセイジさんも、隠しファイルが見当たらないのですね。上の方のコメントでも書いたのですが、デバイスの登録を再度行なっても変わらないでしょうか。
私も、最初なかなかPushtotalkが日本語にならなくて苦労したので、(env) pi@raspberrypi:~ $ だけでなく、(env) pi@raspberrypi:~/AIY-voice-kit-python $直下にもSDKパッケージをインストールしたりいろいろしているので、どういう状況下で、隠しファイルが生成されるのか分かっていない状況です(^_^;)。
ソーセイジさんのAIYスピーカーが一日も早く、日本語で会話が可能になることを願っております。
はじめまして。先ほどHotWord対応してないのかなと思い、ggってみたら、多分対応したみたいです!
テレルンさん、コメントありがとうございます。Hotword対応したとの情報ありがとうございます。現時点で、自分のAIYスピーカーで試したところ、まだ変化はないのですが、何か方法がないか、もう少し調べてみます(^^)。
全く同じ現象で悩んでいましたが SDKサイト(https://developers.google.com/assistant/sdk/reference/device-registration/device-tool)を見ていたところ、deviceを登録するコマンドがあったので、これを実行したところ、無事にエラーなく日本語でしゃべりました。
googlesamples-assistant-devicetool register-device –device “device-name” –model “model” –client-type LIBRARY
きっとうまくいきますよ。お試しください。
ハルシオンさん、コメントありがとうございます。ハルシオンさんは、日本語でお話するのに成功されたんですね。1つお伺いしたいのですが、ハルシオンさんは、Hotword、つまり、「OK Google」と音声で話しかけて、日本語で答えてもらうことが可能になっていますか?
突然すみません、hotwordの日本語化でこちらのサイトを参考にさせていただいておりました。1月12日にライブラリ、サンプルを最新化して試したろことhotwordで日本語で話しかけて、日本語で応答してくれるようになっていました。
kikushunさん、コメントありがとうございます。Hotwordで日本語で話しかけて、応答してくれるようになったのですね。良かったです!
…といいつつ、私の方は試行錯誤してみたのですが、どうも上手くいかず…(涙)。もう少し頑張ってみます(^^)
スマートホンをお持ちなら、Google Assistantアプリを開き、iOSの場合は右上の青いボタン→機能を見る画面になりますので右上の…ボタン→メニューが出るので設定を選択すると、設定画面が表示されます。
ここのデバイスの項目に、デバイス登録の時に使ったProduct Name(つまり、Assistant SDK light)が表示されていると思いますので、それを選択。
アシスタントの言語、と言う項目がありますので、日本語を選択すると、日本語で話すようになると思いますよ。
rabewpさん、コメントありがとうございます。
私もようやく日本語化することができました。私はAndroidのスマホなので知らなかったのですが、アプリは、iOSだとメニューの場所が逆になるんですね。情報追加させていただきます(^^)。