Dapphari commited on
Commit
dd5f337
·
verified ·
1 Parent(s): 64f524d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -30
app.py CHANGED
@@ -2,21 +2,31 @@ import gradio as gr
2
  import tensorflow as tf
3
  import numpy as np
4
 
5
- def load_labels(filename):
6
- with open(filename, "r") as file:
7
- return [line.strip() for line in file.readlines()]
8
 
9
- # Function to load the trained model and predict emotion
10
- def model_prediction(test_image):
11
- model = tf.keras.models.load_model("keras_model.h5")
12
- image = tf.keras.preprocessing.image.load_img(test_image, target_size=(48, 48), color_mode="grayscale")
13
- input_arr = tf.keras.preprocessing.image.img_to_array(image) / 255.0
14
- input_arr = np.expand_dims(input_arr, axis=0)
15
- predictions = model.predict(input_arr)
16
- return predictions
17
 
18
  labels = load_labels("labels.txt")
19
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  def get_color(value):
21
  if value >= 75:
22
  return "label_red"
@@ -25,31 +35,40 @@ def get_color(value):
25
  else:
26
  return "label_green"
27
 
 
28
  def create_colored_box(value):
29
  color_class = get_color(value)
30
  return gr.Label(value=f"{value:.2f}%", elem_id=color_class)
31
 
 
32
  def predict_emotion(test_image):
33
- predictions = model_prediction(test_image)
34
- emotion_index = np.argmax(predictions)
35
- emotion_probability = predictions[0][emotion_index] * 100
36
- emotion_name = labels[emotion_index]
37
-
38
- # Predict level of danger based on emotion
39
- danger_level = 0
40
- if emotion_name == "sad":
41
- danger_level = min(100, emotion_probability * 1.2)
42
- elif emotion_name == "fearful":
43
- danger_level = min(100, emotion_probability * 1.5)
44
- elif emotion_name == "fake_expression":
45
- danger_level = 70 # Example fixed percentage for fake expression
46
 
47
- return (
48
- emotion_name,
49
- create_colored_box(emotion_probability),
50
- create_colored_box(danger_level)
51
- )
 
 
 
 
 
 
 
52
 
 
 
 
 
 
 
 
 
 
53
  def home():
54
  return (
55
  "# Welcome to Emotion Analysis for Women Safety! 🌟\n\n"
@@ -65,13 +84,15 @@ def home():
65
  "3. Take necessary actions based on insights."
66
  )
67
 
 
68
  with gr.Blocks(css="""
69
  .label_green { background-color: green; color: white; }
70
  .label_yellow { background-color: yellow; color: black; }
71
  .label_red { background-color: red; color: white; }
72
  """) as demo:
73
  gr.Markdown("# Emotion Analysis for Women Safety")
74
- gr.Image("logo.webp")
 
75
  with gr.Tabs():
76
  with gr.TabItem("Home"):
77
  gr.Markdown(home())
 
2
  import tensorflow as tf
3
  import numpy as np
4
 
5
+ # Load the trained model once to optimize performance
6
+ model = tf.keras.models.load_model("keras_model.h5")
 
7
 
8
+ # Load labels from the file
9
+ def load_labels(filename):
10
+ try:
11
+ with open(filename, "r") as file:
12
+ return [line.strip() for line in file.readlines()]
13
+ except FileNotFoundError:
14
+ return ["happy", "sad", "angry", "fearful", "surprised", "neutral", "fake_expression"]
 
15
 
16
  labels = load_labels("labels.txt")
17
 
18
+ # Process the input image and get predictions
19
+ def model_prediction(test_image):
20
+ try:
21
+ image = tf.keras.preprocessing.image.load_img(test_image, target_size=(48, 48), color_mode="grayscale")
22
+ input_arr = tf.keras.preprocessing.image.img_to_array(image) / 255.0
23
+ input_arr = np.expand_dims(input_arr, axis=0)
24
+ predictions = model.predict(input_arr)
25
+ return predictions
26
+ except Exception as e:
27
+ return str(e)
28
+
29
+ # Generate color-coded danger levels
30
  def get_color(value):
31
  if value >= 75:
32
  return "label_red"
 
35
  else:
36
  return "label_green"
37
 
38
+ # Create a styled label box
39
  def create_colored_box(value):
40
  color_class = get_color(value)
41
  return gr.Label(value=f"{value:.2f}%", elem_id=color_class)
42
 
43
+ # Predict emotion and danger level
44
  def predict_emotion(test_image):
45
+ try:
46
+ predictions = model_prediction(test_image)
47
+ if isinstance(predictions, str): # Handle error
48
+ return ("Error", predictions, "N/A")
 
 
 
 
 
 
 
 
 
49
 
50
+ emotion_index = np.argmax(predictions)
51
+ emotion_probability = predictions[0][emotion_index] * 100
52
+ emotion_name = labels[emotion_index]
53
+
54
+ # Calculate danger level
55
+ danger_level = 0
56
+ if emotion_name == "sad":
57
+ danger_level = min(100, emotion_probability * 1.2)
58
+ elif emotion_name == "fearful":
59
+ danger_level = min(100, emotion_probability * 1.5)
60
+ elif emotion_name == "fake_expression":
61
+ danger_level = 70 # Example fixed percentage for fake expression
62
 
63
+ return (
64
+ emotion_name,
65
+ create_colored_box(emotion_probability),
66
+ create_colored_box(danger_level)
67
+ )
68
+ except Exception as e:
69
+ return ("Error", str(e), "N/A")
70
+
71
+ # Home tab content
72
  def home():
73
  return (
74
  "# Welcome to Emotion Analysis for Women Safety! 🌟\n\n"
 
84
  "3. Take necessary actions based on insights."
85
  )
86
 
87
+ # Gradio Interface
88
  with gr.Blocks(css="""
89
  .label_green { background-color: green; color: white; }
90
  .label_yellow { background-color: yellow; color: black; }
91
  .label_red { background-color: red; color: white; }
92
  """) as demo:
93
  gr.Markdown("# Emotion Analysis for Women Safety")
94
+ gr.Image("logo.webp", elem_id="app_logo", show_label=False, label="App Logo")
95
+
96
  with gr.Tabs():
97
  with gr.TabItem("Home"):
98
  gr.Markdown(home())