Zum Inhalt springen
dan felser @felsr
Sport KI 10

Laufanalyse aus einem Handyvideo

1 Claude Code öffnen — nicht die App, der Prompt installiert etwas  2 Prompt reinhauen  3 dein Laufvideo schicken, wenn er danach fragt.

Ich will meine Laufform aus einem Video von mir messen lassen. Nicht schaetzen,
nicht mit einer App, die mir eine Note gibt, sondern gemessen -- und bei jeder
Zahl will ich wissen, ob sie belegt ist oder geraten.

Du machst das komplett. Ich lege keinen Ordner an, installiere nichts von Hand
und schreibe keinen Code. Sprich Deutsch mit mir, geh Schritt fuer Schritt vor
und halt an, wenn du etwas von mir brauchst.

Am Ende will ich drei Dinge haben: mein Video mit einer eingeblendeten Analyse --
farbiges Skelett, Messwerte, ein mitlaufender Kniewinkel und ein Verlaufsdiagramm
mit jedem erkannten Bodenkontakt. Eine Zahl fuer die Schrittfrequenz und eine
fuer den Fussaufsatzwinkel. Und eine ehrliche Liste, welche Groessen aus meinem
Clip NICHT messbar waren und warum.


SCHRITT 1: UMGEBUNG

Leg einen Ordner "laufanalyse" an und arbeite darin.

Pruef, ob Python da ist. Wenn nicht, hilf mir bei der Installation. Leg eine
virtuelle Umgebung an, damit nichts an meinem System haengen bleibt.

Installiere diese Pakete und lies vorher kurz die aktuelle Doku, damit du die
richtigen Aufrufe benutzt und nicht die aus deinem Gedaechtnis:

  rtmlib             die Bibliothek, die das Posenmodell RTMPose ausfuehrt
                     github.com/Tau-J/rtmlib -- Lizenz Apache 2.0
  onnxruntime        fuehrt das Modell aus
  opencv-python      Video lesen und schreiben
  pillow             das Overlay zeichnen, mit echter Schrift
  numpy, scipy       die Rechnerei

Nimm aus rtmlib das Modell BodyWithFeet. Es liefert 26 Koerperpunkte je Bild,
und zwar einschliesslich FERSE, GROSSZEHE und KLEINZEHE. Das ist der Grund fuer
genau dieses Modell: Ohne Fusspunkte gibt es keinen Fussaufsatzwinkel, und der
ist die Zahl, um die es beim Laufen geht. Die verbreiteten 17-Punkte-Modelle
haben den Knoechel als tiefsten Punkt und hoeren da auf.

Eine Falle bei der Installation, die dich sonst Rechenzeit kostet: Auf einem Mac
mit Apple-Chip laeuft das Modell nur dann auf der Grafikeinheit, wenn
onnxruntime nicht zu neu ist. Ab Version 1.27 faellt es still auf die CPU
zurueck und schreibt nur eine Warnung. Installiere onnxruntime in Version 1.26.0
und pruef danach, ob CoreMLExecutionProvider verfuegbar ist. Der Unterschied ist
gross: Ein Clip von sechs Sekunden braucht so eine halbe Minute, auf der CPU
ueber zehn Minuten.

Pruef auch, ob ffmpeg da ist. Wenn nicht, hilf mir es zu installieren.


SCHRITT 2: MEIN VIDEO PRUEFEN, BEVOR DU RECHNEST

Frag mich nach der Datei. Die Aufnahme entscheidet ueber das Ergebnis, nicht die
Rechnung.

Wandle den Clip zuerst mit ffmpeg nach H.264 um, auch wenn er abspielbar
aussieht. Handyvideos vom iPhone kommen als HEVC mit Dolby Vision und tragen die
Drehung nur als Vermerk in der Datei, nicht in den Bildern selbst. OpenCV liest
diesen Vermerk NICHT. Ohne Umwandlung bekommt das Modell liegende Bilder und
findet darin niemanden -- oder Schlimmeres: Es findet etwas, und du merkst nie,
dass es quer stand. ffmpeg dreht beim Neukodieren richtig herum.

Lies danach die Bildrate aus der umgewandelten Datei aus. Rate sie nicht und
setz sie nicht auf 30.

Miss dann an ein paar Bildern nach:

  Ist es wirklich von der Seite? Bei einer sauberen Seitenansicht liegen linke
  und rechte Huefte im Bild fast uebereinander. Rechne den waagerechten Abstand
  der beiden Hueften und teile ihn durch den Abstand Huefte zu Schulter. Liegt
  das ueber etwa 0,25, stand die Kamera schraeg, und jeder Winkel faellt zu
  klein aus. Sag mir das.

  Bin ich durchgehend zu sehen? Wenn die Zuversicht fuer Huefte, Knie und
  Knoechel oft unter 0,5 liegt, ist es zu dunkel oder etwas steht im Weg.

  Sind genug Schritte drin? Unter fuenf Sekunden bleiben zu wenige Bodenkontakte
  uebrig, nachdem du aussortiert hast.

