feat: expanded and added more tasks
This commit is contained in:
@@ -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?
|
||||
@@ -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?
|
||||
@@ -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?
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user