From ec1a2ff5f97f4ae3c21cc2e8cdb9f4f6d38fe6da Mon Sep 17 00:00:00 2001 From: Ian Wood Date: Mon, 8 May 2017 14:28:51 +0100 Subject: [PATCH] added 'origin' to VAD representation, incorporated into weighed sum for Cat->VAD conversion --- senpy/plugins/conversion/centroids.py | 24 +++++++++++-------- .../conversion/emotion/ekman2vad.senpy | 9 +++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/senpy/plugins/conversion/centroids.py b/senpy/plugins/conversion/centroids.py index 37bb9d3..c1137ae 100644 --- a/senpy/plugins/conversion/centroids.py +++ b/senpy/plugins/conversion/centroids.py @@ -36,25 +36,29 @@ class CentroidConversion(EmotionConversionPlugin): super(CentroidConversion, self).__init__(info) def _forward_conversion(self, original): - """Sum the VAD value of all categories found.""" + """Sum the VAD value of all categories found weighted by intensity. """ res = Emotion() - totalIntensities = defaultdict(float) + maxIntensity = float(original.get("onyx__maxIntensityValue",1)) + sumIntensities = 0 + neutralPoint = self.get("origin",None) for e in original.onyx__hasEmotion: category = e.onyx__hasEmotionCategory - intensity = e.get("onyx__hasEmotionIntensity",1) + intensity = e.get("onyx__hasEmotionIntensity",maxIntensity)/maxIntensity if intensity == 0: continue - if category in self.centroids: - for dim, value in self.centroids[category].items(): - totalIntensities[dim] += intensity + sumIntensities += intensity + centoid = self.centroids.get(category,None) + if centroid: + for dim, value in centroid.items(): + if neutralPoint: + value -= neutralPoint[dim] try: res[dim] += value * intensity except KeyError: res[dim] = value * intensity - - for dim,intensity in totalIntensities.items(): - if intensity != 0: - res[dim] /= intensity + if neutralPoint: + for dim in res: + res[dim] += neutralPoint[dim] return res def _backwards_conversion(self, original): diff --git a/senpy/plugins/conversion/emotion/ekman2vad.senpy b/senpy/plugins/conversion/emotion/ekman2vad.senpy index a1f21f0..f2fbe6b 100644 --- a/senpy/plugins/conversion/emotion/ekman2vad.senpy +++ b/senpy/plugins/conversion/emotion/ekman2vad.senpy @@ -4,6 +4,11 @@ module: senpy.plugins.conversion.centroids description: Plugin to convert emotion sets from Ekman to VAD version: 0.1 # No need to specify onyx:doesConversion because centroids.py adds it automatically from centroids_direction +origin: + # Point in VAD space with no emotion (aka Neutral) + A: 5.0 + D: 5.0 + V: 5.0 centroids: anger: A: 6.95 @@ -25,6 +30,10 @@ centroids: A: 5.21 D: 2.82 V: 2.21 + neutral: + A: 5.00 + D: 2.00 + V: 5.00 centroids_direction: - emoml:big6 - emoml:pad