Update app.py
Browse files
app.py
CHANGED
@@ -173,10 +173,48 @@ else:
|
|
173 |
example_list = [[p] for p in example_paths]
|
174 |
CACHE_EXAMPLES = bool(example_list)
|
175 |
|
176 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
custom_css = """
|
178 |
#emotie-uitslag { color: #16a34a; }
|
179 |
#emotie-uitslag h1, #emotie-uitslag h2, #emotie-uitslag h3 { margin: 0.25rem 0; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
"""
|
181 |
|
182 |
with gr.Blocks(css=custom_css) as demo:
|
@@ -194,11 +232,11 @@ with gr.Blocks(css=custom_css) as demo:
|
|
194 |
output_image = gr.Image(type="numpy", label="Resultaat gezichtsuitdrukking")
|
195 |
emotion_md = gr.Markdown("## **Nog geen resultaat**", elem_id="emotie-uitslag")
|
196 |
|
197 |
-
# Rij 2: Links mugshots (Examples), Rechts statistieken
|
198 |
with gr.Row():
|
199 |
with gr.Column():
|
200 |
gr.Markdown("**Voorbeelden (klik om te testen):**")
|
201 |
-
|
202 |
examples=example_list,
|
203 |
inputs=input_image,
|
204 |
outputs=[output_image, emotion_md], # <- 2 outputs
|
@@ -206,6 +244,9 @@ with gr.Blocks(css=custom_css) as demo:
|
|
206 |
examples_per_page=20,
|
207 |
cache_examples=CACHE_EXAMPLES
|
208 |
)
|
|
|
|
|
|
|
209 |
with gr.Column():
|
210 |
stats_image = gr.Image(
|
211 |
label="Statistieken",
|
|
|
173 |
example_list = [[p] for p in example_paths]
|
174 |
CACHE_EXAMPLES = bool(example_list)
|
175 |
|
176 |
+
# Uitlegblok (HTML) – netjes opgemaakt
|
177 |
+
INFO_HTML = """
|
178 |
+
<div>
|
179 |
+
<h3>Hoe werkt deze gezichtsuitdrukking-herkenner?</h3>
|
180 |
+
<p>Dit model kan automatisch acht emoties herkennen in een foto van een gezicht:</p>
|
181 |
+
<ul>
|
182 |
+
<li>neutraal</li>
|
183 |
+
<li>blij</li>
|
184 |
+
<li>verdrietig</li>
|
185 |
+
<li>verrast</li>
|
186 |
+
<li>boos</li>
|
187 |
+
<li>walging</li>
|
188 |
+
<li>angstig</li>
|
189 |
+
<li>minachting</li>
|
190 |
+
</ul>
|
191 |
+
<p>Je kunt hierboven een eigen foto uploaden of een voorbeeld aanklikken. Het systeem doorloopt twee stappen:</p>
|
192 |
+
<ol>
|
193 |
+
<li><b>Gezichtsdetectie</b> – met <i>YuNet</i> wordt het gezicht in de afbeelding gelokaliseerd.</li>
|
194 |
+
<li><b>Emotieherkenning</b> – het gevonden gezicht wordt door <i>MobileFaceNet</i> geanalyseerd om de meest waarschijnlijke emotie te voorspellen.</li>
|
195 |
+
</ol>
|
196 |
+
<p>Deze modellen zijn getraind met <b>machine learning</b>. Voor dit type taak <b>is supervised training gebruikt</b>:
|
197 |
+
er is gewerkt met een grote dataset van gezichten waarbij elke foto een label (zoals “blij” of “boos”) heeft. Tijdens het trainen leert het model welke combinaties van gezichtskenmerken bij welke emotie horen.</p>
|
198 |
+
<p>Door heel veel voorbeelden te zien, kan het model ook bij nieuwe foto’s een inschatting maken. Het kijkt niet naar één detail, maar naar patronen in het hele gezicht.</p>
|
199 |
+
</div>
|
200 |
+
"""
|
201 |
+
|
202 |
+
# CSS (groene emotietekst + uitlegblok styling)
|
203 |
custom_css = """
|
204 |
#emotie-uitslag { color: #16a34a; }
|
205 |
#emotie-uitslag h1, #emotie-uitslag h2, #emotie-uitslag h3 { margin: 0.25rem 0; }
|
206 |
+
|
207 |
+
/* Uitlegblok onder de mugshots */
|
208 |
+
#uitleg-blok {
|
209 |
+
background: #f3f4f6; /* lichtgrijs */
|
210 |
+
border: 1px solid #e5e7eb; /* subtiele rand */
|
211 |
+
border-radius: 10px;
|
212 |
+
padding: 12px 14px;
|
213 |
+
}
|
214 |
+
#uitleg-blok h3 { margin: 6px 0 8px 0; }
|
215 |
+
#uitleg-blok p { margin: 6px 0; }
|
216 |
+
#uitleg-blok ul { margin: 6px 0 6px 18px; }
|
217 |
+
#uitleg-blok ol { margin: 6px 0 6px 18px; }
|
218 |
"""
|
219 |
|
220 |
with gr.Blocks(css=custom_css) as demo:
|
|
|
232 |
output_image = gr.Image(type="numpy", label="Resultaat gezichtsuitdrukking")
|
233 |
emotion_md = gr.Markdown("## **Nog geen resultaat**", elem_id="emotie-uitslag")
|
234 |
|
235 |
+
# Rij 2: Links mugshots (Examples + uitleg), Rechts statistieken
|
236 |
with gr.Row():
|
237 |
with gr.Column():
|
238 |
gr.Markdown("**Voorbeelden (klik om te testen):**")
|
239 |
+
gr.Examples(
|
240 |
examples=example_list,
|
241 |
inputs=input_image,
|
242 |
outputs=[output_image, emotion_md], # <- 2 outputs
|
|
|
244 |
examples_per_page=20,
|
245 |
cache_examples=CACHE_EXAMPLES
|
246 |
)
|
247 |
+
# Uitlegblok onder de mugshots
|
248 |
+
gr.HTML(INFO_HTML, elem_id="uitleg-blok")
|
249 |
+
|
250 |
with gr.Column():
|
251 |
stats_image = gr.Image(
|
252 |
label="Statistieken",
|