MuhammmadRizwanRizwan's picture
Update app.py
c14e2fe verified
raw
history blame
2.74 kB
# import gradio as gr
# gr.load("models/dima806/facial_emotions_image_detection").launch()
import gradio as gr
import tensorflow as tf
from transformers import pipeline
def process_image(image):
try:
# Initialize emotion classifier
classifier = pipeline("image-classification", model="dima806/facial_emotions_image_detection")
# Get predictions
result = classifier(image)
# Convert results to required format
emotions = {item['label']: float(item['score']) * 100 for item in result}
# Generate analysis and report
analysis = generate_analysis(emotions)
report = generate_report(emotions, analysis)
return [(k, v) for k, v in emotions.items()], analysis['detailed_analysis'], report
except Exception as e:
return [("error", 0)], f"Error: {str(e)}", "Error generating report"
def generate_analysis(emotions):
descriptions = {
'happy': 'indicates joy and positive mood',
'angry': 'suggests frustration or displeasure',
'surprise': 'shows astonishment',
'fear': 'reflects anxiety or concern',
'neutral': 'displays a balanced state'
}
top_emotion = max(emotions.items(), key=lambda x: x[1])
return {
"primary_emotion": top_emotion[0],
"detailed_analysis": f"Primary emotion detected is {top_emotion[0]} ({top_emotion[1]:.1f}%), which {descriptions.get(top_emotion[0], '')}."
}
def generate_report(emotions, analysis):
return f"""Emotion Analysis Report
Primary Emotion: {analysis['primary_emotion'].upper()}
Confidence: {emotions[analysis['primary_emotion']]:.1f}%
All Detected Emotions:
""" + '\n'.join(f"- {k}: {v:.1f}%" for k, v in sorted(
emotions.items(),
key=lambda x: x[1],
reverse=True))
# Create Gradio interface
with gr.Blocks(theme=gr.themes.Soft()) as app:
gr.Markdown("# Facial Emotion Analysis System")
with gr.Row():
with gr.Column(scale=1):
input_image = gr.Image(type="numpy")
submit_btn = gr.Button("Analyze", variant="primary")
with gr.Column(scale=1):
emotion_scores = gr.Label(label="Emotion Scores")
analysis_text = gr.Textbox(label="Analysis", lines=3)
report_text = gr.Textbox(label="Full Report", lines=10)
download_btn = gr.Button("Download Report")
submit_btn.click(
fn=process_image,
inputs=[input_image],
outputs=[emotion_scores, analysis_text, report_text]
)
download_btn.click(
fn=lambda x: x,
inputs=[report_text],
outputs=[gr.File(label="Download Report")]
)
app.launch()