Dart Detection Training Data Capture is a data claude skill built by willneverusegit. Best for: Computer vision engineers building dart detection models capture labeled training/test videos with frame-level annotations and batch validation reporting..
- What it does
- Systematically record dart hit videos, annotate ground truth data, and validate detection pipeline performance with quality metrics.
- Category
- data
- Created by
- willneverusegit
- Last updated
Dart Detection Training Data Capture
Systematically record dart hit videos, annotate ground truth data, and validate detection pipeline performance with quality metrics.
Skill instructions
name: capture-training-data description: Systematically capture dart hit videos and annotate with ground truth data. Trigger when user says: "capture training data", "record new video", "annotate ground truth", "run batch validation", "test hit rate", "improve detection", "new test video", "Trainingsdaten aufnehmen", "neues Video aufnehmen", "Ground Truth annotieren", "Batch-Validierung laufen".
Skill: capture-training-data
Systematisch Dart-Treffer-Videos und Ground-Truth-Daten aufnehmen, um die Single-Cam Dart-Erkennung zu verbessern.
Wann verwenden
- User will neue Trainings-/Testvideos für die Detection aufnehmen
- Ground-Truth-Annotation eines neuen Videos ist nötig
- Batch-Validierung: wie gut erkennt die aktuelle Pipeline die neuen Videos?
- Schwachstellen der Detection identifizieren (Sektor X funktioniert schlecht)
Workflow
Schritt 1: Video aufnehmen
# Einzelwurf-Clip (empfohlen: 5-10 Sekunden, zeigt Vorbereitungs- + Einschlagsmoment)
python scripts/record_camera.py --duration 10 --show
# Mit expliziter Auflösung (Standardempfehlung für CPU-Budget: 640x480)
python scripts/record_camera.py --duration 10 --resolution 640x480 --show
# Längere Session (mehrere Würfe in einem Clip)
python scripts/record_camera.py --duration 60 --show
Namenskonvention: Das Script erzeugt automatisch testvids/rec_YYYYMMDD_HHMMSS.mp4.
Aufnahme-Checkliste:
- [ ] Kamera fest montiert, kein Wackeln
- [ ] Beleuchtung gleichmäßig, keine harten Schatten auf Dartboard
- [ ] ArUco-Marker sichtbar (alle 4 Ecken im Frame)
- [ ] Dart startet außerhalb des Boards, landet dann
- [ ] Nach dem Einschlag kurz (2-3s) stillhalten
Schritt 2: Ground Truth annotieren
# Interaktiv — öffnet Video, zeigt Frames, fragt nach Treffer-Info
python scripts/add_ground_truth.py testvids/rec_YYYYMMDD_HHMMSS.mp4
# Einzelwurf direkt angeben (Segment Ring Timestamp)
python scripts/add_ground_truth.py testvids/rec_YYYYMMDD_HHMMSS.mp4 --throw "20 triple 3.2"
# Zusammenfassung aller annotierten Videos anzeigen
python scripts/add_ground_truth.py --summary
# Bestehende Einträge validieren
python scripts/add_ground_truth.py --validate
Annotationsformat (gespeichert in testvids/ground_truth.yaml):
rec_YYYYMMDD_HHMMSS.mp4:
throws:
- sector: 20
ring: triple
timestamp: 3.2 # Sekunden im Video
- sector: 5
ring: single
timestamp: 7.8
Gültige ring-Werte: single, double, triple, bull_inner, bull_outer, miss
Gültige sector-Werte: 1-20, 25 (Bull), 0 (Miss)
Schritt 3: Qualitätskontrolle
Vor der Batch-Validierung: kurze manuelle Prüfung des Videos.
# Frame-Diff-Diagnose: zeigt wo Pipeline Motion detektiert
python -m src.diagnose
Qualitätskriterien (manuell prüfen): | Kriterium | Gut | Problematisch | |-----------|-----|---------------| | Schärfe | Dart-Spitze erkennbar | Verwackelt/unscharf | | Belichtung | Gleichmäßig, keine Überbelichtung | Harte Schatten, Glare | | ArUco-Marker | Alle 4 im Frame | Marker teilweise abgeschnitten | | Kamerawinkel | Frontal oder leicht seitlich | Sehr schräg (>45°) | | Bewegungsartefakte | Nur Dart bewegt sich | Hintergrund-Bewegung (Personen etc.) |
Schritt 4: Batch-Validierung
# Alle Videos in testvids/ gegen aktuelle Detection testen
python scripts/test_all_videos.py --marker-size 100 --marker-spacing 365
# Nur ein bestimmtes Video
python scripts/test_all_videos.py --source-dir testvids --marker-size 100 \
--max-frames 5000
# Schnell-Test mit weniger Frames (für iteratives Debugging)
python scripts/test_all_videos.py --marker-size 100 --marker-spacing 365 --max-frames 1000
Ausgabe interpretieren:
Hit Rate: Wie viele annotierte Würfe wurden überhaupt detektiert? Ziel: >80%Score Accuracy: Wie viele detektierte Treffer haben den richtigen Sektor? Ziel: >70%- Videos mit <50% Hit Rate → Aufnahmeproblem (Belichtung, Winkel, ArUco)
- Videos mit >80% Hit Rate aber <60% Score Accuracy → Kalibrierproblem
Schritt 5: Schwachstellen identifizieren
Nach der Batch-Validierung systematisch schauen:
# Validierungs-Script für detailliertere Fehleranalyse
python scripts/validate_ground_truth.py
# Tip-Detection gegen Diagnostik-Captures prüfen
python scripts/validate_tip_detection.py
Typische Schwachstellen:
- Bestimmte Sektoren (z.B. 1, 5, 20 oben) → Kalibrierung verfeinern
- Nur Triple-Ring schlägt fehl → Tip-Detection-Threshold anpassen
- Alle Würfe auf einer Seite falsch → Board-Geometrie-Kalibrierung wiederholen
Vollständiger Beispiel-Workflow
# 1. Aufnahme: 3 Würfe in 30 Sekunden
python scripts/record_camera.py --duration 30 --show
# → erzeugt testvids/rec_20260324_140000.mp4
# 2. Annotieren
python scripts/add_ground_truth.py testvids/rec_20260324_140000.mp4
# → interaktiv Sektor/Ring/Timestamp eingeben
# 3. Annotierungen validieren
python scripts/add_ground_truth.py --validate
# 4. Batch-Test laufen lassen
python scripts/test_all_videos.py --marker-size 100 --marker-spacing 365
# 5. Ergebnisse analysieren und ggf. Kalibrierung verfeinern
Häufige Probleme
ArUco nicht erkannt:
- Marker-Größe prüfen: Standard
100mm, Abstand365mm - Beleuchtung verbessern
- Auflösung erhöhen:
--resolution 1280x720
Dart wird nicht detektiert (Hit Rate = 0%):
- Pipeline läuft? App muss nicht laufen —
test_all_videos.pyist standalone - Kalibrierung fehlt?
config/calibration_config.yamlprüfen - Frame-Diff-Threshold zu hoch? Adaptive Thresholds in
config/app_config.yamlanpassen
Hohe Hit Rate, falscher Sektor:
- Board-Geometrie-Kalibrierung wiederholen (Web-UI → Kalibrierung)
- Kalibrierungs-Kette beachten: Lens → Board Pose → Stereo (Reihenfolge!)
Video zu groß / Storage-Problem:
- Kurze Clips bevorzugen (5-15s pro Wurf)
- Videos in
testvids/werden nicht committed (.gitignore) - Nur
ground_truth.yamllandet im Repo
Referenzen
scripts/record_camera.py— Kamera-Aufnahmescripts/add_ground_truth.py— Ground-Truth-Annotationscripts/test_all_videos.py— Batch-Validierungscripts/validate_ground_truth.py— Annotations-Validierungscripts/validate_tip_detection.py— Tip-Detection-Checksrc/cv/frame_diff_pipeline.py— Detection-Pipelinesrc/cv/tip_detection.py— Dart-Spitzen-Erkennungtestvids/ground_truth.yaml— Ground-Truth-Datenagent_docs/current_state.md→ Abschnitt "Verifizierte Kennzahlen" für aktuelle Hit Rate Baseline
Use this skill
Most skills are portable instruction packages. Claude Code supports SKILL.md directly. Other agents can use adapted files like AGENTS.md, .cursorrules, and GEMINI.md.
Claude Code
Save SKILL.md into your Claude Skills folder, then restart Claude Code.
mkdir -p ~/.claude/skills/dart-detection-training-data-capture && curl -L "https://raw.githubusercontent.com/willneverusegit/dart-vision-claude/2fabc25b67ad61d93b33f0126c8ad8725491407d/.claude/skills/capture-training-data/SKILL.md" -o ~/.claude/skills/dart-detection-training-data-capture/SKILL.mdInstalls to ~/.claude/skills/dart-detection-training-data-capture/SKILL.md.
Use cases
Computer vision engineers building dart detection models capture labeled training/test videos with frame-level annotations and batch validation reporting.
Reviews
No reviews yet. Be the first to review this skill.
No signup required