①各機能とDialogflowを整備したうえでの見直し
各機能を作成し、その機能を呼び出すためのDialogflowの設定が完了したので、その対応内容に応じで処理フローの見直しを行います。
ポイントとしては以下の通りです。
①処理が1回で完結するものと、完結しないものが存在するのでフローを分離
➁ロボットとしての動作として音声ではなく、動作につながるフローの追加
➂定型の問い合わせでないものは、一旦Dialogflowのレスポンスをそのまま返して特に処理としては何もしないように分岐を修正

①各機能とDialogflowを整備したうえでの見直し
各機能を作成し、その機能を呼び出すためのDialogflowの設定が完了したので、その対応内容に応じで処理フローの見直しを行います。
ポイントとしては以下の通りです。
①処理が1回で完結するものと、完結しないものが存在するのでフローを分離
➁ロボットとしての動作として音声ではなく、動作につながるフローの追加
➂定型の問い合わせでないものは、一旦Dialogflowのレスポンスをそのまま返して特に処理としては何もしないように分岐を修正

①Dialgflowの利用用途について
ユーザーからの問いかけに対して正確に動作するためには、ユーザーからの問いかけのフレーズがどの動作をリクエストしているのかを正確に把握する必要があります。しかし、実際には同じ意図であっても微妙にフレーズは異なります。この微妙なずれをDialogflowで吸収し、正確動作可能とします。
今回、Dialogflowに設定するIntents、Entity等の詳細について下記の表をもとに設定していきます。

設定の手順としては以下の手順にて設定します。(※AgentはDialogflowの章で作成したものを利用します。)
1)Entityの設定
ボキャブラリの設定と考えましょう
2)Intentの設定(その1)
リクエストのバリエーションを設定します。
3)Intentの設定(その2)
リクエストのバリエーションで少し複雑なものを設定します。
1)Entityの設定
まず、2つのEntitiesを登録します。
| Entities | 内容 |
| area | 天気予報の場所を判断するキーワード(ex 青森県、岩手県等) |
| action_self | ロボットの動作に係るキーワード(ex 前進、右、左) |
Entitiesの登録方法としてはメニューから「Entities」を選択し、右上の「CREATE ENTITY」ボタンをクリックします。

Entityの画面が起動したら、一番上にEntityの名前を入力し、中段のEntityのデータを入力する欄に順番にEntityのデータを入力していきます。

本来のデータを左の「Enter refernce value」の欄に入力し、「Enter synonym」にその内容に類似した内容(同様の内容で、異なる表現)を入力していきます。入力するデータとして5.2.7.3の天気情報の章で作成した地域のファイル(yahoo_arealist.txt)のデータの数だけ入力します。
保存する場合には右上の「SAVE」ボタンで保存してください。
同様な形で「action_self」についても「終了」「前進」「右」「左」「後退」をreference valueとして登録し、synonymも合わせて順番に登録しておきます。
2)Intentsの設定(その1)
次に、実際のユーザーからの問いかけのフレーズを登録します。登録するフレーズ(Intent)としては以下の通りです。
| Intent | action and parameters | 内容 |
| Action_News | news | ニュースの問い合わせ |
| Action_Self | action_self | ロボットの動作の命令 |
| Action_Translate | translate | 翻訳の依頼 |
| Action_Weather | weather | 天気予報の問い合わせ |
| Hello | 「こんにちは」などの挨拶フレーズ(前回作成済) | |
| Who? | 「誰?」「名前は?」などのフレーズ(前回作成済) |
※HelloとWho?はDialogflowの5.2.5.1の章にて行っています。
メニューから「Intents」を選択し、右上の「CREATE INTENT」をクリックします。

具体的なIntentの登録は、Entityと同様に上段に、Intentの名前を入力し、中段のデータ入力の欄に順番の「Training phrases」の欄に類似した問い合わせのフレーズ、「Action and parameters」の欄に問い合わせフレーズを識別するためのデータを入力します。Action_Newsはparametersの設定はありませんが、Actionの設定が必要です。Actionの値でプログラム上でどのプログラムを実行すればよいか判断します。
「Responses」の欄にそれぞれの返答フレーズを入力します。「Action_News」「Action_Translate」については挨拶の登録と同様に単純に入力してください。

3)Intentの設定(その2)
「Action_self」を登録します。
Intentの登録の際に一部のデータをパラメータ化します。
「Training Phrases」の欄に「終了です。」と入力します。登録されるとフレーズの「終了」の部分がハイライトされ、下段に設定されたパラメータが表示されます。これは、Entityとして登録したaction_selfのリストに「終了」という単語が登録されていることから自動的にフレーズの一部がパラメータ化されます。設定されたパラメータが複数ある場合には、複数表示されます。

