Communitygithub.com

Tennis-Video-Privatcoach

Analysiere ein Tennistrainingsvideo und erstelle einen detaillierten Coaching-Bericht. Erkennt jeden Schlag, trennt Vor- und Rückhänder, wählt die besten und schlechtesten Schläge aus, rendert Zeitlupen-Clips mit eingezeichnetem Schwungpfad, zählt Netz/Aus, überprüft Knie und Fußarbeit, vergleicht mit früheren Einheiten und schreibt einen konkreten Plan für das nächste Training.

Was ist Tennis-Video-Privatcoach?

Der Tennis-Video-Privatcoach ist ein KI-Agent-Skill, der Amateur-Tennisspielern hilft, ihr Spiel durch detaillierte Videoanalyse zu verbessern. Er nimmt ein Trainingsvideo entgegen und erstellt einen umfassenden Coaching-Bericht. Der Skill erkennt automatisch jeden Schlag, unterscheidet Vor- und Rückhänder und wählt die drei besten sowie die drei schlechtesten Schläge jeder Kategorie aus. Er rendert annotierte Zeitlupen-Clips, die den tatsächlichen Schwungpfad des Spielers zeigen, und überprüft, ob der Ball im Netz oder im Aus landet, sofern sichtbar. Der Bericht konzentriert sich nicht nur auf die Technik, sondern auch auf Kniebelastung und Fußarbeit, vergleicht die aktuelle Leistung mit früheren Sitzungen und schließt mit einem konkreten, umsetzbaren Übungsplan. Der Skill setzt auf eine Python-Umgebung mit ffmpeg und Ultralytics YOLO für die Posenbestimmung und ist für Spieler aller Niveaus konzipiert, die gegen eine Wand, Ballmaschine, einen Trainer oder Partner trainieren. Der Bericht wird als HTML-Seite ausgegeben und folgt einer strengen Struktur, die mit der Schlussfolgerung beginnt und jede Aussage mit Video-Beweisen untermauert.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zakezhang/tennis-video-review-public/tree/main/skills/tennis-video-private-coach

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Tennis-Video-Privatcoach?

Verwandle das Trainingsvideo eines Amateurspielers in eine Überprüfung, nach der er handeln kann: welcher Teil des Schlags zusammenbricht, welche Schläge es beweisen und was genau als Nächstes zu üben ist. Entwickelt für Anfänger bis fortgeschrittene Spieler, die gegen eine Wand, eine Ballmaschine, einen Trainer oder einen Trainingspartner schlagen.

Voraussetzungen: Eine Umgebung, die Python 3 und ffmpeg ausführen und pip-Pakete installieren kann (ultralytics, opencv-python, numpy, scipy, Pillow). Eine GPU hilft, ist aber nicht erforderlich.

0. Frage zuerst (nur, was du nicht bereits weißt)

  1. Welche Person im Bild ist der Spieler: Kleidungsfarben, Haare, Position. Trainer, Partner und Leute auf dem nächsten Platz sind oft im Bild.
  2. Schlaghand und ob die Rückhand ein- oder beidhändig ist (oder beides, während des Lernens).
  3. Niveau und Ziel: wie lange sie spielen und was sie erreichen wollen (z. B. "am Jahresende rallyn und einen Satz spielen").
  4. Umgebung: Trainingswand / Ballmaschine / Trainerzuführung / Rally; drinnen oder draußen.
  5. Kamera: hinten, Seite oder vorne; Telefonhöhe; Bildrate.
  6. Verletzungen: aktuelle Schmerzen in Knien, Schulter, Ellbogen oder Rücken. Wenn ja, erhalten Fußarbeit und Landungen besondere Aufmerksamkeit.
  7. Das eine Problem, das sie am meisten gelöst haben wollen (z. B. "viele Bälle fliegen lang" oder "mein Treffpunkt ist inkonsistent"). Der Bericht muss es ganz oben beantworten.
  8. Frühere Berichte, falls vorhanden, zum Vergleich.

