1
/
5

Google Homeにプレゼンさせてみた。

こんにちは。楽楽精算開発チームの岡本です。

会社で購入したGoogleHomeで自由に遊べる権利を頂いたので、色々と遊ばせてもらいました。
先日その内容を社内でプレゼンする機会があったのですが、せっかくなのでGoogleHome自身にプレゼンしてもらいました。

今回は、その際に実施した設定を説明しようと思います。
※設定方法についてはwest-cさんが既に書かれているので、設定した内容だけ書いていきます。

今回やりたいこと

  1. スマートフォンでプレゼン開始を指示する。
  2. ディスプレイにスライドが表示される。
  3. GoogleHomeがスライドの内容を喋り始める。
  4. スライドの内容を喋り終えると、次のスライドに切り替わる。
  5. スライドが終了するまで2~4を繰り返す。

準備するもの

Wan側

  • Action on Google
  • Dialogflow
    • 自然言語の解析エンジンです。受取った音声データを解析してテキストに変換してくれます。
    • また、Firebaseホスティングを用いたスクリプト実行も可能なので、変換したテキストを他のWebサービスに連携させたりもできます。
  • Firebase
    • いわゆるBaasです。
    • 今回はホスティング機能とDB機能を使用します。

Lan側

  • RaspberryPi
    • 超小型のコンピューターです。
    • 今回は以下の機能を実装しています。
      • ディスプレイへのスライド切替え通知
      • GoogleHomeへのメッセージ通知
  • GoogleHome

ざっくりとした処理の流れ


  1. スマートフォンGoogleアシスタントからAction on Googleで構築したチャットアプリ
    を呼び出す。
  2. チャットアプリ
    で入力した音声データをDialogflowに連携する。
  3. Dialogflowの解析結果テキストをFirebaseのDBに保存する。
  4. 保存したテキストをRaspberryPiに通知する。
    (通知されたテキストがプレゼン開始キーワードの場合は、プレゼンを開始する。)
  5. スライドの表示/切り替えをディスプレイに通知する。
  6. 喋らせるメッセージをGoogleHomeに通知する。


Action on Googleの設定

Action on Googleで新規プロジェクトを作成しAction
App information
を設定します。

Action

ADD ACTIONS
からDialogflowを選択します。


App information

重要なのはAssistant app name
の項目だけです。
Assistant app name
で設定した名前でGoogleアシスタントチャットアプリ
を呼び出すことになります。
今回は「発表アプリ」にしたので、スマホに「OK Google 発表アプリにつないで」と話しかけるとチャットアプリが起動します。
それ以外の項目については適当に設定してしまって問題ないです。


以上でAction on Googleの設定は完了です。

Dialogflowの設定

Action on GoogleAction
設定から、Dialogflow画面に遷移できるので、新規プロジェクトを作成しIntents
Fulfillment
を設定します。

Intentsの設定

チャットアプリで入力した音声データに対して、どのように振舞うのかを設定します。今回は以下の2つを設定します。


  • Default Welcome Intent
    チャットアプリ
    が起動した時の振舞いを設定します。
    今回は、アプリ起動時にチャットアプリ
    が「発表アプリを起動しました。」と応答するようにText response
    を設定しました。


  • プレゼン開始
    チャットアプリ
    にプレゼン開始を指示した時の振舞いを設定します。今回は以下のような振舞いを想定しています。
  • 「プレゼン開始」の音声入力でsaveData
    というアクションが実行されるように設定します。
    saveDataの内容についてはFulfillmentで設定します。


アクション実行後、チャットアプリ
が「プレゼンを開始しました。」と応答するように設定します。


Fulfillmentの設定

Inline EditorENABLEDに変更し、index.jspackage.jsonを以下のように設定します。

/** index.js **/

'use strict';

const firebase = require("firebase");
const functions = require("firebase-functions");
const DialogflowApp = require("actions-on-google").DialogflowApp;

// Firebaseへの接続情報
var config = {
apiKey: "XXXXXXXXXXXXXXXXXXXXXX",
authDomain: "XXXXXXXXXXXXXXXXXXXXXX",
databaseURL: "XXXXXXXXXXXXXXXXXXXXXX",
projectId: "XXXXXXXXXXXXXXXXXXXXXX",
storageBucket: "XXXXXXXXXXXXXXXXXXXXXX",
messagingSenderId: "XXXXXXXXXXXXXXXXXXXXXX"
};
firebase.initializeApp(config);

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
var app = new DialogflowApp({request, response});
let actionMap = new Map();
// saveDataアクションを登録
actionMap.set("saveData", function(app) {
// Firebaseにキーワードを保存する
firebase.database().ref("/googlehome").set({word:"プレゼンを開始します"});
});
app.handleRequest(actionMap);
});

Firebaseへの接続情報Firebaseの画面でウェブアプリに Firebase を追加をクリックして表示されるコードを使用します。

/** package.json **/
{
"name": "dialogflowFirebaseFulfillment",
"description": "This is the default fulfillment for a Dialogflow agents using Cloud Functions for Firebase",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "~6.0"
},
"scripts": {
"start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
"deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
},
"dependencies": {
"actions-on-google": "^1.5.x",
"firebase": "^4.8.0",
"firebase-admin": "^4.2.1",
"firebase-functions": "^0.5.7",
"apiai": "^4.0.3"
}
}

設定後、DEPLOYをクリックしFirebaseスクリプトをデプロイします。

以上でDialogflowの設定は完了です。

Firebaseの設定

FirebaseDatabaseにデータ保存場所とアクセスルールを設定します。

データ保存場所の設定

Database> データから保存場所を作成します。今回は/googlehome/wordに作成します。


作成した保存場所には、PUTでデータを保存出来ます。

保存したデータはGETで取得できます。

アクセススールの設定

Database> ルールからDBへのアクセスルールを設定します。
今回は設定簡易化のため/googlehome配下のデータには認証無しでアクセスできるように設定しています。

以上でFirebaseの設定は完了です。

RaspberryPiの設定

以下の内容をスクリプト化し、RaspberryPiのNode.js上で実行します。

  • GoogleHomeへのメッセージ通知
  • ディスプレイへのスライド表示通知
  • FirebaseのDB更新通知の受信

※RaspberryPiに初期インストールされているNode.jsはバージョンが古いので、最新の安定バージョンに更新する必要があります。

GoogleHomeへのメッセージ通知

GoogleHome任意のメッセージをプッシュするNode.js用ライブラリが公開されているので、ありがたく使わせていただきます。
google-home-notifier

  • ライブラリのインストール
  • 動作確認

ディスプレイへのスライド表示通知

スライドの表示にはfbiというコマンドを使います。

  • コマンドのインストール

・動作確認

※コンソール出力の場合は、{出力場所}に/dev/fb0
を、HDMI出力の場合は/dev/fb1
を設定します。

FirebaseのDB更新通知の受信

Firebaseのドキュメントを元に設定します。

  • ライブラリのインストール

index.js作成

実行ファイルとしてindex.jsを作成します。


ファイルが作成できたら、実行します。

fbi
コマンドの実行時にroot権限が必要なのでsudo
付きで実行します。

以上でRaspberryPiの設定は完了です。

実際にやってみる

設定完了後、スマホに対して「発表アプリにつないで」「プレゼン開始」と指示すると、index.jsに書かれた内容でGoogleHomeがプレゼンをしてくれます。

長いので冒頭部分だけですが、実際にこんな感じでGoogleHomeにプレゼンしてもらいました。

https://youtu.be/lrVNHXj6wGs

株式会社ラクスでは一緒に働く仲間を募集しています
同じタグの記事
今週のランキング