Sag mir das Ergebnis dieser Pruefung in einem Satz, bevor du weitermachst.


SCHRITT 3: DIE MESSKETTE BAUEN

Bau ein Skript, das folgendes tut. Die sieben markierten Punkte sind die Stellen,
an denen eine Laufanalyse still falsch wird, ohne dass man es dem Ergebnis
ansieht. Halt dich genau daran.

Lauf ueber jedes Bild und hol dir die 26 Punkte samt Zuversicht.

  WICHTIG 0: Nimm NICHT je Bild die Person mit der hoechsten Zuversicht.

  Das ist der naheliegende Weg und er zerbricht an jedem Spaziergaenger im
  Hintergrund. Das Modell erkennt den Fremden genauso sicher wie mich -- die
  Zuversicht warnt also nicht --, und die Auswahl springt Bild fuer Bild
  zwischen beiden hin und her.

  Was dabei herauskam, als in meinem zweiten Clip jemand hinten vorbeilief:
  eine Streuung von 36 Grad beim Fussaufsatz, eine Bodenlinie mit 169 Grad
  Streuung und eine Laufrichtung, die der Aufnahme widersprach. Immerhin ist
  das sichtbar -- anders als beim vertauschten Fuss.

  Waehl stattdessen nach Groesse UND Bahn: Wer die Kamera meint, ist naeher
  dran und damit groesser im Bild, und er springt zwischen zwei Bildern nicht
  quer durchs Bild. Also: Zuversicht mal Wurzel der Bildflaeche, und das Ganze
  gewichtet mit dem Abstand zu der Lage, die du aus den zwei letzten Bildern
  fortschreibst. Sag mir, wenn du mehr als eine Person gefunden hast.

