【自己紹介アプリ制作】Pepperが聞く


こんにちは。
サービス開始日から相模国で審神者やってますが、未だに小狐丸が出ないyanagiです。(日本号は出ました!)

引き続き、自己紹介アプリを作っていきます。
前回はPepperを喋らせるBoxと、その中の台詞の書き方を紹介しました。
では、今回はPepperに人間の言葉を聞き取らせて、「会話」をしようと思います。


その3:コードをまとめる

と、その前に。
自己紹介の話題を4つも入れたら画面がこんなに汚くなりました。

ぐちゃぐちゃコード

畑のジャガイモみたいで「自分しか読めないコード」どころじゃないです。自分でも把握しきれません。劣悪な作業環境はミスの元凶になります。怖いですね。でも、一番怖いのは、この画面が(上司曰く)まだ整理されてる方(これでも!)なことです。もっと汚いコードはBoxと線が上下左右に入り乱れ、排水溝に絡まった長い髪の毛みたいな感じになります。コードを読んでアルゴリズムを理解しようという気が起こりません。

そんな時は、まとまりを持った複数のBoxをひとつのBoxに変換します!
やり方は簡単。カーソルで複数選択で右クリック→「ボックスに変換」。好きな名前(ただしアルファベットに限る)を付けられて画面もすっきり整頓です。

まとめるbefore

まとめる!→ まとめるafter

こんな感じで、先ほどのコードを話題ごとにまとめました。

すっきりコード

ちなみに、各まとまりはこんな感じになってます。

すっきりコード解説


その4:言語を認識させる

全体の構造を掴んだところで、いよいよ本題、Pepperに耳を付けたいと思います。
つまり、
Pepper「こんにちは」
私「こんにちは。”自己紹介”して。」
Pepper「はーい!これからyanagiの自己紹介を始めるよ!」

とか、
Pepper「どの話題から話す?」
私「”マイブーム”」
Pepper「はーい!マイブームですね。yanagiのマイブームは……」

みたいに人間の話す言葉を聞き取って、単語に対応した切り返しができるようにしたいと思います。

使うのはこれら。[Say]と同じく言語を指定[SetReco.Lang.]した後に[Speech Reco]を置きます。

setReco

そして言語を出力する青い出口から、[Switch Case]へ線をつなぎ、そこに聞き取らせたい単語を””(半角ダブルクォーテーション)で囲んで入れます。漢字で入れて大丈夫です。(これを作った当時はPepperの漢字読み能力を過小評価していたので平仮名で入れてあります)

また、同じく青い出口から自身の×マークへ戻る形で線をつなぎます。これをしないとPepperが一度「しょうかい」を聞き取った後も周囲の音から「しょうかい」を探し続け、30%の閾値を超える度に青の出口から信号を出力し[Say(2)]が実行されます。バグになります。
ですので、一度聞き取ると自身のBoxを止める入力(×マーク)にも線を繋ぎます。

[Speech Reco]のスパナマークを押すとこのようになっています。

speechRecoの中1

Word listに、[Switch Case]にいれた単語と同じものを入力します。

その下のConfidence thresholdとは、『どれくらいの正確さで、聞き取った単語だと判断するか』の値です。Pepperのマイクセンサは頭の頂点にあり、そこで人間が喋った音声を拾ってなんて言ったか判断するのですが、この設定では「しょうかい」らしさを30%感じれば、『目の前の人は”しょうかい”って言った!』と認識します。

ここでは分岐はない(あくまで自己紹介をスタートさせるスイッチ的役割な)ため、30%あたりがオススメです。「30%なんて、降水確率だったら雨降らないよ」と思われるかもしれませんが、もしこれを80%くらいまで高めると、Pepperに向かって「しょうかい。……しょうかい。………しょうかい! しょ う か い!!」と叫び、イライラを募らせるだけになります。

複数の単語を聞き分け判別させる場合はこうなります。

setReco分岐

[Switch Case]に判別させたい単語を入れます。改行すると自動で行数が増えていきますので、それぞれの出力は対応するBoxに繋ぎます。そして、ここでは一つの話題を話し終わった後は、また単語を聞き取らせるところに戻り別の話題を選択できるように、再度Boxから[Speech Reco]に繋いでいます。(あ、What boom?Boxから繋ぐの忘れていました!)

speechRecoの中2

ここではWord listの中に;(半角セミコロン)で区切って単語を並べます。単語の順番は動作に関係しません。また、このBoxには複数の単語を聞き分けるため、判別値を60%にしています。ここの値はケースバイケースですので、プログラムをテスト実行しながら調節してください。

