Der Mimik-Spiegel
Deine Webcam wird zum Lesegerät: Ein Programm liest im Sekundentakt aus deinem Gesicht, welche Gefühle es dort vermutet — und du erlebst, wie aus Pixeln Wahrscheinlichkeiten werden.
Kurz gesagt
Was: Ein kleines Python-Programm öffnet deine Kamera, sucht dein Gesicht und schätzt Bild für Bild, wie viel Freude, Überraschung, Ärger, Trauer darin steckt. Du siehst die Prozentzahlen live neben deinem Gesicht.
Warum: Du begreifst am eigenen Leib das Herzstück von Teil II — dieselbe Bilderkennung, die später Pferd und Pflanze liest, arbeitet hier an dir. Und du spürst das Unbehagen, das dazu gehört: Eine Maschine liest ein Signal aus dir heraus, das du nicht gesendet hast.
Du brauchst: einen Rechner mit Webcam und Python. Kein Modelltraining — die schwere Arbeit steckt in einer fertigen, offenen Bibliothek.
Worum es geht
Schon ein Säugling liest Gesichter, bevor er ein Wort versteht. Das Gesicht ist das ehrlichste Blatt des Körpers: Es bewegt sich oft schneller, als wir es steuern können, und verrät in Sekundenbruchteilen, was wir vielleicht verbergen wollten. Genau diese Lesbarkeit macht es zum naheliegendsten Ziel, wenn eine Maschine ehrliche Signale lesen lernen soll.
Der Weg der Maschine ist derselbe wie beim Werkzeugkasten der KI: Eine Kamera liefert ein Bild, ein Modell sucht zuerst feste Punkte — Mundwinkel, Augenbrauen, Lider — und rechnet aus deren Stellung zueinander Wahrscheinlichkeiten für Gefühlsausdrücke aus. Trainiert wurde es an Hunderttausenden von Hand etikettierten Gesichtsfotos: wieder ein Werk offener Datensätze und Gemeinschaften. In der KI-Landkarte dieses Buches sitzt der Mimik-Spiegel in der Mitte — ein Momentaufnahme-Modell, das für jedes einzelne Bild neu entscheidet, ohne Gedächtnis. Das ist wichtig für die nächste Aktivität (9.2): Erst deine Auswertung, nicht das Modell, macht daraus einen Verlauf.
Ein bisschen Hintergrund
Von Pixeln zu Prozenten. Das Modell gibt dir keine Wahrheit, sondern eine Verteilung: „72 % Freude, 15 % Überraschung, …“. Diese Zahlen sind das Selbstvertrauen des Modells, kein Messwert deines Innenlebens. Ein hochgezogener Mundwinkel ist ein Lächeln — nicht zwingend Freude. Menschen lächeln aus Höflichkeit, Verlegenheit, sogar aus Schmerz.
HSEmotion. Wir benutzen eine offene, schlanke Bibliothek für Gesichts-Emotionen
(hsemotion), die auf einem kleinen, vortrainierten Netz läuft — schnell genug für Live-Bilder,
ganz ohne Grafikkarte. Die Gesichtssuche übernimmt OpenCV. Beides hat eine offene Gemeinschaft gebaut
und verschenkt; vor zwanzig Jahren hätte dieselbe Demo ein Forschungslabor gebraucht.
Nur dein eigenes Gesicht
Diese Aktivität richtet die Kamera auf dich selbst — sie ist ein Spielzeug der Selbsterkenntnis. Richte sie nicht ungefragt auf andere. Dieselbe Kamera, heimlich auf einen anderen Menschen gerichtet, ist Überwachung; der Unterschied liegt allein in der Einwilligung. Nimm nichts auf, speichere keine Bilder, und wenn ihr zu zweit arbeitet, filmt jede nur sich selbst.
Einrichten
- Python-Pakete installieren. In einer Konsole:
pip install hsemotion opencv-python. Beim ersten Start lädt HSEmotion sein kleines Modell automatisch nach. - Kamera freigeben. Betriebssystem fragt beim ersten Lauf nach der Kamera-Erlaubnis — bestätigen. Andere Programme, die die Kamera belegen (Videochat!), schliessen.
- Programm starten. Skript speichern (unten) und ausführen. Ein Fenster mit deinem Kamerabild öffnet sich, mit einem Rahmen um dein Gesicht und der erkannten Emotion.
- Beenden. Taste q im Fenster drücken.
Das Programm
Rund dreissig Zeilen — die ganze schwere Arbeit steckt in den zwei Bibliotheken. Der vollständige, kommentierte Code liegt auf GitHub.
import cv2
from hsemotion.facial_emotions import HSEmotionRecognizer
# Modell laden (erkennt Freude, Trauer, Aerger, Ueberraschung, Angst, Ekel, Neutral)
fer = HSEmotionRecognizer(model_name="enet_b0_8_best_afew")
# Gesichts-Sucher von OpenCV
detector = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
cam = cv2.VideoCapture(0) # 0 = eingebaute Kamera
print("Fenster aktiv — Taste q beendet.")
while True:
ok, frame = cam.read()
if not ok:
break
grau = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gesichter = detector.detectMultiScale(grau, 1.3, 5)
for (x, y, w, h) in gesichter:
ausschnitt = frame[y:y+h, x:x+w] # nur das Gesicht
emotion, wahrsch = fer.predict_emotions(ausschnitt, logits=False)
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 180, 0), 2)
cv2.putText(frame, emotion, (x, y-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 180, 0), 2)
cv2.imshow("Mimik-Spiegel", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cam.release()
cv2.destroyAllWindows()
Was du sehen solltest
Ein grüner Rahmen um dein Gesicht und darüber ein Wort, das im Sekundentakt wechselt. Lächle — meist springt es auf Happiness. Zieh die Brauen zusammen — oft Anger oder Neutral. Spiel mit Übergängen. Achte darauf, wie sicher das Modell bei klaren Ausdrücken ist und wie es bei feinen, gemischten Mienen ins Schwanken gerät — genau dort wird sichtbar, dass es Ausdrücke misst, keine Gefühle.
Arbeitsblatt
Vom Ausdruck zur Wahrscheinlichkeit
- Zeig dem Spiegel nacheinander sechs Ausdrücke (Freude, Überraschung, Ärger, Trauer, Angst, neutral). Bei welchen ist das Modell treffsicher, bei welchen unsicher? Notiere.
- Setz ein höfliches Lächeln auf, wie man es einer fremden Person schenkt, ohne echte Freude zu empfinden. Was zeigt das Modell? Was sagt dir das über den Unterschied zwischen Ausdruck und Gefühl?
- Verändere das Licht: einmal von vorn, einmal von der Seite, einmal von hinten (Gegenlicht). Wie stabil bleibt die Erkennung? Warum ist Licht so entscheidend?
- Das Modell wurde vor allem an bestimmten Gesichtern trainiert. Nenne zwei Gründe, warum es bei manchen Menschen schlechter lesen könnte als bei anderen — und warum das kein Randproblem ist.
- Der Mimik-Spiegel ist ein Momentaufnahme-Modell. Was heisst das genau, und wie würdest du daraus einen Verlauf über eine Stunde machen? (Das ist Aktivität 9.2.)
Lösung anzeigen
1. Individuell. Typisch: Freude wird sehr sicher erkannt (klarer, eindeutiger Ausdruck), Angst und Ekel oft unsicher, weil sie sich mimisch ähneln und seltener klar gezeigt werden. „Neutral“ ist ein häufiger Rückfallwert.
2. Meist zeigt das Modell trotzdem „Happiness“ — es misst die Muskelstellung (hochgezogene Mundwinkel), nicht dein Erleben. Das ist der Kernpunkt: Ein Lächeln ist ein Ausdruck, kein Beweis für Freude. Menschen lächeln aus Höflichkeit, Verlegenheit oder Schmerz.
3. Bei Seiten- und Gegenlicht bricht die Erkennung oft ein, weil das Netz auf gleichmässig ausgeleuchtete Frontalgesichter trainiert ist. Licht bestimmt, welche Punkte im Gesicht überhaupt sichtbar sind — fehlen sie, rät das Modell.
4. Erstens waren in vielen Trainingsdaten helle Gesichter überrepräsentiert und dunkle unterrepräsentiert, weshalb solche Systeme bei manchen Menschen deutlich ungenauer sind. Zweitens drücken nicht alle Kulturen Gefühle gleich aus. Das ist kein Randproblem: Es entscheidet, wem ein Werkzeug dient und wem es schadet.
5. „Momentaufnahme“ heisst: Das Modell entscheidet für jedes Bild einzeln, ohne sich an das vorige zu erinnern. Einen Verlauf bekommst du, indem du das Modell im Sekundentakt laufen lässt und die Ergebnisse mit Zeitstempel speicherst — die Zeit steckt dann in deiner Auswertung, nicht im Modell.
Wenn's klemmt
| Problem | Wahrscheinliche Ursache & Lösung |
|---|---|
Fenster bleibt schwarz / cam.read() schlägt fehl | Kamera von einem anderen Programm belegt (Videochat, Browser). Alles schliessen; ggf. Kamera-Index 0 auf 1 ändern, wenn mehrere Kameras da sind. |
| Kein Gesicht wird gefunden | Zu wenig Licht oder Gesicht zu klein/schräg im Bild. Näher ran, gleichmässiges Licht von vorn, gerade in die Kamera schauen. |
ModuleNotFoundError | Pakete fehlen. pip install hsemotion opencv-python — bei mehreren Python-Versionen die richtige erwischen (python -m pip …). |
| Läuft, aber ruckelt stark | Gesichtssuche in jedem Bild ist teuer. Nur jedes dritte Bild auswerten, oder das Kamerabild vor der Suche verkleinern. |
| Emotion springt wild hin und her | Normal bei einem gedächtnislosen Modell. In 9.2 glättest du das, indem du über einige Sekunden mittelst. |
Zum Nachdenken
- Der Mimik-Spiegel misst einen Ausdruck, kein Gefühl. Wer diese Übersetzung zu schnell macht, überschätzt die Technik — das ist der häufigste Fehler im ganzen Feld. Ein Lächeln heisst nicht „glücklich“, ein zusammengezogener Brauenbogen nicht „wütend“.
- Auf dich selbst gerichtet ist die Kamera ein Werkzeug der Selbsterkenntnis; auf andere gerichtet, ohne ihr Wissen, ist sie Überwachung. Das Werkzeug ist dasselbe — der Unterschied liegt allein in der Einwilligung. Merke: Was du über andere herausfindest, gehört ihnen, nicht dir.
- Dieselbe Bilderkennung, die hier dein Gesicht liest, liest in Teil III die Haltung eines Hundes und in Teil IV das Spektrogramm einer Pflanze. Ein Sinn, allen anderen geliehen — das ist der heimliche Hauptdarsteller dieses Buches.
Erweiterung
- Wahrscheinlichkeiten einblenden. Lass dir mit
fer.predict_emotions(..., logits=False)die volle Verteilung geben und zeichne die drei stärksten Emotionen mit ihren Prozentzahlen ins Bild. So siehst du das Zögern des Modells, nicht nur seinen Favoriten. - Spiegel zu zweit. Sitzt euch gegenüber (jede filmt sich selbst) und versucht, denselben Ausdruck zu zeigen. Erkennt das Modell euch gleich gut? Ein erster, ehrlicher Blick auf die Frage der Fairness.
- Brücke zu 9.2. Häng an jede Vorhersage einen Zeitstempel und schreib sie in eine Datei — das ist schon der halbe Weg zur „Stimmung über eine Stunde“.