3.6 KiB
🐍 SnakeCam Debug-Lesson: Fehlerprotokoll & Erkenntnisse
🧪 Kontext
Ziel war es, die Raspberry Pi Kamera mit Python (OpenCV + Flask) so zu verbinden, dass:
- Das Videobild korrekt (nicht gespiegelt) angezeigt wird.
- Gesten wie "wave" und "fist" erkannt werden.
- Das Ganze kindgerecht, stabil und motivierend läuft.
Ergebnis: "Wave" klappt, "Fist" nicht mehr. Frust hoch, Zeitverlust enorm.
🧨 Fehler, die Zeit gekostet haben
1. ❌ Unicode-Emoji im UTF-8 Terminal
print("\U0001f40d Starte SnakeCam ...")
➡️ Führte zu UnicodeEncodeError auf Systemen mit latin-1 (z. B. bash über SSH).
Lösung: entweder .encode('utf-8') oder einfach durch Text ersetzen.
2. ❌ Spiegelung doppelt – Python flip & CSS flip
- Im Python-Code war
cv2.flip(frame, 1)aktiv. - Gleichzeitig war im HTML oder CSS
transform: scaleX(-1)gesetzt.
Effekt: Spiegelung wurde wieder aufgehoben, UI und echte Geste stimmten nicht überein. Lösung: Nur eine Stelle darf flippen.
3. ❌ Gestenlogik durch Refactoring verschoben
- Bei der Umstellung auf
gestures_v4.pywurde die bisher funktionierende Fist-Erkennung nicht übernommen. - Neue Version prüfte nur auf "wave" oder hatte harte Schwellwerte, die die Faust nicht erfüllte.
Lösung: Vergleich mit gestures_debug.py oder v2 zurückziehen, detect_fist() separat debuggen.
4. ❌ Template-Fehler: url_for('log_answer')
- HTML hatte einen Verweis auf eine Flask-Route
log_answer, die nicht existierte. - Führte zu 500er Error beim Aufruf von
/.
Lösung: Entweder Route in app.py ergänzen oder <form>-Block entfernen/ändern.
5. ❌ run.sh ohne ausführbare Berechtigung
- Nach
mv gestures_v4 gestures_v4.shund zurück konnte./run.shnicht mehr gefunden werden. - Oft lag's an Pfad, Dateirechten oder Working Directory.
Lösung: chmod +x run.sh oder python3 app.py direkt nutzen.
6. ❌ Flächenberechnung ohne Geste
-
Kamera erkennt Fläche konstant, z. B.:
[debug] Fläche erkannt: 5673Aber: keine Geste wird zurückgegeben, außer "wave".
Ursache: vermutlich zu enge Bedingung (z. B. nur 1 Defekt + Schwellwert).
Lösung: Geste "fist" neu kalibrieren oder aus älterer Version übernehmen.
📚 Lehren für die Krümelterminals
- 🔁 Wenn etwas funktioniert, baue darauf auf – nicht gleich alles neu strukturieren.
- 🧠 Kinder brauchen sofortiges Feedback (z. B. Geste erkannt, Farbe ändert sich, Ton spielt).
- ⚠️ Fehler sollten sichtbar, aber nicht entmutigend sein. Also: nicht 7h Fehler suchen.
- 📸 Kamerabild sollte sofort sichtbar & spiegelverkehrt (für Selfie-Effekt), aber nicht doppelt gespiegelt sein.
✅ Nächste Schritte
- Fist-Erkennung debuggen (zurück zu funktionierender Version und Schwellen checken)
gestures_v4.pyauf das Notwendige reduzieren- Debug-Overlay mit Farben, Feedback oder ASCII-Symbolen ergänzen
- Dokumentation & Logging vereinheitlichen (KrümelLog?)
📦 Fazit
Ein kleiner 🐍-Fehler kann viele Stunden kosten. Wenn du Kinder motivieren willst, braucht es klare, einfache Resultate – nicht neue Architekturen mitten im Lauf.
Symbolsatz für SnakeCam:
- ✋ = wave
- ✊ = fist
- 🤘 = rock
- 🤖 = nothing, but cool
#KrümelPhilosophie: Der Code muss nicht perfekt sein, aber verständlich. Jeder Fehler darf ein Abenteuer sein – aber nicht eine Sackgasse.
💚 Danke für dein Vertrauen trotz Frust. Nächstes Mal mit einem Wuuuuhuuu™ weniger Debug, mehr Flow.
– Deine 🐍 SnakeSupportUnit