1. Was der Bericht tun muss

  • Mit der Schlussfolgerung beginnen. Ein Satz zum größten Problem und der größten Verbesserung, dann die Details. Sei konkret und untermauere jede Kritik mit Beweisen; lobe nicht nur. Wenn eine vorherige Überprüfung etwas falsch hatte, sage dies ausdrücklich.
  • Jede Behauptung mit Video untermauern. Jeder Fall erhält einen annotierten Zeitlupen-Clip, der auf dem echten Filmmaterial des Spielers gezeichnet ist, keine Strichmännchen-Animation.
  • Standardmäßig 4 Kategorien × 3 Schläge: beste Vorhänder, schlechteste Vorhänder, beste Rückhänder, schlechteste Rückhänder (12 Clips). Jede Kategorie erhält eine 3-spaltige Vergleichstabelle und einen Satz dazu, was die drei Schläge gemeinsam haben. Wenn eine Kategorie weniger als 3 brauchbare Schläge hat, gib an, wie viele gefunden wurden.
  • Ein- und beidhändige Rückhänder getrennt halten. Wenn der Spieler beide übt, erhalten einhändige Schläge einen eigenen Abschnitt und werden von der Statistik der beidhändigen ausgeschlossen.
  • Die defekte Phase benennen: Ausholen / Schlägerkopf absenken / Treffpunkt / Durchschwungrichtung / Fußarbeit / Vorbereitungszeitpunkt / Behandlung hoher Bälle / Vorhand-Rückhand-Entscheidung.
  • Immer Knie und Fußarbeit überprüfen: Schlagen in der Luft, Landen auf einem Bein, Drehen auf einem gestreckten Bein.
  • Die Grenzen der Daten angeben: Stichprobengröße, wie viele Schläge unlesbar waren, Kamerawinkel-Verzerrung. Wenn etwas nicht gesehen werden kann, sag es, anstatt eine Zahl zu raten.
  • Mit einem umsetzbaren Plan enden: 2–4 Übungen mit Wiederholungen oder Minuten, plus der Bedingung für den Übergang zur nächsten Stufe.

2. Pipeline

2.1 Transkodieren und Audio extrahieren

  • 4K HEVC Telefonaufnahmen sind schwer. Erstelle eine 960 breite H.264-Analyse-Kopie: ffmpeg -i IN.MOV -vf scale=960:-2 -r 30 -an -c:v libx264 -preset veryfast -crf 24 p.mp4 (Einige Telefone zeichnen mit 29,97 fps auf; das Erzwingen von 30 hält die Zeitumrechnungen einfach.)
  • Audio separat extrahieren, um den Kontakt zu lokalisieren: ffmpeg -i IN.MOV -vn -ac 1 -ar 22050 a.wav
  • Lange Videos in 4–5 Minuten Blöcken verarbeiten, um Zeitüberschreitungen zu vermeiden. Bei vielen kurzen Clips, nimm zuerst ein Bild von jedem in ein Übersichtsblatt und entscheide, welche Clips brauchbare Aufnahmen von hinter dem Spieler sind und welche zu weit weg sind (diese nur zur Technikbetrachtung verwenden).
  • Bei Trainingswand-Sitzungen, erstelle auch eine gezoomte "Wand"-Kopie um die Netzlinie herum, um Netz/Aus zu beurteilen.

2.2 Posenbestimmung

  • Verwende ein Ultralytics YOLO Pose-Modell (yolo11n-pose.pt; yolo11m-pose.pt für mehr Genauigkeit). In Innenräumen reicht jedes 4. Bild bei imgsz 640, conf 0.3. Im Freien, wo Personen kleiner und zahlreicher sind, verwende jedes 2. Bild, imgsz 960, conf 0.25.
  • Verfolge die richtige Person. Bei einer Person im Bild, nimm die größte Box. Bei Trainern oder anderen Personen, bewerte jede Erkennung nach Kleidung: mittlere HSV-Helligkeit und -Sättigung innerhalb des Rumpf-Polygons (Schultern + Hüften) und die Farbe der Hüfte-zu-Knie-Region für Shorts/Hosen. Füge eine Strafe für große Sprünge vom vorherigen Frame hinzu, damit die Spur nicht die Person wechselt.
  • Entscheide links und rechts anhand der X-Koordinate im Bild, nicht anhand der Links/Rechts-Label des Modells. Von hinten ist die rechte Seite des Spielers die rechte Seite des Bildes.

