Bakulog

獏の夢日記的な何か。

Pepperの感情生成APIにさらに触ってみよう!

前回の記事の続きです。

 

Pepperの感情生成APIをつついた報告の続報です。

前回の記事では"EEU/"から始まるメモリーにPepperの感情データの一部が置いてあることを示しました。前回のはラクしてそれなりの情報が拾えるアプローチでしたが、今回はもうちょっと突っ込んだ内容に触れてみます。

 

続・メモリを監視しよう!!

今回目をつけるのはAIClient/ResponseReceivedJsonというメモリデータです。名前の通りJSON文字列が入ってるメモリで、Pythonコードであればjsonモジュールを使ってパースできます。今回はアプリを組むのではなく様子見だけにとどめておくので、Choregrapheではなくて単体のPythonスクリプトを用意し、PCへJSONデータを落としてくるスクリプトを用意します。

# -*- coding: utf-8 -*-

import json
from naoqi import ALProxy

#IPは接続先のPepperのアドレスに設定
PEPPER_IP = "192.168.xx.xx"
PEPPER_PORT = 9559

#保存先も適宜変更
filename = "mandara_json.txt"

def main():
    almemory = ALProxy("ALMemory", PEPPER_IP, PEPPER_PORT)
    rawdata = almemory.getData("AIClient/ResponseReceivedJson")
    if not rawdata:
        print("failed: AIClient/ResponseReceivedJson was empty")
        return

    jsondata = json.loads(rawdata)

    with open(filename, "w") as f:
        f.write(json.dumps(jsondata))

if __name__ == "__main__":
    main()

スクリプトの実行にはNAOqi Python SDKが必要になる事と、Pepperのオートノマスライフをオンにしたうえで実行することに注意してください。オートノマスライフが入ってない場合は感情計算が行われないのでメモリにデータが入ってない状態になってしまいます。

 

このスクリプトを実行するとdumpされたJSONデータが"mandara_json.txt"というファイルに保存されるので、ここのサイトとかで整形させてもらって読める形に戻します。内容の抜粋はこんな感じ。

{
  ...
  "information": {
    ...
    "emotion": {
      "不安": 0.07, 
      ...
      "痛感": 0.0771
    }, 
    "emotional_message": "イヤな感じだなあ。。", 
    ...
    "input_info": {
      "input_list": [
      {
        ...
        "input": "まだ疲れてない",
      }, 
      {
        ...
        "input": "誰かがこっちを見続けてる",
      }, 
      ...
    },
    "secretion_info": {
      ...
      "V-セロトニン": 7.7306, 
      "V-下垂体ドーパミン": 0, 
      ...
    },
  },
  ...
}

これでも結構そぎ落としてるんですが、多様なデータが書かれてることが分かります。データの意味はラベルを通じて分かると思うので、全貌が知りたい方はぜひお手元でスクリプトを走らせてください。

 

また、今回拾った情報は標準アプリの「感情マップ」で使ってる情報と恐らく同じモノなので、数値の意味が良く分からないデータについては感情マップを見れば何かしらの洞察が得られるかもしれません。

 

今回は以上です。前回と合わせると感情生成APIの結果を拾う方法は以下の2種類ということで基本的にはカバーし切ったのではないかと思います。

  • "EEU/"から始まるメモリを参照する
  • "AIClient/ResponseReceivedJson"から拾ったデータをJSONパース

Pepper感情生成APIシリーズの次回のネタですが、Basic Awarenessみたいに感情生成の計算そのものをスタートしたりストップさせる方法が分かったら紹介しようと思います。