69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
|
|
package animation
|
||
|
|
|
||
|
|
// ExpressionMapping maps emotion values to facial expressions
|
||
|
|
type ExpressionMapping struct {
|
||
|
|
Valence float64 // -1.0 to 1.0
|
||
|
|
Arousal float64 // 0.0 to 1.0
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetExpressionFromEmotion maps emotion to expression parameters
|
||
|
|
func GetExpressionFromEmotion(valence, arousal float64) ExpressionParams {
|
||
|
|
// Map valence/arousal to expression
|
||
|
|
// High valence + high arousal = happy/excited
|
||
|
|
// Low valence + high arousal = angry/frustrated
|
||
|
|
// High valence + low arousal = calm/content
|
||
|
|
// Low valence + low arousal = sad/depressed
|
||
|
|
|
||
|
|
var emotion string
|
||
|
|
var smileAmount float64
|
||
|
|
var browRaise float64
|
||
|
|
var eyeWideness float64
|
||
|
|
|
||
|
|
if valence > 0.5 && arousal > 0.5 {
|
||
|
|
emotion = "happy"
|
||
|
|
smileAmount = 0.8
|
||
|
|
browRaise = 0.3
|
||
|
|
eyeWideness = 0.6
|
||
|
|
} else if valence < -0.5 && arousal > 0.5 {
|
||
|
|
emotion = "angry"
|
||
|
|
smileAmount = -0.5
|
||
|
|
browRaise = -0.7
|
||
|
|
eyeWideness = 0.8
|
||
|
|
} else if valence > 0.3 && arousal < 0.3 {
|
||
|
|
emotion = "calm"
|
||
|
|
smileAmount = 0.3
|
||
|
|
browRaise = 0.0
|
||
|
|
eyeWideness = 0.4
|
||
|
|
} else if valence < -0.3 && arousal < 0.3 {
|
||
|
|
emotion = "sad"
|
||
|
|
smileAmount = -0.3
|
||
|
|
browRaise = 0.2
|
||
|
|
eyeWideness = 0.3
|
||
|
|
} else {
|
||
|
|
emotion = "neutral"
|
||
|
|
smileAmount = 0.0
|
||
|
|
browRaise = 0.0
|
||
|
|
eyeWideness = 0.5
|
||
|
|
}
|
||
|
|
|
||
|
|
return ExpressionParams{
|
||
|
|
Emotion: emotion,
|
||
|
|
SmileAmount: smileAmount,
|
||
|
|
BrowRaise: browRaise,
|
||
|
|
EyeWideness: eyeWideness,
|
||
|
|
Valence: valence,
|
||
|
|
Arousal: arousal,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// ExpressionParams contains facial expression parameters
|
||
|
|
type ExpressionParams struct {
|
||
|
|
Emotion string
|
||
|
|
SmileAmount float64 // -1.0 to 1.0
|
||
|
|
BrowRaise float64 // -1.0 to 1.0
|
||
|
|
EyeWideness float64 // 0.0 to 1.0
|
||
|
|
Valence float64
|
||
|
|
Arousal float64
|
||
|
|
}
|
||
|
|
|