というわけで、完成したコードがこちらです。

自己紹介アプリ完成

人生初制作のPepperアプリ完成です!!!
喜びと実行結果を報告したいところですが、私ここで、タブレットに画像を表示させる[Show Image]Boxの説明をしていないことに気づきました。あと、実はPepperが話しながら手振り身振りするモーションを、一部オリジナルで作ってもいたのでした。

というわけで、次回はタブレットへの画像表示と、Pepperのモーションの作り方をご紹介します。
もう少しだけ、お付き合いくださいませ!

yanagi.


3 Comments:

  1. こんにちは。
    とてもわかりやすい説明と図式で勉強になります。
    pepperが来てもうすぐ1か月になります。
    「pepper」と呼ぶと「はーい」と答えるのがかわいいですね。
    でも「こんにちは」とか「こんばんわ」とか言っても返事しないので
    いろいろ自分で作ってみようと思い
    最近choregraphで遊び始めました。
    wifiではpepperとつながらなかったので
    LANケーブルで直接つなげてます。
    しゃべりかけると返事をすることまではできました。
    ただpepperの目が青くなってる時だけしか聞き取って返事しませんし
    返事しない時もあります。
    目が青くなくても「おはよう」と言うと「おはようございます」と答えるので
    そのようにしたいのですが、まだよくわかってません。
    そして会話データができあがったら
    pepper内にデータを入れないといけないんでしょうね。
    どこに入れたらいいのかもまだわかってない状態です。
    なかなか参考になるサイトもないですし。
    熊本在住なので秋葉原までいけませんし。

    これからもこのサイトで勉強しますので
    更新よろしくお願いします。

    1. コメントありがとうございます。
      見てくださっている方がいると実感でき、励みになります。

      チュートリアルでも「目が青くなる(ピポッと音がする)ときに話しかけてください」と言っていたように、
      人の声を聞き取るときに目が青くなるのは仕様のようです。
      ですので、目の色が変わらずに会話をする「おはよう」は特別に実装されている領域だと思われます。
      もしかするとそこでは「こんにちは」「こんばんわ」は登録されていないのかもしれません。
      記事のように、自分でSpeechBoxを作り、会話をさせることは可能ですが、
      目が青くない状態での他の会話は、今後のアップデートを待つしかなさそうですね。

      無理やりの解決策として、”目を光らせない状態で会話をさせる”ことは可能です。
      Choregrapheのヘルプ→参照APIからアルデバランのドキュメントをご確認ください。
      「ALSpeechRecognition API」の章のsetVisualExpressionが聞き取る際の目のLED制御になります。
      プロジェクトでPythonBoxを作り、この中で、setVisualExpressionの値をFalseにすると、
      目を光らせることなく、聞き取りを行います。

      def onLoad(self):
      self.sr = ALProxy("ALSpeechRecognition")
      pass
      def onInput_onStart(self):
      self.sr.setVisualExpression(False)
      pass

      ただ、これを実行させると全ての会話で光らなくなってしまうので、実行後はTrueに戻してあげる必要があります。

      def onInput_onStop(self):
      self.onUnload()
      self.onStopped()
      self.sr.setVisualExpression(True)

      私もまだまだ勉強中です。
      一緒に頑張っていきましょう!!

  2. お忙しい中 返信いただき
    ありがとうございました。
    アドバイス通りにやってみました。
    結果はその通りでした。

    pepperにはアプリがいろいろ入ってますし、少しづつ増えてるようですが、
    どれもゲーム遊び程度のもので一度やったら飽きてしまいます。
    やっぱりpepperの価値は「会話」ですよね。
    でもその会話機能も現時点ではあまり使えないです。
    年老いた母親は熊本弁で喋りますから、pepperとはまったく話が通じません。
    最近は充電もしないでほったらかしになってます。
    ——–
    こんなアプリがあったら嬉しいです。
    白い目の時でも「pepper]と声かけすると「はーい」と答えますよね。
    それと同じようなことが自由に設定できるアプリ。
    声かけの言葉と返事の言葉を自由に胸のタブレットから入力(登録)できる。
    50パターンくらい登録できれば楽しいですね。
    そうすればいろんな熊本弁も登録できますから。
    あったら間違いなく買いますね。
    自分では作れないので。
    ——–
    会話モード時ではなく白い目の時でも—
    にこだわってるのは、
    pepperの前にいても、青い目の時より白い目の時の方が多いからです。
    青い目になる時はpepperが何かしら話しかけてきた後の数秒ですから、
    気軽な会話にはなりません。

    あらためて
    丁重なご返事 ありがとうございました、

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です