Google AIY Voice KitをGoogle Assistant SDKを使って日本語応答にする方法

こんばんは、ゆきです!
Google AIY Voice KitでGoogle Homeの自作が出来る事は「Google Homeが自作できる!?Google AIY Voice Kitの必要なものと作り方」の記事でも紹介した通りなのですが、このままだと英語音声にしか対応できません。
英語であれこれ指示するのも面倒なので、日本語化にしたいと思い色々調べたところ、Google Assistant SDKを一から入れれば、コマンドで日本語対応出来る事が判りました。
今回はその方法をご紹介します。
(2018/05/15)googlesamples-assistant-devicetoolに、-project-idオプションが必須になった旨追記
目次
日本語化の手順
日本語化は次の手順で実施します。
- SDKのインストール
- デバイスを登録する
- サンプルコードを再生する
この辺りの内容は、以下のサイトを参照しています。
Introduction to the Google Assistant Service(Google)
Change language? #79(Github)
1. SDKのインストール
Google AIY Voice Kitの組み立てが完了し、SDカードにOSが導入され、起動しているものとして進めます。その辺りの手順は「Google AIY Voice KitのOS・ソフトウェアインストールと設定方法」で纏めていますので、併せてどうぞ。
ここでは上記リンクの設定(Google Assistant APIの準備と認証)が一通り実施されているものとして進めます。Google Cloud APIの設定等が終わっていないようでしたら、上記のリンクから設定を実施してください。
(1)コマンドラインを開き、以下のコマンドを1行ずつ入力します。
$ 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
(2)Google Assistant SDKを入手します。以下のコマンドを1行ずつ入力します。
(env)$ sudo apt-get install portaudio19-dev libffi-dev libssl-dev
(env)$ python -m pip install --upgrade google-assistant-sdk[samples]
(3)次にデバイスの認証情報を取得します。以下のコマンドを入力します。
(env)$ python -m pip install --upgrade google-auth-oauthlib[tool]
(4)Google APIsでOAuthクライアントIDを取得します。
OAuthクライアントIDの取得方法については、「Google AIY Voice KitのOS・ソフトウェアインストールと設定方法/Google Assistant APIの準備と認証」の(1)~(13)の手順を参照してください。
なお、上記の記事ではJSONのファイル名を変更していますが、ここではリネームはダメとのこと。
(5)ダウンロードフォルダから、以下のコマンドで移動します。~部分は利用者ごとの任意の文字列です。client_secret_まで入力してタブキーを押すと自動補完されます。もしくはフォルダから移動させてください。
cd Downloads
mv client_secret_~.apps.googleusercontent.com.json /home/pi/client_secret_~.apps.googleusercontent.com.json
次のようになっていればOKです。
(6)その後は下記コマンドで認証を実行します。
(env)$ google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless --client-secrets /home/pi/client_secret_~.json
コマンドラインに次のような表示が出るため、URL部分をコピーし、ブラウザに張り付けます。
Please visit this URL to authorize this application: https://...
ブラウザではGoogle APIsのオーナーになっているgoogleアカウントにログインしてください。
(7)ログインすると、認証コード(4/XXXXのような形式)が表示されます。これをコピーしてコマンドラインの「Enter the authorization code:」のあとにペーストします。
うまくいけば、「credentials saved:」という表記がでます。「InvalidGrantError」と表示された場合はもう1度最初からコピペを試してみてください。
2.デバイスを登録する
(1)次にデバイスを登録するため、以下のように打ちます。表のタグに該当する箇所は適宜ご自身の環境に合わせて修正してください。
(env)$ googlesamples-assistant-devicetool register-model --manufacturer my-manufacturer --product-name my-product-name --type device-type --model my-model
my-manufacturer | 任意。製造者の名前 例 “yuki"(ダブルクオテーションも含む) |
my-product-name | 任意。商品名 例 “Original google home" (ダブルクオテーションも含む) |
device-type | SWITCH(スイッチ), OUTLET(コンセント),LIGHT(ライト) 何でもOKです。僕はスイッチにしておきました。 |
my-model | モデル名。後程使うのでメモしておきましょう。 例 yuki-no-yabo-001-my-model |
例をもとに構築すると、次のようになります。
(env)$ googlesamples-assistant-devicetool register-model --manufacturer "yuki" --product-name "Original google home" --type SWITCH --model yuki-no-yabo-001-my-model
(2018/05/15追記)
ソフトウェアのアップデートにより、googlesamples-assistant-devicetoolの引数に–project-idコマンドが必須になった可能性があります。上記のやり方でエラーが出た場合、下記のやり方を試してみてください。
(env)$ googlesamples-assistant-devicetool --project-id my-project-id register-model --manufacturer my-manufacturer --product-name my-product-name --type device-type --model my-model
my-project-idには、ご自身で設定したプロジェクトidを記入します。
idが分からない場合は、Google APIsのプロジェクト選択画面を見るか、.jsonファイルの、project_id:以降が該当となります。
3. Google Assistantを起動する
デバイスの登録が出来れば、いよいよGoogle Assistantを起動してみよう!my-dev-projectはプロジェクトIDを、my-modelは先ほどデバイス登録時につけたモデル名を入力します。
ポイントはコマンドの末尾にlang ja_jpを付けること。これで日本語化できます。
(2018/02/10追記)Google Cloud APIsに登録されているアカウントでGoogle Homeアプリにログインしている場合、Google Homeアプリ側から日本語の設定ができます。これを利用すれば、末尾にlang ja_jpは不要です。
(env)$ googlesamples-assistant-pushtotalk --project-id my-dev-project --device-model-id my-model
--lang ja_jp
上手く起動するとPress enter send a new requestと出ます。エンターキーを押して、音声コマンドを発話しましょう。
上手く認識してくれれば、Voice KitからGoogle homeと変わらない声で応答してくれます。すぐに音声入力がないとプログラムが停止するため、Enterを押したらすぐ話しかけましょう。
注意点としては、Embeddedバージョンのためか、ニュース読み上げや音楽再生等は出来ないこと。アラームも動作を登録できないからか、このコマンドだけでは対応不可です。翻訳や、天気予報、マップ検索、なぞなぞ等の機能は実装されています。
LEDを付けるサンプルについては、Google Assistant SDKの公式で紹介されていますので、あわせてどうぞ。
トラブルシューティング
僕自身がちょっとハマったポイントをメモしておきます。
再起動したらGoogle Assistantが使えない!
仮想環境を起動し忘れていないでしょうか?コマンドラインに(env)と表示されていないようでしたら、以下コマンドで仮想環境を起動し、再度3項で紹介したコマンドを入力しましょう。
source env/bin/activate
my-deviceの名前を忘れた!
以下のコマンドで確認することができます。
(env)$ googlesamples-assistant-devicetool list --model
Failed bulding wheel for grpico
SDKのインストール時に「Failed bulding wheel for grpico」というエラーメッセージが出る場合は、SDKのインストール前に以下コマンドを試してみてください。
(env)$ pip install wheel
まとめ:ウェイクワードで起動するにはあと一歩必要
これでGoogle AIY Voice Kitを日本語で応答することができるようになりましたが、ウェイクワードを待つ状態を作るにはもう少し手間がかかりそうです。
またその辺りも出来るようになったらご紹介したいと思います。
以上!
ディスカッション
コメント一覧
このラズパイに Google_Home_Notifier を入れて喋らすことは無理でしょうか
自分なりに試してみたのですが、無応答でした。
>>ハルシオン様
出来ると思いますが、ちょっと週末試してみますね!
今週の初めに、KIT を秋月電子から購入しました。Raspberry Pi 3B は、oT実験用に去年3代買って永久凍土化したものを1代使っています。英語版の OK Googlは、おかげさまでちゃんと動きました。
でも、日本語化がうまくいきません。
Google Assistant SDKを入手します。以下のコマンドを1行ずつ入力します。
(env)$ sudo apt-get install portaudio19-dev libffi-dev libssl-dev
(env)$ python -m pip install –upgrade google-assistant-sdk[samples]
この2行目の insutall 時に、
中程まで進んでから、
error invalid command ‘bdist_wheel’
—————————————-
Failed bulding wheel for grpico
と赤い字が出てそのまま進んでいきますが、
結果的には、うまくいきません。
何が悪いのでしょうか?
>オータン様
少し調べてみたところ、下記URLに該当する事象ではないかと推測します。
https://github.com/shivasiddharth/GassistPi/issues/134
記事中にはSDKのインストール前にpip install wheelをすればよいとの記述があるため、試してみては如何でしょうか?
はい、やってみますね。
で、できた。。日本語を理解して、応答を日本語で返した。。うる、うる、うる。。ちょっと誤認識があるけど、ま、Pushtotalkならばしょうがないか。。ありがとうございました。
>オータン様
無事にいけたようで何よりです!
こちらの記事を大いに参考にさせて頂き、どうにかAIYキットを完成させることができました。ありがとうございます。
KITに付いていた冊子には一か所間違いがあるようで、こちらの記事に正しい記述があったので助かりました。
(冊子ですから英語で起動させるコマンドですが、パスがおかしかったので起動できていませんでした)
ひょんなことから気づいたのですが、私のAIYキットが「OK Google」で聞き取りを開始し、「何か御用?」のようなことを言って、こちらから日本語で質問を入れると日本語で回答し、終わったらまた待機。と言う状態になりました。つまり完全状態。
iPhoneアプリで日本語に設定したのですが、いくつかデバイスの選択肢があって分からなかったから全部「日本語」にしたのです。
(env)の方は毎回PCでリターンを押さないと受信待機状態にならない。リターンを押すと受信待機になるのですが返答もしてくれないし、ランプも光りません。 そこで質問をすると回答が来て、またキーボードでリターンを押さないと次の質問は受け付けられません。「OK Google」と言ってもダメです。
しかし、元の英語版(デスクトップにあるアイコンから)の方を再度起動してみたら普通に日本語で動き始めました。
ランプが時々光り、「OK Google」と言うと点灯に変わり、日本語で質問をすると日本語で返します。
私の何か勘違いなのか、設定間違いなのかも分かりませんが、何かのご参考になれば幸いです。
>234様
コメント頂き誠にありがとうございます。
記事がお役に立ったようで何よりです!
また、詳細な動作報告ありがとうございます。
ご確認いただいた内容、早速こちらでも試してみます。
取り急ぎお礼まで!
雪様
お手数をおかけします。
(env)$ google-oauthlib-tool –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save –headless –client-secrets /home/pi/client_secret_~.jsonをインプとすると下記のようなエラーが出ます。
(env) pi@raspberrypi:~/Downloads $ google-oauthlib-tool –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save –headless –client-secrets /home/pi/client_secret_~.json
Traceback (most recent call last):
File “/home/pi/env/bin/google-oauthlib-tool”, line 11, in
sys.exit(main())
File “/home/pi/env/lib/python3.5/site-packages/click/core.py”, line 722, in __call__
return self.main(*args, **kwargs)
File “/home/pi/env/lib/python3.5/site-packages/click/core.py”, line 697, in main
rv = self.invoke(ctx)
File “/home/pi/env/lib/python3.5/site-packages/click/core.py”, line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/home/pi/env/lib/python3.5/site-packages/click/core.py”, line 535, in invoke
return callback(*args, **kwargs)
File “/home/pi/env/lib/python3.5/site-packages/google_auth_oauthlib/tool/__main__.py”, line 100, in main
scopes=scope
File “/home/pi/env/lib/python3.5/site-packages/google_auth_oauthlib/flow.py”, line 171, in from_client_secrets_file
with open(client_secrets_file, ‘r’) as json_file:
FileNotFoundError: [Errno 2] No such file or directory: ‘/home/pi/client_secret_~.json’
お手上げ状態です。
ご教授いただければ幸いです。
よろしくおねがいします。
>三浦秀信様
エラー内容からすると、シークレットキーが違うとのことです。
/home/pi/client_secret_~.json
~の部分は個人ごとに異なります。この記事の中の1-(4)を参照してみてください。
英語版は、参考させていただき上手くいきました。
日本語化で上手くいきません。
(env)$ googlesamples-assistant-devicetool register-model –manufacturer my-manufacturer –product-name my-product-name –type device-type –model my-model
の後に
Error: Missing option “–project-id”.
となります。
“–project-id”とは?どこで設定が必要?
よろしくお願いします。
>>tama様
プロジェクトIDは、下記のURLの「Google Assistant APIの準備と認証」の項にある(2)の、Google APIsのProject IDの事だと思います。
https://yuki-no-yabo.com/software-install-for-aiy-voice-kit/
ご自身で設定したものがあるはずですので、-project-idの後に「半角スペースproject id」としてみてください。
ただ、register-modelには-project idオプション不要なはずですので、どこかで設定に誤りがあるかもしれません。
(参考)https://developers.google.com/assistant/sdk/reference/device-registration/device-tool
tamaさん、雪さん、こんにちは。
同様の現象が再現しました。(調べているとこのページに辿り着きました。)
とりあえず、
googlesamples-assistant-devicetool –project-id “ご自分のprojectid” register-model –manu…以下同じ
で、登録はできました。
projectidがわからない場合は、.jsonファイルの、project_id:以降が該当です。
私も先日設定した時はエラー出なかったのですが、今日改めてgoogle-assistant-sdkなどのupgradeをするとこの現象が起こったので、そのせいかも知れません。
googlesamples-assistant-devicetool –helpで説明がでます。
ただ、雪さんの仰るように、–project-idは必須ではないようですが。。よく分かりません。
>>こまつ様
コメントありがとうございます。
Projectidオプションが必須になったんでしょうかね…。
ドキュメントが更新されるのを待った方が良いかもしれませんが、
記事の方に追記するよう致します。
ご連絡ありがとうございました。
はじめまして、voice kit 日本語化を目指しておりますが、下記の事でわからないので教えて下さい。
ラズパイは初心者になります。
Enter the authorization code:と表示まで出来るようになったのですが、認証コード(4/XXXXのような形式)を確認する事が出来ません。認証コードの確認方法を初心者でもわかりやすく教えて下さい。
認証コードがわかれば何となく出来るような感じです。
ゆきちゃんのブログ大変参考になっています。
お忙しい中、教えて下さい。
(env)$ google-oauthlib-tool –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save –headless –client-secrets /home/pi/client_secret_~.json
コマンドラインに次のような表示が出るため、URL部分をコピーし、ブラウザに張り付けます。
Please visit this URL to authorize this application: https://…
ブラウザではGoogle APIsのオーナーになっているgoogleアカウントにログインしてください。
(7)ログインすると、認証コード(4/XXXXのような形式)が表示されます。これをコピーしてコマンドラインの「Enter the authorization code:」のあとにペーストします。
うまくいけば、「credentials saved:」という表記がでます。「InvalidGrantError」と表示された場合はもう1度最初からコピペを試してみてください。
>>らずぱい初心者様
以下のコマンドを打った際に表示されるURLに行けば表示されるはずなのですが、出ていませんか?
(env)$ google-oauthlib-tool –scope https://www.googleapis.com/auth/assistant-sdk-prototype –save –headless –client-secrets /home/pi/client_secret_~.json
以下のhttps://~の箇所です。
Please visit this URL to authorize this application: https://…
返信有り難うございました。
認証コード無事に確認できました。
デバイス登録時にエラーが2つ出ます。何が悪いか教えて下さい。
pi@raspberrypi:~ $ googlesamples-assistant-devicetool register-model –manufacturer “take” –product-name “Original google home” –type SWITCH –model take-001-my-model
Error: Error loading client secret: [Errno 2] No such file or directory: ‘client_secret_481433689228-pvurjvpkga7m0oj0i4aej1t27390ujlp.apps.googleusercontent.com.json’.
Run the device tool with –client-secrets or –project-id option.
Or copy the client_secret_481433689228-pvurjvpkga7m0oj0i4aej1t27390ujlp.apps.googleusercontent.com.json file in the current directory.
以上、宜しくお願い致します。
>>ラズパイ初心者様
こまつさんの対応方法を試してみていただけないでしょうか。
googlesamples-assistant-pushtotalk –project-id my-dev-project –device-model-id my-model –lang ja_jp
このコマンドは現在でも動きますでしょうか?
このコマンドで実行したところエラーが発生してしまうようです。
googlesamples-assistant-pushtotalk –project_id my-dev-project –device_model_id my-model
に変更したところ動くのですが,
–lang ja_jpを加えると動かなくなります。
原因は何かわかりますでしょうか?
>>baba様
こまつさんのコメントにありますように、アップデートで変更が加わっているようです。
こまつさんのやり方を試してみていただけないでしょうか。
ドキュメントの方は変更がないので、ドキュメントの更新もれかソフトウェアバグか・・・
こちら解決しました。
ありがとうございました。
どうやらコメンドに [–lang ja_jp]を付けることができなくなっているようです。前はできていた気がしたんですが、、、
その代わりにアプリでの設定をすることで解決できました。(アプリのみで設定してくれってことですかね、、、)
いろいろ試しましたが、下記のエラーが消えません。
詳しいやり方を教えて下さい。具体的にわかる様にお願いをします。
Error: Missing option “–project-id”.
現在voicekit v1になっていますが、発売当初に購入したkitにプログラムを入れても問題なしですか?
もし、問題があるならどのバージョンを入れれば良いか教えてください。
サンプルのproject-idの指定個所がおかしいようです。
エラーメッセージにあります通り、コマンドの前に project-id を持ってくると大丈夫そうです。
Usage: googlesamples-assistant-devicetool [OPTIONS] COMMAND [ARGS]…
$ googlesamples-assistant-devicetool \
> –project-id “my-project-id” \
> register-model \
> –manufacturer “my-manufacturer” \
> –product-name “my product-name” \
> –type SWITCH \
> –model “my-model”
>通りすがり様
ご指摘ありがとうございました!
初めまして、認証ツールが実行できて、
Enter the authorization code:
と出たので、その上にあるURLをWebに張り付けると、URLの最後にError400(OAUTH2Error)!!1
と出てしまい、エンターを押しても認証に失敗してしまいます。
何かわかることがあれば教えて下さい。宜しくお願い致します。
>ジン様
コメントありがとうございます。
英語で原因が示されていませんか?エラーログの前後にあるのではないかと思うのですが…
返信ありがとうございました。何度か試したところ、アクセス出来ました。
そして、4から始まるパスワードを張り付けて、そのあとに、任意の名前を入力すると、successfully registeredと出ましたので、行けるかと思ったのですが、
googlesamples-assistant-pushtotalk –project-id clever-reserve-206702 –device-model-id ai-speaker-R
と入力すると、たくさん文字が出てきて、最後に
raise PortAudioError(‘Error querying device {0}’.format(device))
sounddevice.PortAudioError: Error querying device -1
と出てきて、これから全く進めません。どうしたらよいのでしょうか?
もし分かることがあれば教えてください。宜しくお願いいたします。
>ジン様
おそらく実行に成功していると思います。
入力した後にすぐに話しかけないとエラーを吐く仕組みになっていたかと…
今手元に開発キットがないので、少し時間を頂ければ見てみます。
雪さんこんばんわ。
先日voice kitを購入したばかりで、設定が解らず悩んでいた所、雪さんのページにたどり着きました
仰るように設定した所、私は無事に作動しています。ありがとうございます。
既出でしたら申し訳ありませんが、少し前に234さんが書いていた
ホットワード(ウェイクワード?)での会話が私も出来ました。
恐らく、スマホのグーグルアシスタントで設定の項目内「デバイス」部分に
「voice kit」と「–product-nameで付けた名前」のデバイスがで表示されており
それぞれのデバイスを開くと 「アシスタントの言語」が選べる所があるので、そこを「日本語」に設定したからなのかな?と思います。
設定後、
src/examples/voice/assistant_library_demo.py
のプログラムで、OKグーグルのホットワードに続いて日本語で話しかけたら、日本語で答えてくれるようになりました
この方法だとリターンキー不要です。
(うっすらとランプが点灯するタイミングで「OKグーグル」と話しかけるとランプが明るく点灯するので、続いて「現在の天気は?」と質問すると「現在のXX市の気温は27度曇りです。明日は〜」と答えてくれます)
>xak様
コメントありがとうございます!記事がお役に立てたようで何よりです。
また、情報提供もありがとうございます。週末早速試して記事に追加するようにします!
ラズパイにGoogleアシスタントを載せる過程で、つまづいていたところこのサイトに出会いました。
ここで質問なんですが、『googlesamples-assistant-pushtotalk –project-id my-dev-project –device-model-id my-model –lang ja_jp』を入れたところ、Invalid sample rate(無効なサンプルレート)とのことでエラーになります。
『–lang ja_jp』を抜いても同様になるのですが、どうすればよいのでしょうか。。。
こんにちは。
googlesamples-assistant-pushtotalkは無事に動き始めたのですが、次にLEDを点ける手順で躓きました。
こちらの記事で紹介のAIYキットではないのですが、Google Assistantのチュートリアルの手順に沿ってRPi 3Bにセットアップし、googlesamples-assistant-pushtotalkを無事に実行できました。参照したページは次です。
https://developers.google.com/assistant/sdk/guides/service/python
続いてActions ConsoleでtraitsにOnOffを追加設定し、同様にgooglesamples-assistant-pushtotalkを動かしたところ、「今夜の天気は?」には期待通りに返事してくれますが、「電気を点けて」と話しかけると「 にアクセスできません。もう一度設定してください。」と返ってきてしまいます。
ゆきさんはLED点灯サンプルは問題なく動作していますか? 何かヒントがあればご教示ください。
>>pacificblueさま
コメント遅くなり申し訳ございません。
おそらくですが、「電気をつけて」はスマートホームの機能のため、
スマートリモコンの設定が必要なのではないかと思います。
ご自身のアカウントでGoogle Assistantの設定を行うと良いのではないでしょうか。