logu29's picture
Update app.py
b3de9fc verified
raw
history blame
2.44 kB
import gradio as gr
from textblob import TextBlob
from deepface import DeepFace
import cv2
import moviepy.editor as mp
import tempfile
import os
# Sentiment analysis for text
def analyze_text(text):
blob = TextBlob(text)
sentiment = blob.sentiment.polarity
emotion = "Positive" if sentiment > 0 else "Negative" if sentiment < 0 else "Neutral"
return f"Sentiment: {emotion} (Score: {sentiment:.2f})"
# Emotion detection for image
def analyze_face(image):
try:
result = DeepFace.analyze(image, actions=['emotion'], enforce_detection=False)
dominant_emotion = result[0]['dominant_emotion']
return f"Dominant Emotion: {dominant_emotion}"
except Exception as e:
return f"Error analyzing face: {str(e)}"
# Analyze emotion in video
def analyze_video(video_path):
try:
temp_folder = tempfile.mkdtemp()
clip = mp.VideoFileClip(video_path)
frame = clip.get_frame(clip.duration / 2) # middle frame
frame_path = os.path.join(temp_folder, "frame.jpg")
cv2.imwrite(frame_path, cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
result = DeepFace.analyze(frame_path, actions=['emotion'], enforce_detection=False)
dominant_emotion = result[0]['dominant_emotion']
return f"Dominant Emotion in Video: {dominant_emotion}"
except Exception as e:
return f"Error analyzing video: {str(e)}"
# Create Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# 🧠 Emotion Decoder - Sentiment & Emotion Analysis")
with gr.Tab("Text Analysis"):
text_input = gr.Textbox(label="Enter text")
text_output = gr.Textbox(label="Sentiment Result")
text_button = gr.Button("Analyze Text")
text_button.click(analyze_text, inputs=text_input, outputs=text_output)
with gr.Tab("Face Emotion Detection"):
img_input = gr.Image(type="filepath", label="Upload an Image")
img_output = gr.Textbox(label="Emotion Result")
img_button = gr.Button("Analyze Face Emotion")
img_button.click(analyze_face, inputs=img_input, outputs=img_output)
with gr.Tab("Video Emotion Detection"):
video_input = gr.Video(label="Upload a Video")
video_output = gr.Textbox(label="Emotion Result")
video_button = gr.Button("Analyze Video Emotion")
video_button.click(analyze_video, inputs=video_input, outputs=video_output)
demo.launch()