Bestimme die Laufrichtung aus der Lage der Nase zum Hals -- die Nase steht in
Laufrichtung davor. Nimm dafuer NICHT den Weg der Huefte durchs Bild: Wenn die
Kamera mitgezogen wird, gehoert dieser Weg zur Haelfte der Kamera.

  WICHTIG 1: Das Modell verwechselt die FUESSE, und es tut das ueberzeugt.

  Von der Seite kreuzen sich die Beine bei jedem Schritt, und beide Schuhe sehen
  gleich aus. Das Modell entscheidet je Bild neu, welcher Fuss der linke ist, und
  liegt dabei regelmaessig falsch -- mit hoher Zuversicht. Knie und Oberschenkel
  bleiben davon unberuehrt, nur die Fusspunkte springen.

  So siehst du, ob es passiert ist, ohne ein einziges Bild anzuschauen: Rechne
  die Hauptfrequenz zweier Signale aus. Die Kniebeugung eines Beins muss einmal
  je Doppelschritt schwingen. Die Ferse desselben Beins, waagerecht und relativ
  zum Becken, muss GENAUSO schnell schwingen. Kommt die Ferse mit der doppelten
  Frequenz heraus, springen die Fusspunkte. In meinem Testclip: Knie 1,45 Hz,
  Ferse 2,74 Hz.

  Was daraus wird, wenn man es nicht bemerkt: eine Schrittfrequenz von 308 statt
  174 je Minute. Und dann das eigentlich Gemeine -- jeder zweite Messwert ist
  Unsinn, waehrend die dazwischen sauber aussehen. Der Median ueber beides ergibt
  eine glatte, plausible, falsche Zahl.

  Repariere es NICHT ueber zeitliche Naehe allein. Beim Laufen legt ein Fuss
  zwischen zwei Bildern mehr Weg zurueck, als die beiden Fuesse voneinander
  entfernt sind; dann gewinnt regelmaessig die falsche Zuordnung. Nimm zwei
  Zwaenge zusammen:

    die Bahn -- schreib die Lage jedes Fusses aus den zwei letzten Bildern
    geradlinig fort und vergleiche beide Zuordnungen damit,
    die Anatomie -- ein Unterschenkel ist so lang, wie er ist. Miss den Abstand
    Knie zu Knoechel und nimm die Zuordnung, bei der beide Unterschenkel ihre
    gewohnte Laenge behalten.

  Tausche dabei NUR die Fusspunkte, also Knoechel, Ferse und beide Zehen. Wer
  das ganze Bein tauscht, hat hinterher die Knie vertauscht, die vorher stimmten.

  Pruef nach der Reparatur beide Frequenzen noch einmal. Sie muessen jetzt gleich
  sein. Sag mir, in wie vielen Bildern du getauscht hast.

  WICHTIG 2: Miss beckenrelativ, sonst misst du die Kamera mit.

  Wer mitgezogen filmt, bewegt jeden Bildpunkt. In meinem Testclip driftet der
  Knoechel ueber sechs Sekunden um 370 Pixel nach unten, ohne dass der Laeufer
  irgendetwas anders macht. Eine Ereigniserkennung ueber die absolute Fusshoehe
  misst also zur Haelfte den Schwenk.

  Nimm deshalb die Methode von Zeni et al. 2008: Der Aufsatz ist der Moment, in
  dem die FERSE am weitesten VOR dem Becken steht; der Abdruck der, in dem die
  GROSSZEHE am weitesten dahinter steht. Beides relativ zum Beckenpunkt gerechnet.
  Eine Kameraverschiebung bewegt Ferse und Becken um denselben Betrag und faellt
  in der Differenz heraus.

  Und versuch gar nicht erst, die Kamerabewegung aus dem Hintergrund
  herauszurechnen, um daraus Schrittlaenge oder Vertikalbewegung zu gewinnen. Ich
  habe es gemessen: Der Gehweg im Vordergrund, die Hecke dahinter und die Haeuser
  am Horizont liegen in drei verschiedenen Tiefen und ziehen unterschiedlich
  schnell durchs Bild. Keine ebene Transformation beschreibt das. Ueber sechs
  Sekunden lief der Skalenfaktor auf 0,58 weg, obwohl niemand gezoomt hat, und
  erstes und letztes Bild ueberlappen sich gar nicht mehr. Was dabei
  herauskommt, sieht aus wie ein Ergebnis und ist keines.

  WICHTIG 3: Den Boden liefert mein Fuss, nicht der Bildrand.

  Fuer Rumpfneigung und Schienbeinwinkel brauchst du eine Senkrechte. Nimm dafuer
  NICHT die Bildkante. Eine Handkamera ist nie gerade -- in meinem Testclip liegt
  die Bodenlinie um 4,4 Grad schraeg im Bild, und sie kippt waehrend der Aufnahme
  weiter.

  Nimm stattdessen: Solange der Fuss flach auf dem Boden liegt, zeigt die Linie
  Ferse-Grosszehe in Bodenrichtung, gemessen im selben Bild wie alles andere.
  Senkrecht darauf steht die Schwerkraft. Damit brauchst du keine
  Kamerakompensation und keine Annahme ueber die Kameralage.

  Dasselbe loest noch etwas: Altman und Davis definieren den Fussaufsatzwinkel
  gegen die STANDPOSITION, nicht gegen den Boden. Der flach aufliegende Fuss IST
  diese Standposition. Damit faellt die Sprengung des Schuhs heraus, statt als
  Fehler einzugehen.

  Such die flache Spanne so: Zwischen 15 und 55 Prozent der Schrittzeit nach dem
  Aufsatz -- beim Laufen dauert der Bodenkontakt 60 bis 80 Prozent eines
  Schritts, diese Spanne liegt also sicher mittendrin, waehrend das Abrollen am
  Anfang und das Abdruecken am Ende draussen bleiben. Nimm darin das Fenster mit
  der kleinsten STREUUNG des Fusswinkels.

  Nimm ausdruecklich nicht den kleinsten Abstand zweier aufeinanderfolgender
  Bilder. Der schrumpft mit steigender Bildrate, das Rauschen nicht. Bei 240
  Bildern je Sekunde gewinnt dann das Rauschen, und das Fenster landet irgendwo
  in der Schwungphase -- mit einem ruhigen Fusswinkel, der nichts bedeutet.

  WICHTIG 4: Pruef jedes Vorzeichen gegen eine Figur, deren Stellung du kennst.

  Ein gedrehtes Vorzeichen macht aus einem Fersenlaeufer einen Vorfusslaeufer.
  Beide Zahlen sehen gleich plausibel aus, beide haben dieselbe Streuung, und
  kein Rauschtest der Welt findet das. Mir ist es beim Bau genau so passiert:
  Die Kette meldete sauber und einheitlich einen Vorfussaufsatz, und die
  Einzelbilder zeigten eine Ferse.

  Der Grund war eine Winkelfunktion, die den Winkel VON einem Vektor ZU einem
  anderen liefert, waehrend der Aufrufer die Gegenrichtung erwartete. Beim
  Rumpf ging dieselbe Funktion trotzdem richtig auf, weil dort die Bezugsachse
  eine andere ist -- also war zwei von drei Werten nichts anzusehen.

  Bau deshalb eine eigene Probe: Zeichne dir eine Figur, die nachweislich mit
  der Ferse zuerst aufsetzt, eine mit flachem Fuss und eine mit dem Vorfuss,
  und schick alle drei durch deine Messkette. Der Fersenlaeufer MUSS positiv
  herauskommen, der flache Fuss null, der Vorfusslaeufer negativ (Altman und
  Davis: positiv heisst dorsalflektiert, also Zehe hoch). Dasselbe fuer den
  Schienbeinwinkel mit einem Fuss weit vorn gegen einen Fuss unter der Huefte.

  Und dann pruef es noch einmal am echten Video: Schneide den Fuss im Moment
  des Aufsatzes gross heraus und schau nach, ob Ferse oder Zehe tiefer liegt.
  Ein Blick auf ein Vollbild entscheidet das in zwei Sekunden -- auf einem
  kleinen Vorschaubild dagegen nicht, da habe ich es zuerst falsch gelesen.

  WICHTIG 5: Pruef alles auch spiegelverkehrt.

  Wer nur Videos in eine Laufrichtung testet, prueft die Haelfte seiner
  Vorzeichen nie. Spiegle deine Testaufnahme an einer Senkrechten und lass
  dieselbe Kette darueber laufen: Bis auf die Richtungsangabe muessen
  identische Werte herauskommen.

  Bei mir kam heraus, dass der Knoechel beim Lauf nach links angeblich HINTER
  der Huefte landete -- ein Wert, den es nicht geben kann. Ursache war eine
  einzige Zeile, die die Vorwaertsrichtung ein zweites Mal mit dem
  Richtungsvorzeichen multiplizierte, obwohl sie schon nach vorn zeigte. Nach
  rechts hob sich das auf, nach links kehrte es sich um. Vier Monate Videos
  in dieselbe Richtung haetten das nie gezeigt.

  WICHTIG 6: Jede Fensterbreite ist ein Anteil der SCHRITTZEIT.

  Nie eine feste Bildzahl. Bei 30 Bildern je Sekunde ist ein Schritt zehn Bilder,
  bei 240 sind es achtzig. Dieselbe feste Zahl ist einmal der halbe Schritt und
  einmal ein Zwanzigstel. Die Schrittzeit holst du dir aus dem Abstand der
  Aufsaetze beider Fuesse.

