# Misty II als KI- gestützter Sprach-Coach im Bildungskontext

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 📄](./Projektbeschreibung_MistySprachCoach.pdf) --- ## Installation & Setup ### Voraussetzungen - Misty II Roboter - The Misty App (offizielle Begleitapp von Misty II Roboter zur Einrichtung der WLAN-Verbindung und Ermittlung der IP-Adresse) - Ubuntu-Server im gleichen WLAN wie Misty II - Python 3.12 - FFmpeg ### Systempakete installieren ```bash sudo apt install ffmpeg ``` ### Python-Pakete installieren ```bash pip install -r requirements.txt ``` **Verwendete Pakete (u.a.):** - `openai-whisper` – KI-Sprachtranskription - `requests` – HTTP-Kommunikation mit Misty API - `websocket-client` – WebSocket-Verbindung für Bumper-Ereignisse - `flask` – Webserver für das Dashboard - `numpy` – Audiodatenverarbeitung - Misty Robotics API – REST-API und WebSocket-Schnittstelle zur Robotersteuerung Die vollständige Paketliste ist in der `requirements.txt` aufgeführt. ## Starten der Anwendung ⚠️ **Voraussetzung:** Misty II, der Ubuntu-Server und das Endgerät müssen alle im gleichen WLAN sein! ### Schritt 1 – Mit Server verbinden ```bash ssh misty2@192.168.68.62 # Passwort: misty2 ``` ### Schritt 2 – Umgebung aktivieren ```bash source ~/projekt_env/bin/activate cd ~/misty_stream ``` ### Schritt 3 – Misty IP aktualisieren ⚠️ **Mistys IP-Adresse ändert sich bei jedem Neustart!** 1. **Misty App** öffnen → aktuelle IP ablesen 2. IP in `config.py` eintragen: ```bash nano config.py # IP anpassen → Strg+O → Enter → Strg+X ``` Falls die Misty App nicht verfügbar ist, kann die IP so ermittelt werden: ```bash 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 ``` Sobald neben einer IP `{"result":` erscheint → **Strg+C** drücken – das ist Mistys aktuelle IP! ### Schritt 4 – Dashboard starten ```bash 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. ```bash ssh misty2@192.168.68.62 # Passwort: misty2 source ~/projekt_env/bin/activate cd ~/misty_stream python3 start_coaching.py ``` ### Schritt 6 – Coaching nutzen 1. Mistys Fuß drücken → Misty sagt „Ich höre dir zu" 2. Sprechen 3. 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 **🟢 Echtzeit-Überwachung** - Statusanzeige (wartend / aufnehmend / analysierend) – aktualisiert sich automatisch per SSE ohne Seitenrefresh - Heartbeat: prüft alle 5 Sekunden ob Misty erreichbar ist und zeigt Fehlermeldung wenn nicht **⚙️ Füllwörter verwalten** - Füllwörter können direkt vor oder zwischen Sessions im Dashboard hinzugefügt und entfernt werden - Standardliste: `["äh", "ähm", "ehm", "mhm", "hm", "halt", "also", "sozusagen", "irgendwie"]` **📊 Ergebnisse der aktuellen Session** - Anzahl der erkannten Füllwörter mit Vergleich zur vorherigen Session - Sprechtempo in Wörtern pro Minute mit Gauge-Anzeige (zu langsam / optimal / zu schnell) - Transkript des gesprochenen Textes - Mistys Gesichtsausdruck als Reaktion - Feedback-Text von Misty **📈 Sessionverlauf** - Zeigt alle vorhergegangenen Sessions mit Fortschrittsbalken **🔄 Automatischer Reset** - Dashboard und Sessionverlauf wird beim Start von `start_coaching.py` automatisch zurückgesetzt   > 📸 Eine Übersicht der Features im Dashboard sind als Screenshots hier abgebildet: [Screenshots\_Dashboard.pdf](./Screenshots_Dashboard.pdf)   ### 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 ← Mistys IP-Adresse (Achtung! muss mit jedem Neustart angepasst werden) ├── 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 ← wird automatisch erstellt/zurückgesetzt ├── requirements.txt ← Python-Pakete ├── README.md ├── LICENSE.md ├── misty_logo.png ├── Projektbeschreibung_MistySprachCoach.pdf ← Projektbericht ├── Screenshots_Dashboard.pdf ← Screenshots der Dashboardfunktionen ├── 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 (keine GPU vorhanden, wechselt aber automatisch auf FP32) - Livemodus (RTSP-Stream) wurde entwickelt aber als zu instabil eingestuft → liegt in `livemodus_experimentell/` --- ## 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](./LICENSE.md) – freie Nutzung und Weiterentwicklung erlaubt. Tiffany Brugger, Giulia Carli – PH Weingarten 2026