| __pycache__ | ||
| livemodus | ||
| old | ||
| static | ||
| templates | ||
| .gitignore | ||
| analyse.py | ||
| aufnahme.wav | ||
| config.py | ||
| dashboard.py | ||
| fuellwoerter.json | ||
| LICENSE.md | ||
| misty_logo.png | ||
| README.md | ||
| session_daten.json | ||
| start_coaching.py | ||
Misty Sprach-Coach
🤖 Misty II Roboter als interaktiver KI-gestützter Sprach-Coach für den Bildungsbereich
🎙️ Erkennt Füllwörter und analysiert das Sprechtempo von Sprechproben mithilfe von OpenAI Whisper
💬 Gibt direktes Feedback per Sprache und Gesichtsausdruck
📊 Lehrende können Ergebnisse in Echtzeit auf einem Web-Dashboard verfolgen
Dieses Projekt wurde im Rahmen des Moduls "M2 Entwicklung Interaktiver Medien" im Masterstudiengang Medien- und Bildungsmanagement (MBM) an der Pädagogischen Hochschule Weingarten entwickelt. Eine ausführliche Beschreibung des Projektes findest du hier: Projektbeschreibung 📄
Installation & Setup
Voraussetzungen
- Misty II Roboter
- The Misty App (offizielle Begleitapp von Misty II Roboter zur Ermittlung der Wlan-Verbindung und IP-Adressen-Anzeige)
- Ubuntu-Server im gleichen WLAN wie Misty II
- Python 3.12
- FFmpeg
Installation & Setup
Systempakete installieren
sudo apt install ffmpeg
Python-Pakete installieren
pip install -r requirements.txt
Verwendete Pakete:
openai-whisper– KI-Sprachtranskriptionrequests– HTTP-Kommunikation mit Misty APIwebsocket-client– WebSocket-Verbindung für Bumper-Ereignisseflask– Webserver für das Dashboardnumpy– Audiodatenverarbeitung
Wichtiger Hinweis vor dem Start
⚠️ Mistys IP-Adresse ändert sich bei jedem Neustart!
- Misty einschalten und hochfahren lassen
- Misty App öffnen → aktuelle IP ablesen und notieren (wird später benötigt)
Falls die Misty App nicht verfügbar ist, kann die IP so gefunden werden:
for i in $(seq 50 80); do echo -n "192.168.68.$i: "; curl -s --connect-timeout 1 http://192.168.68.$i/api/device | head -c 20; echo; done
Starten
Schritt 1 – Mit Server verbinden
ssh misty2@192.168.68.62
# Passwort: misty2
Schritt 2 – Umgebung aktivieren
source ~/projekt_env/bin/activate
cd ~/misty_stream
Schritt 3 – Misty IP aktualisieren
nano config.py
# IP anpassen → Strg+O → Enter → Strg+X
Schritt 4 – Dashboard starten (Terminal 1)
python3 dashboard.py
Dashboard im Browser aufrufen:
http://192.168.68.62:5000
Schritt 5 – Coaching starten
⚠️ Für diesen Schritt ein weiteres PowerShell-Fenster öffnen – das aktuelle Terminal läuft für das Dashboard weiter.
ssh misty2@192.168.68.62
source ~/projekt_env/bin/activate
cd ~/misty_stream
python3 start_coaching.py
Schritt 6 – Coaching nutzen
- Mistys Fuß drücken → Misty sagt „Ich höre dir zu"
- Sprechen
- Mistys Fuß nochmal drücken → Aufnahme stoppt
Misty analysiert die Aufnahme und gibt Feedback per Sprache und Gesichtsausdruck. Die Ergebnisse werden automatisch im Dashboard angezeigt. Für eine weitere Session einfach wieder den Fuß drücken – das Skript läuft dauerhaft und beliebig viele Sessions sind hintereinander möglich.
Programm beenden
Strg+C
Dashboard
Aufruf: http://192.168.68.62:5000
Features
- Statusanzeige in Echtzeit (wartend / aufnehmend / analysierend)
- Letzte Session: Füllwörter, Sprechtempo, Transkript, Gesicht, Feedback
- Sessionverlauf mit Fortschrittsbalken
- Füllwörter verwalten: hinzufügen und entfernen
- Fehlermeldung wenn Misty nicht erreichbar
- Live-Updates per SSE (Server-Sent Events) – kein Seitenrefresh nötig
- Heartbeat: prüft alle 5 Sekunden ob Misty erreichbar ist
- Wird beim Start von start_coaching.py automatisch zurückgesetzt
Füllwörter anpassen
Die Füllwortliste kann direkt im Dashboard verwaltet werden. Änderungen gelten ab der nächsten Session.
Standardliste:
["äh", "ähm", "ehm", "mhm", "hm", "halt", "also", "sozusagen", "irgendwie"]
Feedback-Logik
| Füllwörter | Tempo | Gesicht |
|---|---|---|
| 0–2 | 90–150 W/min | e_Love.jpg ❤️ |
| 0–2 | außerhalb | e_Contempt.jpg 😏 |
| 3+ | 90–150 W/min | e_Contempt.jpg 😏 |
| 3+ | außerhalb | e_Sadness.jpg 😢 |
Sprechtempo:
- unter 90 W/min → zu langsam
- 90–150 W/min → optimal
- über 150 W/min → zu schnell
Ordnerstruktur
misty_stream/
├── config.py ← Misty IP-Adresse (Achtung! Ändert sich mit jedem Neustart)
├── analyse.py ← KI-Modul: Whisper, Füllwörter, Sprechtempo, Feedback
├── start_coaching.py ← Hauptskript: Bumper-Trigger + Aufnahme + Heartbeat
├── dashboard.py ← Flask-Webserver für Dashboard (Port 5000)
├── fuellwoerter.json ← Füllwortliste (über Dashboard anpassbar)
├── session_daten.json ← Session wird automatisch erstellt/zurückgesetzt
├── README.md
├── LICENSE
├── requirements.txt
├── templates/
│ └── dashboard.html ← Dashboard-Oberfläche
├── static/
│ ├── e_Love.jpg ← Mistys Gesichtsausdrücke
│ ├── e_Contempt.jpg
│ ├── e_Sadness.jpg
│ └── e_DefaultContent.jpg
└── livemodus_experimentell/ ← Live-Stream (experimentell, nicht im Hauptworkflow)
├── misty_start_av.py
├── misty_stop_av.py
└── whisper_live_check.py
Bekannte Einschränkungen
- Mistys IP ändert sich bei jedem Neustart → immer in Misty App nachschauen
- Whisper base-Modell transkribiert nicht immer perfekt – small wäre genauer aber auf dem Server ohne GPU zu langsam
- FP16-Warnung im Terminal ist harmlos (kein GPU vorhanden)
- Livemodus (RTSP-Stream) wurde entwickelt aber als zu instabil eingestuft → liegt in
livemodus_experimentell/ - Programm nur per Strg+C beendbar
Mögliche Weiterentwicklungen
- Größeres Whisper-Modell (small/medium) auf leistungsstärkerer Hardware
- Livemodus stabilisieren für Echtzeit-Feedback
- Persistente Datenspeicherung über Sessions hinaus
- Mehrsprachige Unterstützung
- Benutzerverwaltung im Dashboard für mehrere Schüler
Lizenz
MIT License – freie Nutzung und Weiterentwicklung erlaubt.
Tiffany Brugger, Giulia Carli – PH Weingarten 2026