Pepperハンズオン ～基本編A 対話基礎～ Dialogを使ってPepperと対話してみる [Tech-Circle#7]


本記事は [Tech-Circle#7 Pepper ハンズオン](http://techcircle.connpass.com/event/16275/) のハンズオン ～基本編A～ の内容です。

---

**Dialogを使ってPepperと対話してみる**（所要時間目安: 15分）

* [① (復習) Speech Reco. + SayでPepperと対話してみる](http://qiita.com/shiraco/private/182a95873cd6f5274d9b#-%E5%BE%A9%E7%BF%92-speech-reco--say%E3%81%A7pepper%E3%81%A8%E5%AF%BE%E8%A9%B1%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)
* [② Dialogを使ってPepperからの質問に答えてみよう](http://qiita.com/shiraco/private/182a95873cd6f5274d9b#-dialog%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6pepper%E3%81%8B%E3%82%89%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AB%E7%AD%94%E3%81%88%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86)

## はじめに

専用の作業ディレクトリを作成して移動します。以降の作業はこのディレクトリで行います。

```bash
$ mkdir -p ~/workspace/techcircle
$ cd ~/workspace/techcircle
```

ハンズオンAで利用するプロジェクトは[shiraco/techcircle_pepper_handson_a](https://github.com/shiraco/techcircle_pepper_handson_a)にあります。作業ディレクトリに一括**git clone**でダウンロードしておきます。

```bash
$ git clone https://github.com/shiraco/techcircle_pepper_handson_a.git
$ cd techcircle_pepper_handson_a
```

ディレクトリ構成は以下のようになっています。

```bash
$ tree -L 1  # ※tree はディレクトリ階層を表示させるコマンドです。今後も含めて、特に実行の必要はありません。
.
├── pepper_speech_sample # ①で利用
└── pepper_dialog_sample # ②で利用
```

以降では上記のプロジェクトを利用します。

## ① (復習) **Speech Reco.** + **Say**でPepperと対話してみる

(**Speech Reco.**の基本的な使い方は、[アトリエ秋葉原公式ワークショップ基礎編#1 SDK Basic](http://pepper-atelier-akihabara.jp/wp/wp-content/uploads/2015/06/Pepper-SDK-Workshop1.pdf)も参考にしてください。)

### Pepperに好きな食べ物を教えてあげよう

#### プロジェクトのオープン (pepper_speech_sample)

簡単なサンプルとして、好きな果物の色を教えてくれるアプリを動かしてみます。

このプロジェクトは先ほどダウンロードした**pepper_speech_sample**にあります。ここではダウンロードした完成したサンプルアプリを起動してみて動作確認をします。

```bash
$ cd ~/workspace/techcircle/pepper_speech_sample
```

ディレクトリ構成は以下のようになっています。
Choregrapheを起動して、「プロジェクトを開く」から、`pepper_speech_sample.pml`を選んで開きます。

```bash
$ tree .
.
├── LICENSE
├── README.md
└── pepper_speech_sample
 ├── behavior.xar
 ├── manifest.xml
 └── pepper_speech_sample.pml
```

#### (ヒント) プロジェクトを開くときは拡張子が `*.pml` なファイルを開きましょう

#### アプリケーションの説明

アプリケーションは以下の様な流れになっています。
![1-0-1.png](https://qiita-image-store.s3.amazonaws.com/0/5707/ab3b5dba-6fd7-a61f-db3e-5a37f1326099.png)

最初の**Say**の中の**Localized Text**※のテキストは「私はあなたの好きな食べ物の色を答えます。」となっており、Pepperがこのセリフをしゃべりかけてくれます。

※日本語しか対応しないので、**Localized Text**は**Text Edit**に置き換えても動作は同じになります。
![1-0-2.png](https://qiita-image-store.s3.amazonaws.com/0/5707/8dcd6445-521c-7086-3029-13831542306d.png)

**Speech Reco.**の**Word list**は「りんご;みかん;ばなな」とします。これはPepperが待ち受ける言葉のリストになります。ここの言葉であればPepperの耳で拾うことができます。
![1-0-3.png](https://qiita-image-store.s3.amazonaws.com/0/5707/16f1c250-cd95-d8a0-0057-40948668a943.png)

**Swich Case**へは、先ほどの**Word list**同様の値が入っています。ここで条件分岐させます。
![1-0-5.png](https://qiita-image-store.s3.amazonaws.com/0/5707/57a434dc-1c49-8f09-7283-6f95a882ab36.png)

**Swich Case**直後の**Say**の中の**Localized Text**はPepperに喋らせる内容を入力します。

* りんご → 赤
* みかん → オレンジ
* ばなな → 黄　
![1-0-4.png](https://qiita-image-store.s3.amazonaws.com/0/5707/4af80f37-6e8b-d1bf-4246-acf0f223cc1b.png)

#### アプリケーションの実行と動作確認

Choregrapheでアプリケーションを実行してみましょう。

するといい感じでPepperが答えてくれます。以下はChoreographeのダイアログビューです。
![1-0-5.png](https://qiita-image-store.s3.amazonaws.com/0/5707/8d65b9b9-c124-3613-942d-7a5a38ca06b2.png)

上記で実験したように**Speech Reco.** + **Say**でPepperに喋らせることができますが、
対話バリエーションに依存してボックスの数が増えてしまいますね。

## ② **Dialog**を使ってPepperからの質問に答えてみよう

(**Dialog**の基本的な使い方は、[アトリエ秋葉原公式ワークショップ基礎編#3 Dialogを使ってみよう](http://pepper-atelier-akihabara.jp/wp/wp-content/uploads/2015/06/Pepper-SDK-Workshop3.pdf)も参考にしてください。)

### Pepperに都道府県庁所在地を聞いてみよう

**Dialog**を使って、簡単なサンプルとして、都道府県庁所在地を応えてくれるアプリを作ってみます。

#### プロジェクトのオープン (pepper_dialog_sample)

さきほどダウンロードした**pepper_dialog_sample**を開きます。ディレクトリ構成は以下のようになっています。Choregrapheを起動して、新たに「プロジェクトを開く」から、`pepper_dialog_sample.pml`を選んで開きます。

```bash
$ cd ~/workspace/techcircle/pepper_dialog_sample
```

```bash
$ tree .
.
├── LICENSE
├── README.md
└── pepper_dialog_sample
 ├── behavior.xar
 ├── manifest.xml
 ├── pepper_dialog_sample.pml
 └── qa
 ├── qa.dlg
 └── qa_jpj.top
```

#### アプリケーションの説明

プロジェクトを開くと、以下のようにボックスを並んでいます。
![1-2-1.png](https://qiita-image-store.s3.amazonaws.com/0/5707/3dc54abb-5da7-a6f1-3136-971679b274e6.png)

**Text Edit**では**Say Text**に渡すテキストを入力します。テキストの内容は以下のようにしています。

「こんにちは。私は日本について詳しいです。都道府県名を言ってもらえたら、県庁所在地を答えましょう。」

一番右の**Dialog**は作成時にトピックは**qa**です。対応している`qa_jpj.top`ファイルに、人間がなんと答えたら、Pepperになんと答えさせるか応答ルールを記載しています。
プロジェクトの内容ビューから`qa_jpj.top`ファイルを開いて、中身を確認してみてください。

![Screen_Shot_2015-07-21_at_19_26_02.png](https://qiita-image-store.s3.amazonaws.com/0/5707/02cf8fbb-5aff-35da-0b39-2b5794c6ee1d.png)

ここで`Dialog/NotUnderstood`を使って、ルールが無い場合にも応答できるようにしています。

![1-1-5.png](https://qiita-image-store.s3.amazonaws.com/0/5707/d950d80e-d534-d7e6-784b-08b4607ea348.png)

```text:qa_jpj.top
u:(愛媛{県})県庁所在地は松山市です。
u:(徳島{県})県庁所在地は徳島市です。
u:(高知{県})県庁所在地は高知市です。
u:(香川{県})県庁所在地は高松市です。
u:(e:Dialog/NotUnderstood)四国以外は知りません。
```

#### アプリケーションの実行と動作確認(バーチャルロボ)

実際にバーチャルロボットに接続して実行してみましょう。

Text Edit Box + Say Text Box で最初にPepperが話しかけます。
![1-1-6.png](https://qiita-image-store.s3.amazonaws.com/0/5707/2a6f6240-06fd-a730-1dbc-7087bc8741a6.png)

以降はDialog Box記載のルールの通りPepperが応答してくれます。四国のいづれかの県を答えてみてください。
![1-1-7.png](https://qiita-image-store.s3.amazonaws.com/0/5707/492be8b0-45b9-1497-847f-f30e44269f42.png)

用意していないルールに対しても反応します。
![1-1-8.png](https://qiita-image-store.s3.amazonaws.com/0/5707/58eb9584-2280-835a-845d-41ab8b857b54.png)

#### アプリケーションの実行と動作確認(Pepper実機)

グループで1名、Pepper実機にアプリケーションをインストールして試してみましょう。

今回、Pepperに質問してみました。次にPepperに聞かれるパターンもやってみます。

### Pepperに名前を聞かれて答えてあげる

#### アプリケーションの作成

アプリケーションの全体の構成としては、ボックスに変更はありません。先ほどのプロジェクトを別名で保存して、新しいプロジェクトとしてそのまま使いましょう。

全体の流れは先ほどと同じです。
![1-3-1.png](https://qiita-image-store.s3.amazonaws.com/0/5707/2399a54e-3674-31f2-f8be-8d9d2c2e5797.png)

変更するのは2箇所です。**Text Edit**と`qa_jpj.top`ファイルです。

**Text Edit**の中は「あなたのお名前は？」にしてみましょう。

`qa_jpj.top`ファイルの応答ルールを変更してみましょう。例えば以下のようにしてみます。

![1-3-3.png](https://qiita-image-store.s3.amazonaws.com/0/5707/4bbc8b6e-6274-710e-ce92-f240acd96393.png)

```
u:(_*{です})$1 さんですね。よろしくおねがいします。
```

上記についての説明は以下です。

* *: ワイルドカード
* _: $1, $2, ..., $n で後方参照
* {}: 付加情報、あってもなくても良い

その他の*Dialog*のルールは以下を参照してください。

* [pepperとの会話を進化させるQiChat-Syntaxまとめ（自分用メモ） - Qiita](http://qiita.com/phptaro/items/d7428c416f27df82426e)
* 公式ドキュメント(Choregrapheヘルの参照API)
    * NAOqi Developer guide > NAOqi Framework > NAOqi API > NAOqi Audio > ALDialog > QiChat - Table of Content

#### アプリケーションの実行と動作確認(バーチャルロボ)

まず、バーチャルロボットで、アプリケーションを実行してみてください。

![1-3-1.png](https://qiita-image-store.s3.amazonaws.com/0/5707/41392b49-eed4-e775-8027-02a3f47ec3a1.png)

Pepperに名前を話しかけると、

![1-3-2.png](https://qiita-image-store.s3.amazonaws.com/0/5707/b0f6f632-b57c-d794-c23c-4b9895155df2.png)

ちゃんと名前の部分を認識してくれています。

#### アプリケーションの実行と動作確認(Pepper実機)

次にPepper実機につないで音声で話しかけてみましょう。
グループで1名、Pepper実機にアプリケーションをインストールして試してみましょう。

いかがでしょう。あなたの名前はちゃんと認識したでしょうか？
**Dialog**で`*`(ワイルドカード)を使った場合、可能性のある有限の候補から選ぶ作業ではなくなるため、認識精度が一気に落ちてしまいます。殆どの場合、誤認識されてしまったのではないでしょうか。

#### 解答例

こちらの解答例は以下で確認することができます。
[shiraco/pepper_dialog_sample2](https://github.com/shiraco/pepper_dialog_sample2)


次のステップ高精度のクラウドの音声認識を試してみます。

---

以上で、ハンズオン ～基本編A～ は終了です。

次のステップは以下の内容になります。
[～基本B 音声認識～ Google Speech APIを使ってPepperにあなたの名前を知ってもらう - Qiita](http://qiita.com/shiraco/private/460b9a6ce7c9426d6be3)

---
本ハンズオンのイベントページ
[Tech-Circle#7 Pepper ハンズオン](http://techcircle.connpass.com/event/16275/)