Ubuntu LinuxにGoogleアシスタント(音声アシスタント)をインストールした時のメモ
日経Linux 2019年3月号「クラウドと連携するアプリ! PCを 「AIスピーカー」 に仕立てる」を参考にした。
Actions on Googleのセットアップ
Actions on Google (https://developers.google.com/actions/) にアクセスし、新規デバイスの登録を行う
トップページより、 GO TO ACTIONS CONSOLE に入る
Add/import project を選択する
(既にセットアップが終わっている場合は、ここに表示されるデバイス一覧より、設定したいデバイスを選ぶ)
プロジェクトを作成する。
ここではドロップダウンリストより既存のプロジェクトを選ぶこともできるし、新規プロジェクト名を入力することで新規に作成することもできる
なお、言語・地域を選ぶのをお忘れなく
デバイスの追加 (Device registration)を選択する
プロダクト名、製造者名を入力し、装置の種類( = Speaker )を選択する
プロダクト名は、この後のコマンドラインでの操作で使うため、入力しやすい文字列としておいたほうが良い
デバイスの追加が完了すれば、OAuthの秘密鍵が含まれたjsonファイルがダウンロードできる。ここでダウンロードし忘れても、Actions Console からいつでもダウンロードできる
トライアル機能の選択は SKIP を押して構わない
Actions on Googleの管理
メニュー表示より、Device registration を選択すれば、登録されたデバイス一覧が表示される。この一覧より、OAuthの秘密鍵(json)ダウンロードができる。このファイルには client_id や project_id の値も保存されているので、のちほどコマンドラインでの作業でこれらの値を使うことになる。
Google API コンソールでGoogle Assistant APIを追加
Google API コンソール (https://console.developers.google.com/)を開く
プロジェクト名をクリックして、プロジェクト選択画面を出す
おそらく、「すべてのプロジェクト」を選択しないと、さきほどActions on Googleでデバイス登録した時のプロジェクト名が出てこないはず…
ここでデバイス登録した時のプロジェクトを選択する
API一覧に「Google Assistant API」が登録されていれば、新規登録は不要。登録されていない場合、画面最上部の 「APIサービスを有効化」 で新規登録する
「有効にする」をクリックすると、プロジェクトでAPIが使えるようになる
引き続き、認証情報を設定する
Google API コンソールで認証情報の設定
Google API コンソール (https://console.developers.google.com/) を開いたまま、引き続き設定を続ける
メニューより、APIとサービス → 認証情報 を開く
画面に「OAuth同意画面を設定してください」のリンクがあるので、OAuth同意画面を設定する。 メールアドレスをドロップダウンリストから選択して、その他は既に設定されている値のまま、「保存」ボタンを押す。
コマンドラインより使うのは、タイプが「その他」のもの。 OAuthクライアントIDのIDを選択し開いた画面にproject id が表示されている。この値も、のちほどコマンドラインで使うことになる。
Ubuntu : 必要なパッケージのインストール
Pythonコードのコンパイルで必要になる一連のパッケージを、apt-get
やSynapticでインストールする
・ python3-dev
・ python3-venv
・ portaudio19-dev
・ libffi-dev
・ libssl-dev
・ libmpg123-dev
Python仮想環境のインストール
$ python3 -m venv env $ env/bin/python -m pip install --upgrade pip setuptools wheel
仮想環境をインストールするディレクトリを「env」としている
Google Assistantをインストールする
Python仮想環境に入るコマンドは
$ python3 -m venv env
仮想環境下で、Google Assistantをインストールする
(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]
セットアップが完了したら、認証を行う。コマンドラインにOAuth Web認証のURL(下例の茶色で着色部)が表示されるので、コピーしてブラウザで開き、認証コードをコマンドラインに戻す(下例の青色で着色部)
(env) $ google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --scope https://www.googleapis.com/auth/gcm --save --headless --client-secrets /home/vm/client_secret*.json Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=131566995753-stOqlee756612oi2h4827m7519ptsvm9.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fassistant-sdk-prototype+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgcm&state=xxxxxxxxxxxxxxxxxxxxxxxx&prompt=consent&access_type=offline Enter the authorization code: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx credentials saved: /home/user/.config/google-oauthlib-tool/credentials.json
初回の認証が行われると、次回からは/home/user/.config/google-oauthlib-tool/credentials.json
に保存された認証データが用いられるので、次回からこの認証操作は不必要。
Google Assistantを使う
緑で着色した project_id と、青で着色した device_model_id を、それぞれのインストール環境に合わせて、次のようにコマンドを実行する
(env) $ googlesamples-assistant-hotword --project_id test-002-ad837-test-002-product-2zwh6c --device_model_id test-002-ad837-test-002-product-2zwh6c device_model_id: test-002-ad837-test-002-product-2zwh6c device_id: 67866B81C1DB3C97E13FE9F471E7B411 Registering...Done. ON_MUTED_CHANGED: {"is_muted": false} ON_START_FINISHED ON_MEDIA_STATE_IDLE ← 音声コマンド入力待ち
話しかけて回答を得る例は…
ON_CONVERSATION_TURN_STARTED ON_END_OF_UTTERANCE ON_RECOGNIZING_SPEECH_FINISHED: {"text": "武漢には 李白の詩 などで有名な 黄鶴楼があるを中国語に翻訳"} ON_RENDER_RESPONSE: {"text": "武汉有着名的李白黄鹤楼", "type": 0} ON_RESPONDING_STARTED: {"is_error_response": false} ON_RESPONDING_FINISHED ON_CONVERSATION_TURN_FINISHED: {"with_follow_on_turn": false}
タイマーの実行と、タイマーのブザー停止は…
ON_CONVERSATION_TURN_STARTED ON_END_OF_UTTERANCE ON_RECOGNIZING_SPEECH_FINISHED: {"text": "タイマー 5分"} ON_RESPONDING_STARTED: {"is_error_response": false} ON_RENDER_RESPONSE: {"text": "5分ですね。 スタート。", "type": 0} ON_RESPONDING_FINISHED ON_CONVERSATION_TURN_FINISHED: {"with_follow_on_turn": false} ON_ALERT_STARTED: {"alert_type": 1} ON_ALERT_FINISHED: {"alert_type": 1} ON_CONVERSATION_TURN_STARTED ON_END_OF_UTTERANCE ON_RECOGNIZING_SPEECH_FINISHED: {"text": "ストップ"} ON_NO_RESPONSE ON_CONVERSATION_TURN_FINISHED: {"with_follow_on_turn": false}
制限
音楽(radikoなど)は再生不可能
ON_MEDIA_STATE_IDLE ON_CONVERSATION_TURN_STARTED ON_END_OF_UTTERANCE ON_RECOGNIZING_SPEECH_FINISHED: {"text": "NHK FM を再生"} ON_RESPONDING_STARTED: {"is_error_response": false} ON_RESPONDING_FINISHED ON_RENDER_RESPONSE: {"text": "この端末では再生できません。他のデバイスを指定してください。", "type": 0} ON_CONVERSATION_TURN_FINISHED: {"with_follow_on_turn": false}