blog
ブログ
2016.04.08

Pepper技術ブログ:はじめてのPepperアプリ開発(その3)

こんにちは!
日本システムデザイン Pepper担当のスエヨシです。
はじめてのPepperアプリ開発シリーズ、今回は3回目です。

前回の記事で、Pepperくんが一言挨拶するだけのアプリを作って、動きを確認するところまでは出来上がりました。ただ、これだけだとやはり寂しいし、一方的に発話しているだけですので会話としては成り立っていません。
そこで今回は、前回作ったアプリに手を加えて、Pepperくんと一往復の会話ができるようにしたいと思います。

◆人の言葉を聞いてもらう為には?

さて今回、「Pepperくんと一往復の会話ができるようにしたい」と冒頭で書きましたが、とりあえず具体的な仕様として、以下のような会話の流れを想定します。

(1) Pepper「おはようございます」
 ↓
(2) 人「おはよう」or「こんにちは」
 ↓
(3-1) Pepper「いい朝ですね」※(2)で「おはよう」と答えた場合
(3-2) Pepper「もうお昼ですね」※(2)で「こんにちは」と答えた場合

この流れは、前回実装した(1)の処理に対して(2)以降の処理を付け加えていく形を想定しています。
まず(3-1)(3-2)のPepperくんからの発話処理については前回やった内容で実現可能ですので、早速 Say ボックスを置いていきましょう。

chrg_add_say_box
Say ボックスを2つ追加して、それぞれに(3-1)(3-2)に当たる発話を設定

問題は(2)の部分ですね。
上記のスクリーンショット内で、出だしと終わりの発話の間にスペースを空けましたが、この部分でPepperくんからの問いかけに対する人間の答えを2種類聞きとって、その内容に応じて後続の処理を(3-1)もしくは(3-2)の発話へと分岐させる、といった処理を行う必要があります。

そこで今回新しく使用するのが、「SpeechReco」ボックスです。

chrg_box_speechreco
SpeechReco ボックス

SpeechReco ボックスは音声認識を行う部品です。あらかじめ認識させたい言葉を設定しておき、これを認識した場合は認識した言葉のテキストデータを「wordRecognized」から出力し、設定した言葉を認識できなかった(設定した値以外の言葉が認識された)場合は「onNothing」からデータなしで出力を行います。
今回の場合、まずは SpeechReco ボックスで「おはよう」と「こんにちは」の2種類の言葉を認識させて wordRecognized へと出力させます(*1)

まずはボックスライブラリ内の Speech → Creation 配下から SpeechReco をドラッグし、エディタ上の任意位置にドロップ。設置できたら、ボックス左下のレンチアイコンをクリックして、設定画面を開きます。設定画面内のWordListに認識させたい単語を入力(*2)したら設定を終了し、後は最初の Say ボックスの onStopped 出力から SpeechReco の onStart 入力へ接続すればOKです。

chrg_speechreco_setting
SpeechReco ボックスの設置と設定

とりあえず、人の言葉を聞きとる為の処理自体はここまでで完成です。

(*1) onStop 入力と onStopped 出力につきましては、今回の記事では使用しませんが別の記事で解説予定です。
(*2) WordList の入力値は、半角セミコロン(”;”)で区切ることで複数の言葉を設定できます。今回の場合は「おはよう」と「こんにちは」の2種類を認識させたいので、”おはよう;こんにちは” と入力しています。

◆処理を分岐させるには?

前段までで、人の言葉を聞きとる部分まではできましたので、続いて聞きとった情報を元に処理を分岐させる部分を実装していきます。

処理を分岐する為の部品としては If ボックスや SwitchCase ボックス等がありますが、今回は SwitchCase ボックスを使用します。

chrg_box_switch
SwitchCase ボックス

SwitchCase ボックスは、設定した複数の判定基準値に対して入力値が一致した場合に、各々の判定基準値に対応する個別の出力へと処理を分岐させるボックスです。初期状態で上記スクリーンショットのように onDefault、output_1、output_2 と3種類の出力があり、入力のデータがボックス内の各テキスト欄のいずれかと一致した場合、その隣にある出力が実行されるようになっています。(1番目のテキストと一致したら output_1、2番目のテキストと一致したら output_2、と分岐します。)
また、入力値が各テキスト欄のいずれの値とも一致しない場合は onDefault の出力へ分岐します。

尚、初期状態での出力は前述した3つだけですが、一番下のテキスト欄に値を入力すると自動的に対応する出力(output_n)が増えていき、またテキスト欄も追加される仕組みとなっています。

今回の場合、前述の SpeechReco で認識した2種類の言葉を入力値として SwitchCase ボックスで判定を行い、「おはよう」なら output_1 へ、「こんにちは」なら output_2 へ、それぞれ出力を行う実装とします。

まずはボックスライブラリ内の Programming → Logic 配下から SwitchCase をドラッグし、エディタ上の任意位置にドロップ。設置できたら、ボックス内のテキスト欄に判定条件となる値を設定します。今回の場合は1番目のテキスト欄に「おはよう」、2番目のテキスト欄に「こんにちは」を入力しましょう(*3)
これで分岐条件の設定はできましたので、後は前段で設置した SpeechReco ボックスの wordRecognized 出力から SwitchCase の onStart 入力へ接続、さらに output_1 と output_2 からそれぞれに対応する Say ボックスの onStart 入力へと接続すれば完成です(*4)

chrg_switchcase_setting
SwitchCase ボックスの設置と判定条件の設定

(*3) 判定条件値に全角文字を使用する場合は、必ず半角ダブルクォーテーション(“”)で囲んで入力するようにしてください。そのまま入力すると実行時にエラーとなります。
(*4) 余談ですが、今回の仕様に対して「おはよう」でも「こんにちは」でもない回答を認識した際の処理を追加する場合、SpeechReco の onNothing 出力から後続の処理へと接続する形となります。一見すると SwitchCase の onDefault から分岐できそうに見えますが、今回の仕様では SpeechReco の wordRecognized 出力で「おはよう」と「こんにちは」のいずれかを認識したうえで SwitchCase へと入力している為、SwitchCase が onDefault を出力することはなく、必ず output_1 か output_2 になります。

動作確認は省略しますが、以上で今回の目標は達成となります。
SpeechReco ボックスと SwitchCase ボックスを組みわせることで、会話内容によって Pepper の発話を複数パターンに分岐させる、という動きを実現できました。

次回は、このアプリに更にもうひとつ機能を追加してみます。

弊社ではPepperのアプリケーション開発を行っています。
詳しくはこちらをご参照ください。

contact

ご相談・ご質問等ございましたら、お気軽にお問い合わせください。

翻訳