2.3 Jeden Schwung finden

  • Ein Schwung ist ein Gipfel in der Handgelenksgeschwindigkeit: Frame-zu-Frame-Verschiebung des Handgelenks, das sich mehr bewegt, geteilt durch die Boxhöhe, geglättet über 2 Samples, Schwelle etwa 0.16 (für alle-4-Bilder-Abtastung; bei dichterer Abtastung herunterskalieren).
  • Mindestens 1,6 s zwischen den Gipfeln erforderlich. Ein Abstand von 1,0 s zählt die Erholung nach dem Durchschwung als zweiten Schwung. Normaler Rhythmus ist ein Schwung alle 3–4 s.
  • Vorhand oder Rückhand: im Fenster von 1,1 s bis 0,25 s vor dem Gipfel, auf welcher Seite der Hüftmitte sich der Mittelpunkt beider Hände befindet. Die Seite der Schlaghand bedeutet Vorhand. Einige werden falsch sein; bestätige Frame für Frame für jeden Schlag, den du zeigst.
  • Verankere jede Metrik unten am Handgelenksgeschwindigkeits-Gipfel (nennen wir ihn tp), damit Sitzungen vergleichbar bleiben.

2.4 Kontakt anhand des Tons lokalisieren

  • Hochpass bei 1500 Hz; berechne eine Energie-Hüllkurve über 110-Sample-Fenster; finde Gipfel, die mindestens 10 dB über dem Median der umgebenden 401 Fenster liegen und mindestens 50 Fenster auseinander.
  • In Sekunden umrechnen mit window_index × 110 / 22050. Multiplikation mit 0,005 als Abkürzung driftet etwa eine halbe Sekunde alle 4 Minuten und ruiniert die zweite Hälfte langer Videos.
  • Trainingswand: nimm den lautesten Gipfel, der mindestens 15 dB über dem Hintergrund innerhalb [tp−0,1, tp+0,55] s liegt, normalerweise 0,2–0,35 s nach tp. Der Ball, der etwa 0,45 s nach dem Kontakt die Wand trifft, ist auch laut; wähle ihn nicht.
  • Im Freien: Die Schläge des Trainers und andere Plätze fügen Rauschen hinzu. Suche [tp−0,45, tp+0,25] s; wenn nichts qualifiziert, verwende tp.
  • Für jeden Schlag, der in einem Clip landet, bestätige den echten Kontakt-Frame, indem du dir die Frames ansiehst.

2.5 Einhändige Rückhänder erkennen (wenn der Spieler diese lernt)

  • Unter den Rückhändern, nimm den maximalen Handgelenk-zu-Handgelenk-Abstand (geteilt durch die Rumpflänge) innerhalb von 0,7 s nach tp. Beidhändige halten beide Hände durch den Abschluss zusammen (normalerweise unter 1,5); einhändige öffnen den Nicht-Schlagarm nach hinten (normalerweise 2,0–2,5). Die Lücke ist klar; ein Schwellenwert um 1,95 funktioniert.
  • Nahe Kamerawinkel erzeugen falsch Positive; bestätige jeden Kandidaten visuell.
  • Für jeden Einhänder protokolliere: ob die Hand beim Ausholen über den Kopf geht, ob das Ausholen spät ist (wie ein Beidhänder aufgebaut, dann im letzten Moment hochgezogen), ob der Arm beim Kontakt gerade ist, die Höhe des Durchschwungs und das Ergebnis.
  • Einhänder-Checkliste (für jeden Punkt: wie es richtig aussieht / diese Sitzung / Urteil): Unit-Turn mit der anderen Hand am Schlägerhals, Ausholhöhe zwischen Brust und Schulter mit dem Schlägerkopf nach hinten zeigend, Schläger geht tief nach unten und schwingt dann tief nach oben, Kontakt vorne mit geradem Arm, anderer Arm öffnet sich nach hinten, Abschluss hoch und gehalten ohne dass sich die Brust früh öffnet, Knie gebeugt und Schritt nach vorne. Griff kann von hinten nicht gesehen werden; schlage vor, dass der Spieler es mit einem Trainer bestätigt.

2.6 Netz/Aus-Zählung (nur wenn der Ball sichtbar ist)

  • Trainingswand: Markiere die Netzlinie im gezoomten Wand-Video. Erstelle für jeden Schlag eine Kachel: sich bewegende gelbe Kleckse über die 30 Frames nach dem Kontakt, nach Zeit rot→grün dargestellt, plus die Bewegung des Vorhangs über der Netzlinie in einer zweiten Farbe. Beurteile jede Kachel visuell: Vorhang bewegt sich oder Ball trifft über der Linie = drin; Ball trifft die Platte und der Vorhang bewegt sich nicht = Netz; vom Spieler blockiert = unlesbar. Vollautomatische Beurteilung stimmt nur etwa zu 60% mit einem Menschen überein, verwende sie daher nur als Hinweis.
  • Abtastung: Beurteile 100 Schläge, gleichmäßig über die Sitzung verteilt, schließe unlesbare aus und melde Vorhand / Beidhänder / Einhänder getrennt. Überprüfe dann die 20 verdächtigsten verbleibenden Schläge, um zu sehen, ob Fehler in einer Periode gehäuft auftreten (normalerweise nach Ermüdung).
  • Im Freien: Mit sich bewegenden Bäumen im Hintergrund oder vielen Spielern in der Umgebung schlägt die farb- und bewegungsbasierte Ballerkennung meist fehl. Melde keinen Prozentsatz. Sage im Bericht, warum, wähle Beste/Schlechteste stattdessen nach Technik und gib Kameratipps, die eine Zählung möglich machen würden.

