visual-narrator-llm / emotional_analysis.py
Ytgetahun's picture
feat: Visual Narrator 3B - Clean repository with professional benchmarks
d6e97b5
import json
class EmotionalAnalyzer:
def __init__(self):
with open('emotional_scenes_dataset.json', 'r') as f:
self.scenes = json.load(f)
def analyze_scene_emotion(self, description):
"""Analyze emotional content of a scene description"""
description_lower = description.lower()
# Simple keyword-based emotional analysis
emotional_indicators = {
'action': ['chase', 'explosion', 'fight', 'escape', 'battle'],
'drama': ['romantic', 'emotional', 'confession', 'tense', 'verdict'],
'comedy': ['comedic', 'awkward', 'prank', 'funny', 'slip'],
'horror': ['haunted', 'scare', 'dark', 'terror', 'fear'],
'documentary': ['nature', 'wildlife', 'historical', 'educational']
}
scores = {emotion: 0 for emotion in emotional_indicators}
for emotion, keywords in emotional_indicators.items():
for keyword in keywords:
if keyword in description_lower:
scores[emotion] += 1
# Normalize scores
total = sum(scores.values()) or 1
normalized_scores = {k: v/total for k, v in scores.items()}
# Get dominant emotion
dominant_emotion = max(normalized_scores, key=normalized_scores.get)
return {
'dominant_emotion': dominant_emotion,
'emotional_scores': normalized_scores,
'confidence': normalized_scores[dominant_emotion]
}
# Test the analyzer
analyzer = EmotionalAnalyzer()
test_scenes = [
"a car chase through the city with explosions",
"a romantic walk on the beach at sunset",
"a funny slip on a banana peel"
]
print("Emotional Analysis Test:")
for scene in test_scenes:
analysis = analyzer.analyze_scene_emotion(scene)
print(f"\nScene: '{scene}'")
print(f"Dominant emotion: {analysis['dominant_emotion']}")
print(f"Confidence: {analysis['confidence']:.2f}")