パラメータの設定が不要な場合には、「×」ボタンをクリックして削除します。今回はそのままにします。このパラメータ化によって、本来であれば、動作のバリエーションとして「前進です。」「後退です。」「右です。」「左です。」のような指示内容は異なるのですが、ロボットの動作として同一のものをこの1つの登録で表現することができます。また、それぞれのEntityには類似語も登録されていることから実質的にはこの1つの登録で×「Entity」数×「類似語」数の登録を行ったことと同じとなります。これによりフレーズの登録の効率化を実現することが可能です。これに準じで「終了してください。」「終了。」等のフレーズを登録することで相当量のフレーズを効率よく登録できます。また、Actionの設定を行ってください。プログラム上でActionの値を確認し、どのプログラムを実行すればよいか識別します。

次に、パラメータを設定した際の「Responses」を設定します。基本的にはリクエストされたことを復唱するようなレスポンスが望ましいのですが、問いかけのフレーズにパラメータが入っていることから、レスポンスにもパラメータを含めておく必要があります。その際には「わかりました。$action_selfします。」と登録することにより、問いかけられたフレーズのパラメータを受けて返答することが可能です。

テストしてみます。

「Action_weather」についても同様に「area」(地域)をパラメータとして、Actionにweatherを設定します。「Responses」についても同様にパラメータを意識して「$areaの天気をお知らせします。」と登録してください。


「Action_weather」についてはこれに加えて、もう少し工夫をします。それは地域が指定されなかった場合に、Dialogflowが地域を聞きなおしてくれる機能も合わせて設定します。
フレーズの一部をパラメータとして設定すると「Action and parameters」の欄にそのパラメータの設定が反映されます。この欄で左側の「REQUIRED」のチェックボックスにチェックします。そうすると「PROMPTS」欄に「Define prompts・・・」と表示されます。

「Define prompts・・・」をクリックすると「Prompts for “area”」の画面が表示されるので、「PROMPTS」の欄に「どちらの天気がお知りになりたいですか?」と入力して「Close」ボタンをクリックします。

この後、「Traning Phrases」に、単に「天気は?」と入力します。このように地域の情報がない状態でリクエストされる場合も想定したフレーズを登録しておきます。この状態で、テストをしてみましょう。保存したあとに「天気は?」と問いかけしてください。

その後、地域情報として「青森県」と答えると

と返答してくれることになります。
※Intents、Entityの設定方法についての説明は以上となります。上段の表を参考にその他の問い合わせフレーズやエンティティのバリエーションをについて登録を行ってください。
必ず設定後は、想定したレスポンスが返ってくるかをコンソールで確認するようにしてください。
①音声合成のライブラリーについて
音声合成のライブラリーはいろいろと提供されています。大きくはクライアントライブラリーとして提供されているもの、サーバーを利用したサービスとして利用されているものさまざまです。
クライアントのライブラリーだけでもいくつか代表的なものが提供されていますが、残念ながら日本語対応しているものは多くありません。日本語対応しているものとしては前回(5.2.6.1.)でご紹介したものが代表的なものとなります。一方、外国語についてはいくつか選択肢があります。今回はその中で「eSpeak」をご紹介し、英語の発声に対応します。
➁ライブラリのインストール
sudo apt-get install espeak
➂音声データのリストを確認して利用する音声データを確定します。
espeak –voices(ハイフンは2つです。)
今回は「english」を利用することにします。

④プログラムを作成します。[TextToSpeech_eSpeak.py]

※英語で「This is a pen.」と聞こえたらOKです。
PowerPointには元々用意されているテンプレートもありますが、自分でテンプレートを作成することもできます。
【フォントの設定】
①表示タブからスライドマスターを選択します。

②スライドマスタータブのフォントを選択します。

➡下図は、HGP創英角ポップ体を選択しました。

この操作でテンプレート全体のフォントが変更されます。
【画像の設定】
今度は、タイトル部分に画像を設定してみましょう。
現在選択されているスライドは全体の編集になっているので、3つ目のスライドを選択しましょう。
①挿入タブから画像を選択します。

②フォルダから好きな画像を選択します。

③タイトルの上に画像を配置します。

④このままだと文字が隠れてしまっているので、画像を選択し、右クリックメニューから最背面へ移動を選択します。

⑤タイトルと画像の位置を調整してください。