2.7 Technikmetriken (gemessen bei jedem Schwung)

MetrikWieWas es verrät
Vorhand-Hand über NaseAnteil der Frames in [tp−1.1, tp−0.25] mit dem Schlaghandgelenk über der NaseAusholen zu hoch, schwungvoller Schlag
Beide Hände über SchulternAnteil des gleichen Fensters mit beiden Handgelenken über SchultermitteRückhand-Schläger zu hoch gehalten
Tiefste KniebeugeMinimaler Hüfte-Knie-Knöchel-Winkel des vorderen Beins in [tp−0.6, tp+0.3], Median über die SchwüngeBeine zu gerade (eine Kamera von hinten unterschätzt die Vorwärtsbeugung; vergleiche nur mit dir selbst)
StandbreiteHorizontaler Knöchelabstand bei tp ÷ RumpflängeSchmaler Stand geht oft mit Hüpfen einher
Standfest und geradeEin Knöchel bewegt sich weniger als 0,4 Rumpflängen innerhalb von 0,7 s nach tp, und das Knie ist gerader als 155°Drehbelastung des Knies (häufig beim Drehen bei Rückhänden)
KontakthöhePosition der Schlaghand zwischen Hüfte (0) und Schulter (1), 0.07–0.2 s vor tpWie viele Bälle hoch sind und ob der Spieler die Position anpasst
Hüpfen / EinbeinlandungGezählt durch visuelle Überprüfung der Frames der gezeigten SchlägeNoch keine zuverlässige automatische Metrik
  • Bei langen Sitzungen, melde die erste und zweite Hälfte getrennt, um zu sehen, was mit Ermüdung zusammenbricht.
  • Wenn sich die Kamera, der Ort oder die Methode ändert, messe alte Videos entweder neu auf die neue Weise oder sage klar, dass die Zahlen nicht vergleichbar sind.

2.8 3 beste und 3 schlechteste auswählen

  • Beste: gutes Ergebnis (Ball kommt bequem über das Netz, landet tief) und ein vollständiger Schlag (Ausholen in Position, Schlägerkopf geht unter den Ball, voller Abschluss, beide Füße auf dem Boden). Verteile sie über die Sitzung.
  • Schlechteste: Netz, Himmelsbälle oder eindeutige Fehler; falls es nicht genug gibt, nimm die Schläge, bei denen der technische Fehler am klarsten ist. Bevorzuge Schläge, die verschiedene Ursachen zeigen oder die zusammen eine gemeinsame Ursache beweisen.
  • Vorauswahl aus den Ergebniskacheln, dann Bestätigung der Ursache anhand von Frame-für-Frame-Spielerblättern (0,9 s vor bis 0,5 s nach dem Kontakt). Stelle bei der Auswahl der schlechtesten Rückhänder sicher, dass es keine Einhänder sind.

