先日Google Assistant SDKを利用してRaspberry Piを利用して音声認識エンジンを利用することが出来たのですが、もう少し細かく自分の意図した音声コマンドを認識させてみたいと思いました。
Google Assistantでは「Actions on Google」というツールを使い音声コマンドを利用した会話アプリの制作が行えるようです。早速試してみました。
Raspberry Pi Actions on Google - YouTube
環境(RaspberryPi)
- Raspberry Pi3 (RASPBIAN JESSIE WITH PIXEL 4.4 / Python 3.4.2)
- LOGICOOL ウェブカム HD画質 120万画素 C270
- Amazonベーシック USB A100 マルチメディアスピーカー
- 7インチ(1024*600) IPS液晶パネル ディスプレイ
- 秋葉原で買った500円位のプッシュボタン
環境(Ubuntu16.04)
- node.js 6.9.1
Actions on Google
リニューアルして使いやすくなっていました。トップページには「30分でアプリが作れるよ!」みたいに書いてあります。今回はこちらのチュートリアルに沿って試してみたいと思います。
サンプルプログラムで会話形式のアクションがあるので、こちらを試してみました。
actions-on-google/apiai-facts-about-google-nodejs - GitHub
このレポジトリをクローンしてきます。
続いてGoogleアカウントの「ウェブとアプリのアクティビティ」「端末情報」「音声アクティビティ」を有効にします。
Actions on Google Developer Console.
「Actions on Google」の開発者コンソールでアプリの設定をします。GoogleCloudPlatformのプロジェクトIDが必要になりますので、事前にID登録は済ませ、課金を有効にします。(発生する料金は各自ご確認下さい)
今回はAPI.aiを利用します。
「CREATE ACTION ON API.ai」よりGCPのプロジェクトIDと紐付いたエージェントが自動的に作成されます。
API.ai
昨年Googleに買収されたBot作成のライブラリです。GUIを利用して会話を組み立てることが出来ます。
作成したエージェントの会話パターンはzipファイルに読み込み・書き出しが行えます。今回は上述のサンプルより会話パターンのzipファイルを読み込んでみます。
ちょっと分かりづらいのですが、エージェント設定画面の「Export and Inport」タブからzipファイルに読み込み・書き出しが行えます。今回はサンプルプログラムの「FactsAboutGoogle.zip」を読み込みます。
読み込みが終わると会話パターンが自動的に反映されます。
API.aiの最大のポイントは入力した様々なキーワードの選択をして、webhookのエンドポイントに手軽にリクエストを送れることです。
Botのキーワード取得のためだけにAPIサーバーを立てる必要がありません。
Google Assistantの音声認識して得られたテキストをAPI.aiに送付し、キーワードに対するアクションをwebhookのエンドポイントに送付することが出来るという仕組みです。
Webhookのエンドポイントに送られたjsonデータを元に、Google Cloud Functionsを起動させ、Google Assistantに返事をさせます。
デプロイ
Deploy Fulfillment - Actions on Google
チュートリアルでは、ローカル環境にを利用する方法と、GoogleCloudPlatformを利用する方法の2種類紹介されています。
今回はGCPにデプロイしてみます。必要なツールや有効化するライブラリがいくつかありますので簡単にまとめてみます。
Google Cloud SDK
上記アドレスよりOSに合わせてSDKをダウンロードします。ここではUbuntu16.04用のものをインストールしました。sudo apt-get install
で入れられます。(Mac環境だとインストールにPython2系が必要になり、少し面倒です)
パスがきちんと通ればsudo gcloud init
でGCPのアカウントや使用するプロジェクト、リージョンなどの設定が可能になります。
Actions on Googleを利用するにあたり以下のGCPアプリケーションが必要になります。
音声認識する毎にnode.jsを実行させるためにGoogle Cloud Functionsというサーバレスアーキテクチャが必要になります。
また、そのデータを保管するためにのCloud Storageバケットが必要になります。
Google Cloud Functions
GCPの管理画面から使用するプロジェクトでGoogle Cloud FunctionsAPIを有効にします。
Cloud Storageバケット
同じくGCPの管理画面から使用するプロジェクトでバゲットの作成をします。
Google Cloud SDKからデプロイ
チュートリアルにあるようにgcloud
コマンドを使いデプロイします。
$ sudo gcloud init
デプロイしたいnode.jsのファンクションネームを調べます(ここではfactsAboutGoogle
)。もうひとつ、先ほど作成したバゲットの名前を使います。
$ cd apiai-facts-about-google-nodejs
$ sudo gcloud beta functions deploy factsAboutGoogle --trigger-http --stage-bucket <storage_bucket_name>
デプロイ出来ました。デプロイしたアドレスをAPI.aiのWebhookに指定します。
Raspberry PiでGoogle Assistantを使う
こちらの記事
Raspberry Pi にGoogle Assistant SDKを搭載して「OK Google」してみる。 - Qiita
をご参照下さい。ただ、SDKが0.0.2にバージョンアップしており、記事中のインストールでは実行できません。
Download the Library and Run the Sample - Google Assistant SDK
こちらにあるアドレスからインストールして下さい。
$ python3 -m pip install --upgrade https://github.com/googlesamples/assistant-sdk-python/releases/download/0.3.0/google_assistant_library-0.0.2-py2.py3-none-linux_armv7l.whl
さて、もう少しです。
冒頭で設定したActions on Googleのアプリ設定画面の必要事項を記入して(呼びかけのホットワード設定やアプリアイコンなど)完成させます。
さて、30分で完成出来たでしょうか?
まとめ
嬉しいことに先日のGoogleの開発者会議でGoogle Assistantの日本語対応が発表されました。
対話型音声入力Googleアシスタントが日本語対応へ。スマートスピーカーGoogle Homeも今夏国内発売 - Engadget 日本版
管理画面にもこっそりJapaneseの文字が...。
楽しみですね。