diff --git a/senpy/plugins/conversion/centroids.py b/senpy/plugins/conversion/centroids.py index bb02a76..2dd1c97 100644 --- a/senpy/plugins/conversion/centroids.py +++ b/senpy/plugins/conversion/centroids.py @@ -6,6 +6,33 @@ logger = logging.getLogger(__name__) class CentroidConversion(EmotionConversionPlugin): + def __init__(self, info): + if 'centroids' not in info: + raise Error('Centroid conversion plugins should provide ' + 'the centroids in their senpy file') + if 'onyx:doesConversion' not in info: + if 'centroids_direction' not in info: + raise Error('Please, provide centroids direction') + + cf, ct = info['centroids_direction'] + info['onyx:doesConversion'] = [{ + 'onyx:conversionFrom': cf, + 'onyx:conversionTo': ct + }, { + 'onyx:conversionFrom': ct, + 'onyx:conversionTo': cf + }] + + if 'aliases' in info: + aliases = info['aliases'] + ncentroids = {} + for k1, v1 in info['centroids'].items(): + nv1 = {} + for k2, v2 in v1.items(): + nv1[aliases.get(k2, k2)] = v2 + ncentroids[aliases.get(k1, k1)] = nv1 + info['centroids'] = ncentroids + super(CentroidConversion, self).__init__(info) def _forward_conversion(self, original): """Sum the VAD value of all categories found.""" @@ -25,7 +52,7 @@ class CentroidConversion(EmotionConversionPlugin): dimensions = list(self.centroids.values())[0] def distance(e1, e2): - return sum((e1[k] - e2.get(self.aliases[k], 0)) for k in dimensions) + return sum((e1[k] - e2.get(k, 0)) for k in dimensions) emotion = '' mindistance = 10000000000000000000000.0 @@ -40,11 +67,12 @@ class CentroidConversion(EmotionConversionPlugin): def convert(self, emotionSet, fromModel, toModel, params): cf, ct = self.centroids_direction - logger.debug('{}\n{}\n{}\n{}'.format(emotionSet, fromModel, toModel, params)) + logger.debug( + '{}\n{}\n{}\n{}'.format(emotionSet, fromModel, toModel, params)) e = EmotionSet() - if fromModel == cf: + if fromModel == cf and toModel == ct: e.onyx__hasEmotion.append(self._forward_conversion(emotionSet)) - elif fromModel == ct: + elif fromModel == ct and toModel == cf: for i in emotionSet.onyx__hasEmotion: e.onyx__hasEmotion.append(self._backwards_conversion(i)) else: diff --git a/senpy/plugins/conversion/emotion/ekman2fsre.senpy b/senpy/plugins/conversion/emotion/ekman2fsre.senpy new file mode 100644 index 0000000..3cc0c17 --- /dev/null +++ b/senpy/plugins/conversion/emotion/ekman2fsre.senpy @@ -0,0 +1,39 @@ +--- +name: Ekman2FSRE +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 +centroids: + anger: + A: 6.95 + D: 5.1 + V: 2.7 + disgust: + A: 5.3 + D: 8.05 + V: 2.7 + fear: + A: 6.5 + D: 3.6 + V: 3.2 + happiness: + A: 7.22 + D: 6.28 + V: 8.6 + sadness: + A: 5.21 + D: 2.82 + V: 2.21 +centroids_direction: + - emoml:big6 + - emoml:fsre-dimensions +aliases: # These are aliases for any key in the centroid, to avoid repeating a long name several times + A: emoml:arousal + V: emoml:valence + D: emoml:dominance + anger: emoml:big6anger + disgust: emoml:big6disgust + fear: emoml:big6fear + happiness: emoml:big6happiness + sadness: emoml:big6sadness \ No newline at end of file diff --git a/senpy/plugins/conversion/emotion/ekman2vad.senpy b/senpy/plugins/conversion/emotion/ekman2vad.senpy index 4246ba7..a1f21f0 100644 --- a/senpy/plugins/conversion/emotion/ekman2vad.senpy +++ b/senpy/plugins/conversion/emotion/ekman2vad.senpy @@ -1,38 +1,39 @@ --- -name: Ekman2VAD +name: Ekman2PAD module: senpy.plugins.conversion.centroids description: Plugin to convert emotion sets from Ekman to VAD version: 0.1 -onyx:doesConversion: - - onyx:conversionFrom: emoml:big6 - onyx:conversionTo: emoml:fsre-dimensions - - onyx:conversionFrom: emoml:fsre-dimensions - onyx:conversionTo: emoml:big6 +# No need to specify onyx:doesConversion because centroids.py adds it automatically from centroids_direction centroids: - emoml:big6anger: + anger: A: 6.95 D: 5.1 V: 2.7 - emoml:big6disgust: + disgust: A: 5.3 D: 8.05 V: 2.7 - emoml:big6fear: + fear: A: 6.5 D: 3.6 V: 3.2 - emoml:big6happiness: + happiness: A: 7.22 D: 6.28 V: 8.6 - emoml:big6sadness: + sadness: A: 5.21 D: 2.82 V: 2.21 centroids_direction: - emoml:big6 - - emoml:fsre-dimensions -aliases: + - emoml:pad +aliases: # These are aliases for any key in the centroid, to avoid repeating a long name several times A: emoml:arousal V: emoml:valence - D: emoml:dominance \ No newline at end of file + D: emoml:dominance + anger: emoml:big6anger + disgust: emoml:big6disgust + fear: emoml:big6fear + happiness: emoml:big6happiness + sadness: emoml:big6sadness \ No newline at end of file