Bakulog

獏の夢日記的な何か。

Pepperの感情生成APIに少しだけ触ってみよう!

タイトル通りです。

皆さん、今年2015年6月18日に行われたPepperの記者向け発表会を覚えているでしょうか。この記者発表でPepperは「感情を持った世界初のロボット」という触れ込みとともに一般向け販売が開始されました。感情を持つ、というと人間味がありそうに思えてきますねー。

 

しかしPepperはあくまでロボットなので、人間と違って感情状態を数値データとして表し、それを外部プログラムから使える機能があります。いわゆる「感情生成API」ですね。感情生成APIは現時点(2015年10月)でドキュメント未整備領域なのですが、本記事では私が確認したネタを一つ紹介します。

 

メモリを監視しよう!

結論としてはメモリに感情データが載ってるのでそのまま使えます。具体的にはPepperのオートノマスライフ(AutonomousLife)がオンになっている間、下記のPepper内部メモリーに感情生成の計算結果の一部らしきデータが現れ、リアルタイムで更新されます。

  • EEU/ExcitementLevel
  • EEU/Pleasure
  • EEU/PleasureLevel
  • EEU/PrimaryEmotion
  • EEU/PrimaryEmotionLabel

この中で  EEU/PrimaryEmotionLabel だけは文字列で、他はすべて整数です。文字列の中身は「気持ちいい」とか「嫌悪感」など、その時のPepperの気分をもっとも的確に表す言葉が入ります。それ以外だと喜び度合を表すPleasureLevelなんかが使いやすいデータかと思います。

 

またPrimaryEmotionメモリの整数値はPrimaryEmotionLabelの文字列に一対一で対応する(例えば"安定感"というラベルに整数"0"が対応する)みたいです。本記事の末尾に確認できた範囲でラベルの一覧を書いてあります。

 

上記のメモリを用いた簡単なサンプルはこんな感じ。普通にChoregrapheの標準ボックスだけで作れるのはラクでいいですね。

emotion_extractor_sample

ポイントはGet Dataボックスのキーに先ほど触れた EEU/PrimaryEmotionLabel を指定する所です。上記のようにボックスをつなげてオートノマスライフがONの状態で実行すると、すこし間隔を空けつつ

 

「いま、ボクの心を支配する感情、それは…『安心感』」

 

みたいに喋ってくれます。注意ですがオートノマスライフを切ってると感情計算が行われず、同じことしか喋らないハズです。

 

メモリの中身をもっと詳しく監視するにはChoregrapheの標準機能である「メモリウォッチャー」を使った方がいいので、あまり詳しくない方は公式チュートリアルを参考にして色々いじってください。

 

また別の例になりますが、標準アプリの中には嬉しくなると起動する「感情ハイ」や、悲しい時に起動する「感情ロー」といったアプリがあります。これらのアプリケーションでは先ほど挙げたメモリーのデータを監視して「嬉しいときにアプリを起動」のような機構を実現してるっぽいので、自作アプリでもそういったカスタマイズは今後有効になるかもしれません。

 

今回は以上です。感情生成APIの調査については続報も用意してますので、興味がある方はぜひ続きにご期待下さい。

 

2015/10/7追記: 文章が冗長だったので本筋に影響ない範囲で中身を削りました。

 

補足: PrimaryEmotionとPrimaryEmotionLabelの対応

直接観察してて見つかった分だけをメモしています。もしここに載ってないのを見つけたらぜひ情報公開するかコメントしていってください!

 

  • 0: 安定感
  • 1: 好感
  • 2: (不明)
  • 3: (不明)
  • 4: 嫌悪感
  • 5: 不安定感
  • 6: 安心
  • 7: 楽
  • 8: 愛
  • 9: (不明)
  • 10: (不明)
  • 11: (不明)
  • 12: (不明)
  • 13: 怒
  • 14: 悲哀
  • 15: 不安定
  • 16: (不明)
  • 17: (不明)
  • 18: (不明)
  • 19: かわいい
  • 20: (不明)
  • 21: 気持ちいい
  • 22: (不明)
  • 23: (不明)
  • 24: (不明)
  • 25: (不明)
  • 26: (不明)
  • 27: 怖い