feat: expanded and added more tasks

This commit is contained in:
2026-07-08 23:33:26 +02:00
parent 8fdf69e11f
commit d0b776485a
97 changed files with 3121 additions and 427 deletions
-34
View File
@@ -1,34 +0,0 @@
# Aufgabe 01: Kamera-Feed anzeigen
## Ziel
Du lernst, ein Kamerabild per Code zu lesen und anzuzeigen.
## Aufgabe
Baue ein Programm, das eine USB-Kamera öffnet und den Live-Feed anzeigt.
## Mögliche Tools
- Python + OpenCV
- Rust + opencv crate
Empfehlung: Starte mit Python, damit du schneller Ergebnisse bekommst.
## Lernpunkte
- Kamera-Device öffnen
- Frames lesen
- FPS verstehen
- Auflösung einstellen
- Fehler behandeln, wenn keine Kamera gefunden wird
## Akzeptanzkriterien
- Live-Bild wird angezeigt.
- Programm beendet sauber mit `q` oder Ctrl+C.
- Kamera wird beim Beenden freigegeben.
## Erweiterung
Zeige FPS und Auflösung im Bild an.
@@ -0,0 +1,39 @@
# Aufgabe 01: Kamera öffnen und Frames anzeigen
## Ziel
Du öffnest eine Kamera und zeigst Live-Frames an.
## Warum ist das wichtig?
Alle späteren Vision-Funktionen hängen an einem stabilen Kamerazugriff.
## Voraussetzungen
- USB-Kamera oder Laptop-Kamera
- Python
- OpenCV
## Theorie
Eine Kamera liefert fortlaufend Frames mit Auflösung, Farbraum und Zeitstempel. Schon hier können Treiber, Berechtigungen und Latenz Probleme machen.
## Aufgabe
Baue `camera-preview`, das Kameraindex, Auflösung und Abbruch per Taste unterstützt.
## Akzeptanzkriterien
- Livebild wird angezeigt.
- Kameraindex ist konfigurierbar.
- Programm gibt Ressourcen sauber frei.
## Erweiterungen
- Speichere beim Start ein Diagnosebild.
## Reflexionsfragen
- Welche Auflösung reicht für Personenerkennung?
- Was passiert bei falschem Kameraindex?
- Warum muss `release` aufgerufen werden?
-48
View File
@@ -1,48 +0,0 @@
# Aufgabe 02: Personen zählen
## Ziel
Dein System soll erkennen, wie viele Personen im Kamerabild sichtbar sind.
## Aufgabe
Baue ein Programm:
```text
$ count-people
Ich sehe 2 Personen.
```
## Mögliche Ansätze
- YOLO-Modell verwenden
- OpenCV DNN
- fertige Python-Bibliothek für Object Detection
## Lernpunkte
- Object Detection vs. Classification
- Bounding Boxes
- Confidence Scores
- Klassenfilterung auf `person`
- Performance auf CPU vs. GPU
## Akzeptanzkriterien
- Personen werden im Bild mit Bounding Box markiert.
- Anzahl der Personen wird angezeigt.
- Niedrige Confidence-Werte werden gefiltert.
## Erweiterung
Biete das Ganze als HTTP-Endpoint an:
```text
GET /vision/people/count
```
Antwort:
```json
{"count": 2}
```
@@ -0,0 +1,38 @@
# Aufgabe 02: Frames lesen und Bilder speichern
## Ziel
Du speicherst Einzelbilder kontrolliert aus dem Kamerastream.
## Warum ist das wichtig?
Debugging von Vision-Modellen braucht reproduzierbare Testbilder.
## Voraussetzungen
- Aufgabe 01
- OpenCV
## Theorie
Ein gespeichertes Frame friert eine Situation ein. Damit kannst du Schwellenwerte und Modelle testen, ohne jedes Mal dieselbe Szene nachzustellen.
## Aufgabe
Erweitere die Preview um Snapshot-Funktion und speichere Bilder mit Timestamp und Metadaten.
## Akzeptanzkriterien
- Ein Tastendruck speichert ein Bild.
- Dateiname enthält Timestamp.
- Auflösung und Kameraindex werden protokolliert.
## Erweiterungen
- Speichere zusätzlich ein kleines JSON neben dem Bild.
## Reflexionsfragen
- Welche Metadaten helfen beim Debugging?
- Warum sind Testbilder sensibel?
- Wie organisierst du Beispielbilder?
@@ -0,0 +1,38 @@
# Aufgabe 03: FPS und Latenz messen
## Ziel
Du misst Bildrate und einfache Verarbeitungslatenz.
## Warum ist das wichtig?
Der Roboter muss schnell genug sehen, um den Kopf sinnvoll zu bewegen.
## Voraussetzungen
- Aufgaben 01-02
- Zeitmessung
## Theorie
FPS beschreibt Durchsatz, Latenz beschreibt Verzögerung. Beide Werte sind verschieden und für Robotik wichtig.
## Aufgabe
Baue eine FPS-Anzeige und miss die Zeit für Lesen, Verarbeiten und Anzeigen pro Frame.
## Akzeptanzkriterien
- FPS wird im Bild oder Terminal angezeigt.
- Einzelzeiten werden gemessen.
- Durchschnittswerte über mehrere Sekunden sind sichtbar.
## Erweiterungen
- Exportiere Messungen als CSV.
## Reflexionsfragen
- Warum ist hohe FPS nicht automatisch niedrige Latenz?
- Welche Verarbeitung ist teuer?
- Welche FPS reichen für Kopftracking?
@@ -0,0 +1,38 @@
# Aufgabe 04: OpenCV-Grundlagen anwenden
## Ziel
Du übst Resize, Farbräume, Crops und einfache Filter.
## Warum ist das wichtig?
Viele Modelle erwarten bestimmte Bildformate und Größen.
## Voraussetzungen
- Aufgaben 01-03
- OpenCV
## Theorie
Computer Vision beginnt oft mit Vorverarbeitung. Resize spart Rechenzeit, Farbräume ändern die Bedeutung von Pixelwerten, Crops reduzieren irrelevante Bereiche.
## Aufgabe
Baue ein Tool, das ein Kamerabild in Graustufen, RGB, HSV, Resize und Crop-Ansicht zeigt.
## Akzeptanzkriterien
- Mindestens drei Transformationen sind umschaltbar.
- Originalgröße und Ausgabegröße werden angezeigt.
- Code ist als wiederverwendbare Funktion strukturiert.
## Erweiterungen
- Füge Histogramm-Anzeige hinzu.
## Reflexionsfragen
- Wann verlierst du durch Resize relevante Details?
- Warum nutzt OpenCV oft BGR?
- Welche Transformation ist für YOLO unnötig?
@@ -0,0 +1,38 @@
# Aufgabe 05: Bounding Boxes zeichnen
## Ziel
Du zeichnest erkannte Bereiche mit Label und Confidence in Frames.
## Warum ist das wichtig?
Der Roboter muss Vision-Ergebnisse für Menschen und Logs sichtbar machen können.
## Voraussetzungen
- Aufgaben 01-04
- Koordinatenverständnis
## Theorie
Bounding Boxes übersetzen Modell-Ausgaben in Bildkoordinaten. Saubere Visualisierung hilft, Fehler bei Schwellenwerten und Skalierung zu sehen.
## Aufgabe
Schreibe eine Funktion, die Boxen, Labels und Scores auf ein Bild zeichnet und außerhalb liegende Koordinaten begrenzt.
## Akzeptanzkriterien
- Boxen werden korrekt gezeichnet.
- Labels bleiben lesbar.
- Ungültige Koordinaten crashen nicht.
## Erweiterungen
- Füge unterschiedliche Farben pro Klasse hinzu.
## Reflexionsfragen
- Welche Koordinatenformate gibt es?
- Wie erkennst du vertauschte x/y-Werte?
- Warum sind Labels in Debugbildern nützlich?
@@ -0,0 +1,38 @@
# Aufgabe 06: YOLO oder Detector integrieren
## Ziel
Du nutzt ein fertiges Objekterkennungsmodell auf Kamera-Frames.
## Warum ist das wichtig?
Personenzählung und Objektverständnis basieren auf Detektion statt auf reiner Klassifikation.
## Voraussetzungen
- Aufgaben 01-05
- YOLO/Ultralytics oder OpenCV DNN
## Theorie
Detektoren liefern Klassen, Boxen und Confidence. Sie sind probabilistisch und müssen mit Schwellenwerten interpretiert werden.
## Aufgabe
Integriere ein Modell und zeige erkannte Objekte im Livebild an.
## Akzeptanzkriterien
- Mindestens eine Objektklasse wird erkannt.
- Confidence wird angezeigt.
- Modellpfad oder Modellname ist konfigurierbar.
## Erweiterungen
- Teste CPU gegen GPU, falls verfügbar.
## Reflexionsfragen
- Warum reicht Bildklassifikation nicht?
- Welche Klassen sind für den Roboter nützlich?
- Wie gehst du mit langsamer Inferenz um?
+38
View File
@@ -0,0 +1,38 @@
# Aufgabe 07: Personen zählen
## Ziel
Du filterst Detektionen auf Personen und gibst die Anzahl aus.
## Warum ist das wichtig?
Der finale Agent soll Fragen wie "Wie viele Personen sind im Raum?" beantworten.
## Voraussetzungen
- Aufgabe 06
- Testbilder mit Personen
## Theorie
Zählen ist eine Interpretationsschicht über Detektion. Du musst Klassenfilter, Confidence und doppelte Boxen beachten.
## Aufgabe
Baue `count-people`, das Livebild oder Einzelbild verarbeitet und Anzahl plus Debugbild ausgibt.
## Akzeptanzkriterien
- Personen werden gezählt.
- Niedrige Confidence wird gefiltert.
- Debugbild zeigt gezählte Personen.
## Erweiterungen
- Biete `--image` und `--camera` Modi an.
## Reflexionsfragen
- Welche Personen werden übersehen?
- Wann zählt das System doppelt?
- Wie erklärst du Unsicherheit in der Antwort?
@@ -0,0 +1,37 @@
# Aufgabe 08: Confidence und NMS verstehen
## Ziel
Du experimentierst mit Confidence Thresholds und Non-Maximum Suppression.
## Warum ist das wichtig?
Falsche oder doppelte Detektionen machen Roboterantworten unglaubwürdig.
## Voraussetzungen
- Aufgaben 06-07
## Theorie
Confidence ist kein Wahrheitswert, sondern Modellvertrauen. NMS entfernt überlappende Boxen, damit ein Objekt nicht mehrfach gezählt wird.
## Aufgabe
Erstelle ein Experiment, das verschiedene Thresholds und NMS-Werte auf denselben Bildern vergleicht.
## Akzeptanzkriterien
- Mindestens drei Thresholds werden verglichen.
- Doppelte Boxen werden sichtbar reduziert.
- Entscheidung für Default-Werte ist begründet.
## Erweiterungen
- Visualisiere Ergebnisse als Kontaktbogen.
## Reflexionsfragen
- Warum ist hoher Threshold nicht immer besser?
- Was passiert bei überlappenden Personen?
- Welche Antwort sollte der Roboter bei Unsicherheit geben?
@@ -0,0 +1,38 @@
# Aufgabe 09: HTTP Vision Service bauen
## Ziel
Du stellst Personen- und Objektzählung als HTTP-Service bereit.
## Warum ist das wichtig?
Der Agent soll Vision als Tool nutzen, ohne direkt OpenCV-Code zu kennen.
## Voraussetzungen
- Aufgaben 06-08
- FastAPI oder Axum
## Theorie
Ein Service trennt Vision-Laufzeit von Agent-Logik. Schnittstellen müssen klein, stabil und testbar sein.
## Aufgabe
Baue Endpoints für `/health`, `/vision/people/count` und optional `/vision/objects`.
## Akzeptanzkriterien
- Healthcheck antwortet schnell.
- Personenanzahl kommt als JSON.
- Fehler enthalten verständliche Codes.
## Erweiterungen
- Füge Request-ID und einfache Metriken hinzu.
## Reflexionsfragen
- Warum ist HTTP hier einfacher als direkte Imports?
- Welche Daten sollte der Service nicht zurückgeben?
- Wie testest du den Endpoint ohne Kamera?
+19
View File
@@ -0,0 +1,19 @@
# Computer Vision
Kamera, OpenCV, Detektion, Personen zählen und ein HTTP Vision Service.
## Aufgaben
- [01: Kamera öffnen und Frames anzeigen](01-kamera-oeffnen-und-frames-anzeigen.md)
- [02: Frames lesen und Bilder speichern](02-frames-lesen-und-bilder-speichern.md)
- [03: FPS und Latenz messen](03-fps-und-latenz-messen.md)
- [04: OpenCV-Grundlagen anwenden](04-opencv-grundlagen-anwenden.md)
- [05: Bounding Boxes zeichnen](05-bounding-boxes-zeichnen.md)
- [06: YOLO oder Detector integrieren](06-yolo-oder-detector-integrieren.md)
- [07: Personen zählen](07-personen-zaehlen.md)
- [08: Confidence und NMS verstehen](08-confidence-und-nms-verstehen.md)
- [09: HTTP Vision Service bauen](09-http-vision-service-bauen.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.