Marcel0123 commited on
Commit
ba086ac
·
verified ·
1 Parent(s): a709a27

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +6 -14
app.py CHANGED
@@ -25,7 +25,7 @@ EN_TO_NL = {
25
  "sad": "Verdrietig",
26
  "surprise": "Verrast",
27
  "angry": "Boos",
28
- "anger": "Boos", # sommige modellen geven 'anger'
29
  "disgust": "Walging",
30
  "fear": "Bang",
31
  "contempt": "Minachting",
@@ -36,7 +36,7 @@ def to_dutch(label: str) -> str:
36
  if not label:
37
  return "Onbekend"
38
  key = label.strip().lower()
39
- return EN_TO_NL.get(key, label) # fallback naar originele label als onbekend
40
 
41
  def visualize(image, det_res, fer_res):
42
  output = image.copy()
@@ -44,12 +44,10 @@ def visualize(image, det_res, fer_res):
44
 
45
  for det, fer_type in zip(det_res, fer_res):
46
  bbox = det[0:4].astype(np.int32)
47
- # Modelbeschrijving -> NL label
48
  fer_type_str_en = FacialExpressionRecog.getDesc(fer_type)
49
  fer_type_str_nl = to_dutch(fer_type_str_en)
50
 
51
  cv.rectangle(output, (bbox[0], bbox[1]), (bbox[0]+bbox[2], bbox[1]+bbox[3]), (0, 255, 0), 2)
52
- # Iets grotere en vettere tekst
53
  cv.putText(output, fer_type_str_nl, (bbox[0], max(0, bbox[1] - 10)),
54
  cv.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2, cv.LINE_AA)
55
 
@@ -67,16 +65,11 @@ def summarize_emotions(fer_res):
67
  if not fer_res:
68
  return "## **Geen gezicht gedetecteerd**"
69
 
70
- # Haal Engelstalige labels uit het model en map naar NL
71
  names_en = [FacialExpressionRecog.getDesc(x) for x in fer_res]
72
  names_nl = [to_dutch(n) for n in names_en]
73
  counts = Counter(names_nl).most_common()
74
  top, top_n = counts[0]
75
-
76
- # Compacte lijst: "Blij (2), Neutraal (1)"
77
  details = ", ".join([f"{name} ({n})" for name, n in counts])
78
-
79
- # Grote headline + toelichting
80
  return f"# **{top}**\n\n_Gedetecteerde emoties: {details}_"
81
 
82
  def detect_expression(input_image):
@@ -86,7 +79,6 @@ def detect_expression(input_image):
86
 
87
  dets = detect_model.infer(image)
88
  if dets is None:
89
- # Geen gezichten
90
  emotion_md = summarize_emotions([])
91
  return cv.cvtColor(image, cv.COLOR_BGR2RGB), emotion_md
92
 
@@ -122,8 +114,8 @@ custom_css = """
122
  """
123
 
124
  with gr.Blocks(css=custom_css, theme=gr.themes.Default()) as demo:
125
- gr.Markdown("## Herkenning van gezichtsuitdrukkingen ")
126
- gr.Markdown("Detecteert gezichten en herkent gezichtsuitdrukkingen ")
127
 
128
  with gr.Row():
129
  with gr.Column(scale=1):
@@ -132,9 +124,9 @@ with gr.Blocks(css=custom_css, theme=gr.themes.Default()) as demo:
132
  submit_btn = gr.Button("Verstuur", variant="primary")
133
  clear_btn = gr.Button("Wissen")
134
  with gr.Column(scale=1):
135
- # Grote emotie-uitkomst bovenaan
136
- emotion_md = gr.Markdown(value="## **Nog geen resultaat**", elem_id="emotie-uitslag")
137
  output_image = gr.Image(type="numpy", label="Resultaat gezichtsuitdrukking")
 
138
 
139
  # Output(s) leegmaken bij nieuwe upload
140
  def _clear_output_on_new_image():
 
25
  "sad": "Verdrietig",
26
  "surprise": "Verrast",
27
  "angry": "Boos",
28
+ "anger": "Boos",
29
  "disgust": "Walging",
30
  "fear": "Bang",
31
  "contempt": "Minachting",
 
36
  if not label:
37
  return "Onbekend"
38
  key = label.strip().lower()
39
+ return EN_TO_NL.get(key, label) # fallback naar origineel indien onbekend
40
 
41
  def visualize(image, det_res, fer_res):
42
  output = image.copy()
 
44
 
45
  for det, fer_type in zip(det_res, fer_res):
46
  bbox = det[0:4].astype(np.int32)
 
47
  fer_type_str_en = FacialExpressionRecog.getDesc(fer_type)
48
  fer_type_str_nl = to_dutch(fer_type_str_en)
49
 
50
  cv.rectangle(output, (bbox[0], bbox[1]), (bbox[0]+bbox[2], bbox[1]+bbox[3]), (0, 255, 0), 2)
 
51
  cv.putText(output, fer_type_str_nl, (bbox[0], max(0, bbox[1] - 10)),
52
  cv.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2, cv.LINE_AA)
53
 
 
65
  if not fer_res:
66
  return "## **Geen gezicht gedetecteerd**"
67
 
 
68
  names_en = [FacialExpressionRecog.getDesc(x) for x in fer_res]
69
  names_nl = [to_dutch(n) for n in names_en]
70
  counts = Counter(names_nl).most_common()
71
  top, top_n = counts[0]
 
 
72
  details = ", ".join([f"{name} ({n})" for name, n in counts])
 
 
73
  return f"# **{top}**\n\n_Gedetecteerde emoties: {details}_"
74
 
75
  def detect_expression(input_image):
 
79
 
80
  dets = detect_model.infer(image)
81
  if dets is None:
 
82
  emotion_md = summarize_emotions([])
83
  return cv.cvtColor(image, cv.COLOR_BGR2RGB), emotion_md
84
 
 
114
  """
115
 
116
  with gr.Blocks(css=custom_css, theme=gr.themes.Default()) as demo:
117
+ gr.Markdown("## Herkenning van gezichtsuitdrukkingen (FER) met OpenCV DNN")
118
+ gr.Markdown("Detecteert gezichten en herkent gezichtsuitdrukkingen met YuNet + MobileFaceNet (ONNX).")
119
 
120
  with gr.Row():
121
  with gr.Column(scale=1):
 
124
  submit_btn = gr.Button("Verstuur", variant="primary")
125
  clear_btn = gr.Button("Wissen")
126
  with gr.Column(scale=1):
127
+ # Eerst de afbeelding, DAARONDER de emotie-uitslag
 
128
  output_image = gr.Image(type="numpy", label="Resultaat gezichtsuitdrukking")
129
+ emotion_md = gr.Markdown(value="## **Nog geen resultaat**", elem_id="emotie-uitslag")
130
 
131
  # Output(s) leegmaken bij nieuwe upload
132
  def _clear_output_on_new_image():