HGI / app.py
Dapphari's picture
Update app.py
fe7f349 verified
import gradio as gr
import tensorflow as tf
import numpy as np
def load_labels(filename):
with open(filename, "r") as file:
return [line.strip() for line in file.readlines()]
# Function to load the trained model and predict emotion
def model_prediction(test_image):
model = tf.keras.models.load_model("model/keras_model.h5")
image = tf.keras.preprocessing.image.load_img(test_image, target_size=(48, 48), color_mode="grayscale")
input_arr = tf.keras.preprocessing.image.img_to_array(image) / 255.0
input_arr = np.expand_dims(input_arr, axis=0)
predictions = model.predict(input_arr)
return predictions
labels = load_labels("labels.txt")
def get_color(value):
if value >= 75:
return "label_red"
elif value >= 50:
return "label_yellow"
else:
return "label_green"
def create_colored_box(value):
color_class = get_color(value)
return gr.Label(value=f"{value:.2f}%", elem_id=color_class)
def predict_emotion(test_image):
predictions = model_prediction(test_image)
emotion_index = np.argmax(predictions)
emotion_probability = predictions[0][emotion_index] * 100
emotion_name = labels[emotion_index]
# Predict level of danger based on emotion
danger_level = 0
if emotion_name == "sad":
danger_level = min(100, emotion_probability * 1.2)
elif emotion_name == "fearful":
danger_level = min(100, emotion_probability * 1.5)
elif emotion_name == "fake_expression":
danger_level = 70 # Example fixed percentage for fake expression
return (
emotion_name,
create_colored_box(emotion_probability),
create_colored_box(danger_level)
)
def home():
return (
"# Welcome to Emotion Analysis for Women Safety! 🌟\n\n"
"Our mission is to analyze facial emotions and assess the level of potential danger based on detected expressions. "
"This tool is designed to assist in identifying situations where immediate action might be needed to ensure safety.\n\n"
"### Features\n"
"- Detect facial emotions with high accuracy.\n"
"- Predict potential danger levels based on emotion analysis.\n"
"- User-friendly interface for seamless experience.\n\n"
"### How to Use\n"
"1. Upload an image showing the face.\n"
"2. View detected emotions and danger percentage.\n"
"3. Take necessary actions based on insights."
)
with gr.Blocks(css="""
.label_green { background-color: green; color: white; }
.label_yellow { background-color: yellow; color: black; }
.label_red { background-color: red; color: white; }
""") as demo:
gr.Markdown("# Emotion Analysis for Women Safety")
gr.Image("logo.webp")
with gr.Tabs():
with gr.TabItem("Home"):
gr.Markdown(home())
with gr.TabItem("Emotion Analysis"):
gr.Markdown("## Upload a facial image for emotion analysis:")
test_image = gr.Image(type="filepath", label="Upload Image")
with gr.Row():
predict_btn = gr.Button("Analyze Emotion")
emotion_label = gr.Label(label="Detected Emotion")
probability_label = gr.Label(label="Emotion Probability")
danger_label = gr.Label(label="Danger Level (%)")
predict_btn.click(predict_emotion, inputs=test_image, outputs=[
emotion_label,
probability_label,
danger_label
])
demo.launch()