画像の挿入が出来ました。
【背景の設定】
背景を設定することも簡単にできます。
テンプレートに背景を設定してみましょう。
①ホームタブから正方形/長方形のオブジェクトを選択します。

②スライド全体を覆うように正方形/長方形のオブジェクトを設置します。

③オブジェクトが設置できたら、右クリックメニューから最背面へ移動を選択します。

④描画ツールの書式タブから図形の塗りつぶしを選択し、設定したい背景色を選択してください。

これで背景色の設定が出来ました。
フォント、画像、背景を設定し、テンプレートが完成に近づいてきました。
後は、好きなように文字の位置や、フォントサイズ、フォントカラー等を設定してください。設定ができましたら、テンプレートの適用と保存をします。
【テンプレートの適用】
①スライドマスタータブのマスター表示を閉じるを選択します。

②表示されているスライドに作成したテンプレートが適用されます。
【テンプレートの保存】
①デザインタブからテーマを選択する部分を拡大します。

②「現在のテーマを保存」を選択します。

これでテンプレートの保存ができました。
作成したテンプレートを使用してスライドを作成すると下図のようになります。

これで作成したテンプレートをいつでも使えるようになりました。
スライドに表を作る時、どのようにしていますか。
Excelで作成した表をコピーして貼り付けしていませんか??
実はそんな事をしなくともとても簡単に表を作成する方法があります。
【Excelシートの挿入】
まずは挿入タブから表の▼をクリックしてみてください。

下記をクリックするとPowerPointの表示がExcelモードに切り替わります。

また、スライドにExcelのセルが貼り付けされます。

ドラッグするとセルの数が増えます。

【Excelシートの操作】
操作は簡単です。Excelと同じように操作をするだけです。
罫線を引いたり、関数なども使う事ができます。
Excelの機能がPowerPoint内で使う事が出来るのです。
Excelの機能を解除したい時はセル以外の所でダブルクリックしてみてください。
表示がPowerPointに戻り、表ができている事が確認できます。
再度編集をしたい時はセル内でダブルクリックするとExcelモードに切り替わります。
※Wordでも同じ事が出来ます。


[処理フロー]

・クラスBrainActionの処理のアウトラインを作成する。
BrainActionは録音された音声データをインプットデータとして動きます。その後➁~⑩までの処理を行うことになります。
1)処理の骨子を整理して、プログラムのアウトラインの作成

①一定の音量の声を録音するプログラムの作成[NagoRobo_Main.py]
・この処理は、マイクから音を拾い、一定音量以上となったら5秒間録音するプログラムを作成します。5秒間録音したら、後続処理に進み、その後処理が完了したら、再度マイクから音を拾うという状態に戻るプログラムです。


・録音した音声データをもとにアクションするクラスの作成[BrainAction.py]
大きな処理の動きとして、常に音をモニタリングし、音声が録音できた場合にアクションします。このアクションの処理を集約したクラスを作成します。まずはとりあえず外枠だけ作成しておきます。

1)日本語から英語への翻訳機能を作成します。
Google Cloud Translation APIを利用して翻訳機能を作成します。様々な言語への翻訳が可能ですが、今回はとりあえず日本→英語の翻訳を用意します。
2)Google Cloud Translation APIを利用できるように設定します。
「5.2.4.1.Googleのライブラリ(Cloud Speech)の利用準備」で設定した方法と同様にライブラリーの有効化処理を行ってください。

2)必要なライブラリーをインストールします。
sudo pip3 install –upgrade google-cloud-translate
※upgradeの前のハイフンは2つです。
3)プログラムの作成 [Translate_Google.py]

Helloと表示されればOKです。
1)天気の情報の取得
基本的にはニュースの取得と同様ですが、地域を指定して情報を取得できるようにします。
2)Yahooの天気の情報を取得します。
情報を取得する際にURLにエリアコードが必要となることから、エリアコードのリストを作成します。メモ帳にて以下のようにリストを作成します。
ファイル名 yahoo_arealist.txt

※保存の際に、「UTF-8」の形式で保存してください。
3)プログラムの作成[GetWeather.py]

・北海道の天気が取得できたらOKです。
1)ニュースの見出し
インターネットにはいろいろなニュースサイトがあります。そのいずれかのニュースサイトから、その時のニュースの見出しを取得する機能を作成します。
2)ライブラリーのインストール
sudo pip3 install feedparser
3)プログラムの作成[GetNews.py]

これを実行してNHKのニュースが表示されればOKです。
※今後、いろいろなデータ取得は検討します。