Miss dann je Bodenkontakt:

  Fussaufsatzwinkel -- Winkel der Linie Ferse-Grosszehe beim Aufsatz gegen
  dieselbe Linie im flachen Stand. Positiv heisst Zehe hoch, also Ferse zuerst.

  Schienbeinwinkel -- Linie Knie-Knoechel beim Aufsatz gegen die Senkrechte.
  Positiv heisst Knoechel vor dem Knie.

  Knoechel vor Huefte -- Weg von der Huefte zum Knoechel entlang des Bodens,
  geteilt durch die Beinlaenge in Pixeln aus demselben Bild. Ein Verhaeltnis im
  selben Bild braucht keinen Massstab, keine Koerpergroesse und keine
  Kalibrierung.

  Kniebeugung beim Aufsatz und in der Mitte des Bodenkontakts.

  Rumpfneigung -- Linie Huefte-Hals gegen die Senkrechte aus WICHTIG 3.

Die Schrittfrequenz rechnest du aus den Aufsaetzen BEIDER Fuesse: Ein Aufsatz ist
ein Aufsatz, dafuer musst du nicht wissen, zu welchem Bein er gehoert.


SCHRITT 4: PRUEF DEINE EIGENE RECHNUNG, BEVOR DU MEIN VIDEO ANFASST

Das ist der wichtigste Schritt, und du ueberspringst ihn nicht. Er hat zwei
Haelften, und die zweite ist die, die eine Laufanalyse von einer Bike-Fit-Messung
unterscheidet.

ERSTE HAELFTE -- ein kuenstlicher Laeufer, dessen Wahrheit du kennst.

Bau dir ein einfaches Modell: Huefte gleichfoermig vorwaerts mit leichter
Vertikalschwingung, je Bein eine Standphase, in der der Fuss steht, und eine
Schwungphase, in der er nach vorn kommt. Das Knie ist der Schnittpunkt zweier
Kreise, einer um die Huefte mit Oberschenkellaenge, einer um den Knoechel mit
Unterschenkellaenge. Setz eine bekannte Schrittfrequenz, einen bekannten
Fussaufsatzwinkel und eine bekannte Rumpfneigung hinein. Zieh die Kamera mit,
verkippe sie, leg ein paar Pixel Rauschen auf jeden Punkt und verschiebe die
Phasenlage, damit der Aufsatz mal genau auf ein Bild faellt und mal dazwischen.

Und dann der Teil, den man leicht vergisst: VERTAUSCHE ABSICHTLICH die
Fusspunkte in einem Teil der Bilder. Deine Reparatur aus WICHTIG 1 muss sie
zurueckdrehen. Wenn sie das nicht tut, faellt es dir hier auf und nicht in
meinem Ergebnis.

Zwei Dutzend Durchlaeufe reichen. Pruef vier Dinge einzeln, und pruef den
Bodenschaetzer mit den WAHREN Aufsatzzeitpunkten aus deinem Modell, nicht mit
den erkannten. Sonst misst du Erkennung und Schaetzer zusammen und siehst dem
Ergebnis nicht an, welcher von beiden danebenlag.

Zur Einordnung, damit du weisst, was erreichbar ist -- so sieht eine sauber
gebaute Kette aus:

  Schrittfrequenz          Fehler unter 0,1 je Minute im Mittel, 0,4 im
                           schlechtesten Fall, ueber 30, 120 und 240 Bilder je
                           Sekunde und 160 bis 190 Schritte je Minute.
  Fusspunkt-Reparatur      30 Prozent der Bilder absichtlich vertauscht, 100
                           Prozent wieder konsistent. Die Schrittfrequenz geht
                           dabei von 220 zurueck auf die wahren 170.
  Bodenlinie               folgt der Kameraverkippung auf 0,3 Grad genau, und
                           zwar unabhaengig davon, wie stark gekippt wird.
  Rumpfneigung             Fehler unter einem halben Grad.
  Spiegelprobe             dieselbe Aufnahme gespiegelt liefert dieselben
                           Werte, bis auf die Richtungsangabe. Abweichung
                           unter zwei Prozent.
  Vorzeichen               Fersenlaeufer positiv, flacher Fuss null,
                           Vorfusslaeufer negativ -- und der Fuss weit vorn
                           gibt einen groesseren Schienbeinwinkel als der Fuss
                           unter der Huefte. Das ist keine Genauigkeitsfrage,
                           das ist an oder aus.

Miss die Fusspunkt-Reparatur als KONSISTENZ, nicht als Etikettentreue. Welches
Bein "links" heisst, ist aus einer Seitenansicht nicht bestimmbar; eine
durchgehend vertauschte Zuordnung ist genauso richtig wie die originale.
Falsch ist nur, wenn sie mittendrin kippt.

Und sag mir ehrlich, was dieses Modell NICHT pruefen kann: den Aufsatz-
ZEITPUNKT und damit den absoluten Fussaufsatzwinkel. Wie schnell der Fuss kurz
vor dem Aufsetzen zurueckgezogen wird, steht im Modell so, wie du es
hineingeschrieben hast -- und genau davon haengt ab, wie frueh das Maximum der
Ferse vor dem Becken liegt. Ein Modell, an dem man dreht, bis der eigene
Algorithmus gut dasteht, prueft nichts. Behaupte das also nicht.

ZWEITE HAELFTE -- schau dir die Bilder an.

Genau dafuer laeufst du in Claude Code und nicht in einem Chatfenster: Du kannst
Bilder lesen.

Nimm drei der von dir erkannten Aufsaetze. Schneide fuer jeden die vier Bilder
davor und die vier danach als Einzelbilder heraus, in voller Aufloesung und auf
den Fuss zugeschnitten. Schau sie an und beantworte zwei Fragen:

  Beruehrt der Schuh in genau dem Bild den Boden, das du berechnet hast?
  Setzt er mit dem Teil des Fusses auf, den deine Zahl behauptet?

Sag mir, was du siehst, und leg die Bilder daneben. Weicht der berechnete
Aufsatz um mehr als ein Bild ab, stimmt etwas in der Ereigniserkennung nicht,
und du suchst den Fehler, bevor es weitergeht.


SCHRITT 5: JETZT MEIN VIDEO -- UND WAS DU AUSSORTIERST

Lauf ueber meinen Clip und miss jeden Bodenkontakt.

Dann sortierst du aus, und zwar nach HERKUNFT, niemals nach Aussehen:

  Nur das kameranahe Bein. Welches das ist, entscheidet die mittlere Zuversicht
  der Beinpunkte ueber den ganzen Clip. Das andere Bein ist die halbe Zeit
  verdeckt, und seine Werte sind Rauschen mit Nachkommastellen.

  Nur Kontakte, bei denen die Zuversicht der beteiligten Punkte ueber 0,75 liegt.

Wirf NIEMALS einen Wert weg, weil er unplausibel aussieht. Das ist der Punkt, an
dem aus einer Messung eine Meinung wird. Wenn nach dem Aussortieren zu wenige
Kontakte uebrig sind, sag mir das und sag mir, ich soll laenger filmen.

Sag mir, wie viele Kontakte du gefunden und wie viele du genommen hast. Gib jede
Groesse als Median UND Streuung an. Die Streuung ist die interessantere Zahl:
Sie sagt, ob ich das jedes Mal gleich mache.

Zur Einordnung -- und lies genau, welche Zeile eine Bewertung erlaubt und welche
nicht:

  SCHRITTFREQUENZ: gemessen. Nenn mir KEIN Ziel und schreib nicht, 180 sei der
  richtige Wert. Diese Zahl stammt aus einer Zaehlung bei Olympiafinalisten und
  ist keine Empfehlung fuer mich. Belegt ist etwas anderes, naemlich Relatives:
  Heiderscheit et al. 2011 haben gezeigt, dass eine Erhoehung der eigenen
  Schrittfrequenz um fuenf bis zehn Prozent die Energieaufnahme in Knie und
  Huefte messbar senkt, bei gleicher Geschwindigkeit. Fuenf Prozent reichten
  schon fuers Knie. Sag mir also, was fuenf und zehn Prozent MEHR bei mir
  konkret waeren -- als Zahl, nicht als Note.

  FUSSAUFSATZWINKEL: gemessen und EINGEORDNET, nicht benotet. Altman und Davis
  trennen bei -1,6 Grad zwischen Vorfuss und Mittelfuss und bei 8,0 Grad zwischen
  Mittelfuss und Ferse. Sag mir, in welche der drei Gruppen ich falle. Sag mir
  ausdruecklich dazu, dass keine dieser drei Gruppen als die richtige belegt ist:
  Die Meta-Analysen finden Unterschiede in der Belastung, aber keine geringere
  Verletzungshaeufigkeit fuer eine der Aufsatzarten. Rechne meinen Aufsatz nicht
  um.

  SCHIENBEINWINKEL: Orientierung. Die Richtung ist belegt -- sagittale
  Segmentwinkel erklaeren 95 bis 98 Prozent der Streuung im Overstride und
  haengen mit der Bremskraft zusammen. Eine Schwelle, ab der es zu viel ist, gibt
  es nicht. Sag mir die Richtung und nenn keine Grenze.

  KNOECHEL VOR HUEFTE, KNIEBEUGUNG: gemessen und angezeigt, aber NICHT bewertet
  und nicht eingefaerbt. Ich will die Zahl und ihre Streuung sehen, mehr nicht.

  RUMPFNEIGUNG: Orientierung. Fuenf bis zehn Grad nach vorn aus dem Sprunggelenk
  sind ein verbreiteter Erfahrungswert und keine Norm. Schreib das dazu.

Und dann sagst du mir, was NICHT ging. Bei einem Clip mit 30 Bildern je Sekunde
gehoert dazu mindestens:

  BODENKONTAKTZEIT UND FLUGZEIT. Ein Bodenkontakt dauert rund 200 Millisekunden,
  also sechs Bilder. Ein Bild Unsicherheit sind schon 15 Prozent. Schlimmer noch:
  Der Abdruck hat beckenrelativ ueberhaupt keine waagerechte Signatur. Im Moment
  des Abdrucks steht der Fuss in der Welt still und faengt erst danach an,
  vorwaerts zu beschleunigen -- relativ zum Becken laeuft er also einfach mit
  unveraenderter Geschwindigkeit weiter nach hinten. Was sich aendert, ist die
  Hoehe, und die Hoehe ist genau das, was eine mitgezogene Kamera zerstoert.
  Gib diese Zahl nicht aus. Sag mir stattdessen, dass ich sie bekomme, wenn ich
  in Zeitlupe filme: Bei 240 Bildern je Sekunde sind dieselben 200 Millisekunden
  fast 50 Bilder.

  SCHRITTLAENGE, TEMPO, VERTIKALBEWEGUNG. Alles drei braucht ein Weltsystem, und
  das gibt es hier nicht (WICHTIG 2).

  SEITENVERGLEICH. Ein Video von einer Seite misst ein Bein. Wenn ich wissen
  will, ob links und rechts gleich aussehen, muss ich von beiden Seiten filmen.

  ALLES IN DER FRONTALEBENE. Ob meine Knie nach innen fallen und ob mein Becken
  absackt, sieht man von der Seite nicht. Dafuer braeuchte es eine Aufnahme von
  vorn oder hinten.

Schreib das Video mit der Bildrate der Quelle und kodiere es am Ende mit ffmpeg
nach H.264. Speicher zusaetzlich das Einzelbild von einem sauberen Aufsatz.


SCHRITT 5b: DAS OVERLAY

Das fertige Video ist der Teil, den ich wirklich anschaue. Bau es als
Analyse-Ansicht, nicht als nacktes Strichmaennchen. Zeichne mit Pillow auf einer
durchsichtigen Ebene und leg sie ueber das Bild -- mit OpenCV allein bekommst du
nur Balkenlettern.

DIE PLATTE STATT DES RECHTECKS

Der Unterschied zwischen "sieht nach Debug-Ausgabe aus" und "sieht nach
Messgeraet aus" sind drei Dinge, und sie kosten zusammen zwanzig Zeilen. Bau
dir dafuer EINE Hilfsfunktion und benutz sie fuer jede Flaeche im Bild --
Kopfleiste, Kacheln, Diagrammfeld, den kleinen Kasten am Knie:

  Ein senkrechter Verlauf. Nimm nicht einen Ton, sondern zwei: oben etwas
  heller, unten etwas dunkler, ueber die Hoehe der Flaeche interpoliert. Ein
  Rechteck in genau einem Grauton wirkt wie eine Flaeche, die noch nicht
  fertig ist, egal wie gut der Ton gewaehlt ist. Zwei Toene liest man als
  Material.

  Eine Haarlinie INNEN am Rand, ein Pixel breit, weiss mit rund zehn Prozent
  Deckung. Innen, nicht aussen: Aussen liegende Raender addieren sich mit dem,
  was daneben liegt, und wirken doppelt so dick.

  Eine hellere Linie nur an der OBERKANTE, etwas kraeftiger als die Haarlinie.
  Das ist die ganze Illusion von Material -- Licht kommt von oben, also faengt
  die obere Kante es ein. Ohne sie sieht die Platte flach aus, mit ihr wie ein
  Bauteil.

Runde Ecken, Radius etwa vierzehn Pixel bei 1080 Breite. Und Abstand zum
Bildrand: Eine Leiste, die die Bildkante beruehrt, sieht nach Fernsehgrafik von
1998 aus. Eine Platte mit Luft ringsum sieht nach Werkzeug aus.

  WICHTIG BEIM ZEICHNEN: Pillows paste ERSETZT die Pixel, es mischt sie nicht.
  Wenn du die Platte pastest und danach die Akzentkante als zweite Ebene mit
  derselben Maske daraufpastest, ueberschreibst du die Platte mit den
  durchsichtigen Pixeln dieser zweiten Ebene -- und wunderst dich, warum
  ausser der Kante nichts zu sehen ist. Zeichne die Akzentkante IN die
  Verlaufsflaeche, bevor du sie pastest. Ein paste je Platte.

DIE SCHRIFT

  Zahlen in einer Schreibmaschinenschrift mit gleich breiten Ziffern. Das ist
  kein Geschmack: Bei laufenden Zahlen springt die Zeile sonst bei jedem Bild,
  weil die 1 schmaler ist als die 8.

  Beschriftungen in Versalien, klein, und GESPERRT. Pillow kennt keine
  Laufweite, du musst also Zeichen fuer Zeichen setzen und je Zeichen ein bis
  zwei Pixel zugeben. Ungesperrte Versalien in dieser Groesse kleben zusammen
  und lesen sich als Fleck. Das ist der billigste sichtbare Gewinn im ganzen
  Overlay.

  Such die Schrift, statt einen Pfad zu setzen. Geh eine Liste von Kandidaten
  durch und nimm die erste, die existiert -- auf einem Mac SF Compact oder
  Helvetica, unter Windows Segoe UI oder Arial, unter Linux DejaVu oder
  Liberation. Findest du keine, nimm die eingebaute Schrift von Pillow.

  Rechne ALLE Groessen ueber einen Massstab aus der Bildbreite geteilt durch
  1080 -- Schriftgroessen, Polster, Radien, Strichbreiten. Sonst sitzt das
  Overlay bei einem Video in anderer Groesse daneben.

WAS AUFS BILD GEHOERT

  Kopfleiste oben als Platte mit Rand ringsum: das Wort LAUFANALYSE gross,
  darunter klein und gesperrt der Name des Modells und der Hinweis, dass Ferse
  und Zehe mitgemessen werden. Rechts die laufende Bildnummer, die Sekunde und
  die Bildrate in der Schreibmaschinenschrift.

  Links darunter eine schmale Platte mit der Erkennungsguete als Prozentzahl
  und einem Balken -- der Mittelwert der Zuversicht der Beinpunkte im aktuellen
  Bild. Faerbe den Balken um, wenn er unter die Schwelle faellt, ab der du
  Kontakte aussortierst.

  Ein Rahmen um mich, aber nur die vier Ecken statt eines geschlossenen
  Kastens, dazu klein die Zahl der sicher erkannten Punkte.

  Das Skelett NUR des kameranahen Beins, plus Rumpf: Huefte zu Knie, Knie zu
  Knoechel, Knoechel zu Ferse, Ferse zu Grosszehe, Huefte zu Hals. Zeichne
  jeden Strich zweimal, erst dick in Schwarz, dann duenner in der Farbe --
  sonst verschwindet er vor hellen Waenden. Gelenke als weisse Punkte mit
  dunklem Ring.

  Zeichne das ferne Bein NICHT mit, und den Arm auch nicht. Du wertest beide
  nicht aus, also behaupte auch im Bild nicht, du haettest sie gemessen.

  Am Knie eine kleine Platte mit der Kniebeugung des AKTUELLEN Bildes und dem
  Wort live. Diese Zahl laeuft mit jedem Schritt hoch und runter, und genau das
  macht sichtbar, dass hier gemessen und nicht geschaetzt wird. Auf eine
  Platte, sonst ist sie vor dem Gehweg nicht zu lesen.

  Rechts eine Spalte Kacheln, eine je Groesse. Je Kachel:

    Titelzeile: links die Bezeichnung, klein, gesperrt, grau. Rechts in
    derselben Zeile das Wort, das den RANG der Zahl angibt -- "gemessen", die
    Aufsatzart, "Orientierung" oder "Rohwert".
    Darunter gross der Messwert, daneben klein die Einheit.
    Links aussen die Akzentkante in der Farbe des Rangs, etwa sechs Pixel.

  Setz das Rangwort in die TITELZEILE, nicht unter den Wert. Unter dem Wert
  trifft es die Einheit, sobald ein Wert einmal breit ausfaellt, und dann klebt
  beides ineinander. Miss trotzdem nach, ob Titel und Rangwort nebeneinander
  passen, und ruecke das Rangwort eine Zeile tiefer, wenn nicht -- lieber eine
  Zeile mehr als zwei Woerter uebereinander.

  Unten ueber die Breite eine Platte mit dem Verlaufsdiagramm: die Ferse
  waagerecht relativ zum Becken, ueber die Zeit. Jeder GEWERTETE Bodenkontakt
  sitzt als Punkt auf der Kurve, ein senkrechter Strich zeigt, wo im Video ich
  gerade bin. Das ist das ueberzeugendste Element von allen: Man sieht die
  Kurve bei jedem Schritt nach oben laufen und die Punkte oben einrasten.

  Glaette die Kurve fuers Auge, aber miss auf dem ungeglaetteten Signal. Wenn
  du eine geglaettete Reihe benutzt, um einen Ort zu finden, lies den Wert
  trotzdem auf der ungeglaetteten ab -- Glaetten verschiebt Scheitelpunkte.

  In dieselbe Platte, unter das Diagramm: das Ergebnis in einem Satz, und
  darunter klein, wie viele Kontakte gewertet wurden, dass nur ein Bein
  gemessen wurde, und welche Groesse bei dieser Bildrate nicht belegbar war.
  In die Platte, nicht darunter -- Text auf nacktem Video ist auf einer hellen
  Stelle nicht zu lesen.

DIE FARBE

Die Farbe traegt eine EINORDNUNG, kein Urteil. Nimm drei unterscheidbare Farben
fuer Vorfuss, Mittelfuss und Fersenlauf -- aber keine Ampel. Gruen und Rot
wuerden behaupten, eine der drei sei die richtige, und das ist nicht belegt.

Alles Uebrige bleibt weiss und grau auf den dunklen Platten. Genau EINE weitere
Farbe darf vorkommen, als Akzent auf Kanten und kleinen Signaltexten. Zwei
Akzentfarben nebeneinander sehen nach Diagrammlegende aus, nicht nach Messung.

Und die Messwerte selbst bleiben neutral. Faerb den Rang, faerb die Kante, faerb
den Fuss im Skelett -- aber nicht die Zahl. Eine eingefaerbte Zahl behauptet
etwas ueber ihren Wert, und das sollst du nur dort tun, wo es belegt ist.


SCHRITT 6: SAG MIR, WAS SACHE IST

Erklaer mir das Ergebnis in normalen Worten. Was du gemessen hast, wie einheitlich
ich es mache, und was ich als Erstes aendern koennte -- falls ueberhaupt etwas.

Wenn nichts auffaellig ist, sag genau das. Erfinde keinen Verbesserungsvorschlag,
nur damit einer dasteht. Eine Messung, die nichts findet, ist ein Ergebnis.

Sag mir zum Schluss zwei Dinge:

  Die Aufnahme, die mir mehr bringt: von der Seite, Kamera auf Huefthoehe, zehn
  bis fuenfzehn Sekunden, und in Zeitlupe mit 120 oder 240 Bildern je Sekunde.
  Das schaltet die Bodenkontaktzeit frei und macht jeden Winkel ruhiger. Und
  einmal von hinten, wenn ich wissen will, was in der Frontalebene passiert.

  Und dass ich immer nur eine Sache aendere und danach neu filme. Wer
  Schrittfrequenz und Fussaufsatz gleichzeitig umstellt, weiss hinterher nicht,
  was gewirkt hat -- und beim Laufen aendert sich der Aufsatz oft von allein mit,
  wenn man nur die Frequenz erhoeht.


WAS DU NICHT TUST

Bau keinen Schalter ein, mit dem sich eine Farbe von Hand setzen laesst. Was
gemessen wird, wird gemessen.

Gib mir keine Note und keinen Punktwert fuer meine Laufform. Es gibt keine
belegte gruene Zone fuers Laufen. Wer eine anbietet, hat sie erfunden.

Faerbe nichts gruen, weil es schoener aussieht, und nichts rot, weil es
eindrucksvoller ist.

Wenn eine Zahl nicht sauber messbar war, schreib das hin, statt sie zu schaetzen.


Dieser Prompt ist Folge 10 von 100 aus "Sport KI" von Dan Felser.
Instagram: @felsr — alle Prompts der Reihe: felsr.com
Der Prompt kostet nichts. Wenn er dir was bringt: folg mir auf @felsr — dort kommt jede Folge zuerst. Kostenlose Trainingspläne
20 Pläne, 5 km bis Marathon — ohne E-Mail, ohne Konto
Alle Prompts der Reihe
Sport KI — 100 Folgen, jede Woche ein Tool aus meinem Training