2.9 Annotierte Zeitlupen-Clips rendern

  • Schneide etwa 3 s aus dem Original (beginnend 1,1–1,5 s vor dem Kontakt), beschneide den Bereich um den Spieler auf ungefähr 16:10, wobei der Spieler etwa 60% der Bildhöhe einnimmt, und skaliere auf 1280 Breite.
  • Führe die Posenbestimmung auf jedem Frame durch. Wähle vier Frames von Hand aus: Höhepunkt des Ausholens, Kontakt und Start und Ende des gezeichneten Pfades (ohne Bereitschaftsposition und Erholung). Automatische Kontakt-Frames sind oft falsch; überprüfe immer visuell.
  • Clip-Struktur:
    1. Echtgeschwindigkeit einmal.
    2. Viertelgeschwindigkeit, zeichne den Pfad der Schlaghand Frame für Frame (Vorhand = Schlaghandgelenk; Beidhänder = Mittelpunkt beider Handgelenke; Einhänder = Mittelpunkt vor dem Kontakt, Schlaghandgelenk danach), orange→cyan Farbverlauf, mit Bildunterschriften für jede Phase am unteren Rand.
    3. Einfrieren auf dem Höhepunkt des Ausholens für etwa 3 s, einkreisen (grün = korrekt, rot = Problem) mit einer kurzen Überschrift.
    4. Einfrieren beim Kontakt für etwa 3 s: weißer Kreis auf dem Kontaktpunkt (die automatische Position verfehlt oft den Ball, also von Hand setzen), gelber Kreis auf dem vorderen Knie mit seinem Winkel (bei Einhändern überspringen, wo die Beine seitlich überlappen).
    5. Einfrieren auf dem vollständigen Pfad. Bei den schlechtesten Clips, überlagere den besten Schlag der gleichen Art aus der Sitzung, von Pfadbeginn bis Kontakt, skaliert auf Rumpflänge und an der Schultermitte ausgerichtet, als animierte grüne gestrichelte Linie mit schwarzem Rand, plus einem Satz zur Korrektur.
  • Kodiere H.264, yuv420p, faststart, 960 breit, etwa 1–2,5 MB pro Clip. Erstelle ein Kontaktblatt mit 4 Frames aus jedem Clip, um zu überprüfen, dass Bildunterschriften nichts verdecken und Kreise an der richtigen Stelle landen.
  • Vermeide ✓ und ✗ in Bildunterschriften; vielen CJK-Schriftarten fehlen sie und zeigen Kästchen an.

3. Berichtsstruktur

Erstelle eine HTML-Seite (oder das Format, das der Benutzer wünscht) in dieser Reihenfolge:

  1. Urteil: Beantworte die Frage des Spielers direkt; größte Verbesserung, größtes Problem, Schlüsselzahlen; Korrekturen zur vorherigen Überprüfung. Darunter ein Statistik-Streifen (Schwünge nach Schlagart, abgetastete Netzrate oder "nicht gezählt" mit Grund, eine oder zwei Schlüsselmetriken).
  2. Ursachen: Gruppiere die Probleme in 2–3 Ursachen, jede mit einem Beispiel mit Zeitstempel.
  3. Beste vs. Schlechteste: 4 Gruppen, jede mit 3 Clips, einer 3-spaltigen Tabelle (Ausholen, Absenken, Kontakt, Abschluss, Füße, Knie-Winkel) und einem Satz zum Muster.
  4. Vergleich mit dem letzten Mal: Was sich beim besten und schlechtesten Schlag geändert hat, als Tabelle plus Clips nebeneinander.
  5. Einhändige Rückhand (falls geübt): Statistiken, Checkliste, 3 gute und 3 schlechte Clips, Schlag-für-Schlag-Liste und Ratschlag, ob es jetzt weiter trainiert werden sollte.
  6. Knie und Fußarbeit: Metrikentabelle und Risiken sortiert in "Priorität / beobachten / verbessern", jedes mit einer Korrektur. Stelle klar, dass dies keine medizinische Beratung ist, und empfehle, bei Schwellungen, Einklappen, Nachgeben oder länger als eine Woche anhaltenden Schmerzen einen Sportmediziner aufzusuchen.
  7. Was als nächstes zu üben ist: siehe Abschnitt 5.
  8. Kameratipps (falls das Filmmaterial Lücken hatte).
  9. Fußzeile: Datenquelle, Stichprobenumfang, Messdefinitionen, Kameraeinschränkungen.

Optionale Gestaltungsrichtung: eine Tennis-Palette, mit Hartplatz-Blau als Hauptfarbe, Ballgelb nur für Schlüsselzahlen und Highlights, Grasgrün für "gut" und Sandrot für "Problem". Kondensierte Ziffern für ein Scoreboard-Gefühl. Sowohl im hellen als auch im dunklen Modus lesbar, ohne horizontales Scrollen auf einem Telefon.

4. Häufige Fehler und Korrekturen

Klassifiziere, was du siehst, zuerst mit dieser Tabelle, dann beweise es mit konkreten Schlägen.

SymptomÜbliche UrsacheWie es sich im Video zeigtKorrektur
Vorhand ins Netz, AbwärtsschwungAusholen über dem Kopf, große Schleife, Schläger kann nicht rechtzeitig absenkenSchlaghand über dem...

… [für die Übersetzung abgeschnitten]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills