Computer vision · R&D

jumpsight

Analiza skoku łyżwiarskiego z jednego nagrania z telefonu – każda liczba podawana jest razem z tym, jak bardzo system jest jej pewien.

Rok
2026
Status
R&D, własny silnik
Skala
959 commitów
Stack
Python · YOLOX · RTMPose · ONNX Runtime · OpenCV · SciPy · FastAPI · PostgreSQL
  • ±0.54błąd obrotów na 1705 skokach (MMFS)
  • 91%rozpoznany Axel (FS-Jump3D)
  • ±0.5–1klatek przy lądowaniu, klip kontrolny
  • ~13 sna klip na CPU, pierwsze wyniki po ~2 s

Problem

Trenerzy nagrywają zwykłymi telefonami: 30 fps, kompresja, często przesyłane dalej przez Telegram. Skok trwa około pół sekundy, a jeden obrót to mniej więcej cztery klatki, więc większość liczb jest na granicy tego, co zawiera nagranie. System musi zmierzyć, co może, i jasno powiedzieć, czego nie może.

Jak to działa

  1. 01

    Sprawdzenie i dekodowanie

    Prawdziwe znaczniki czasu klatek (telefony nagrywają ze zmienną liczbą klatek), bitrate, szybki przebieg 360×640 po całym klipie i ścieżka audio z dźwiękiem lądowania.

  2. 02

    Wykrywanie i śledzenie

    YOLOX-tiny na co trzeciej klatce, śledzenie IoU i stabilizacja tła utrzymują jedną łyżwiarkę w kadrze, gdy telefon się porusza.

  3. 03

    Znalezienie prób

    Kinematyka ramki ciała i balistyczna parabola wskazują, gdzie łyżwiarka odrywa się od lodu. Podobnie wyglądające spirale i podnoszenia są odrzucane z podaniem powodu.

  4. 04

    Poza w każdej klatce

    RTMPose-m działa na oknach w pełnej rozdzielczości wokół każdej próby i zwraca stawy, które mierzy reszta potoku.

  5. 05

    Czas, obroty, rodzaj

    Odbicie i lądowanie wynikają z granicy balistycznej wokół szczytu. Obroty liczą dwa niezależne kanały. Drzewo reguł, odbite lustrzanie dla kierunku, nazywa skok.

  6. 06

    Raport, który przyznaje się do ograniczeń

    Każda wartość to obiekt z przedziałem 68%, poziomem i statusem. To, czego nie da się zmierzyć, wraca jako "absent" z powodem czytelnym dla maszyny, nigdy jako prawdopodobny strzał.

Po lewej: przebieg systemu na potrójnym lutzu z FS-Jump3D (CC BY-NC-SA 4.0). Po prawej: oryginał.Kroki 2–4 rysują prawdziwy obliczony ruch z mojego potoku.

Znane ograniczenia

  • W skokach ząbkowych odbicie może zostać odczytane do dwóch klatek za wcześnie: puszczenie ząbka jest niewidoczne na wysokości kostki. Nagrywanie w 60 fps to naprawia.
  • Przy około siedmiu obrotach na sekundę i 30 fps liczenie obrotów może ulec aliasingowi. System wtedy odmawia z AZIMUTH_ALIASING_SUSPECT zamiast zgadywać.
  • Lutz i flip różnią się krawędzią łyżwy, której skompresowane wideo 30 fps często nie pokazuje (76,5% dla tej pary).

Potrzebujesz czegoś podobnego?

Opowiedz o swoim zadaniu i danych. Odpowiem, jak bym do tego podszedł.

Omówmy projekt →