Skip to content
← All projects

Computer Vision & Biomechanics

Co-founded venture · ongoing

SwingDNA

Two consumer cameras, no markers, and a 3D reconstruction of a golf swing accurate to roughly 9 to 11 mm per joint. I wrote the triangulation and biomechanics layer on top of RTMPose for 2D keypoints and OpenCV for the camera geometry. Every metric carries uncertainty propagated from that geometry, and joints the cameras could not see are flagged rather than filled in, so a change between two sessions can be told apart from the noise of the system.

Sports & movementComputer vision3D kinematics

Overview

SwingDNA reconstructs a 3D golf swing from two ordinary cameras — no markers, no suit — accurate to roughly 9 to 11 mm per joint. Every metric it reports carries uncertainty propagated from the camera geometry, and joints the cameras could not see are flagged rather than filled in.

The point is not the swing report. It is answering whether a change between two sessions is a real change or within the measurement noise of the system. The pipeline is three layers: RTMPose detects 2D keypoints (Halpe26, 26 per frame); OpenCV handles the classical camera geometry and calibration; and our own mv-pose code does the triangulation and the biomechanics on top.

The problem

The real question is not what the swing looks like once, but whether a change between two sessions is a real change or just within the measurement noise of the system. Marker-based motion capture is accurate but expensive, lab-bound, and slow; most markerless tools output confident-looking numbers with no sense of their own error, and silently fill in joints the cameras never actually saw.

How it works

  1. 01

    2D keypoints with RTMPose

    Each frame is reduced to 26 Halpe26 keypoints per view — the raw signal the rest of the pipeline builds on.

  2. 02

    Classical camera geometry in OpenCV

    Calibration and multi-view geometry establish where the two cameras sit relative to each other and the scene.

  3. 03

    Triangulation + biomechanics in custom mv-pose code

    Our own layer triangulates the two views into 3D and derives roughly 10 biomechanics metrics from the reconstructed motion.

  4. 04

    Uncertainty on every metric

    Measurement error is propagated through the geometry so each metric carries its own uncertainty, rather than being reported as a bare number.

  5. 05

    Flag missing joints, never impute

    When a joint is not reliably seen in both views it is flagged as missing instead of being guessed, so downstream analysis is never quietly misled.

Validation & rigor

Accuracy is benchmarked against a commercial launch monitor, and a Minimal Detectable Change (MDC) framework is used to say when a difference between swings is real rather than noise.

Per-joint accuracy sits at 9–11 mm and reconstructed segment lengths are within 0.5% of tape measurement — on the ~20-swing, 2-subject dataset validated so far.

“Every number ships with its uncertainty, and a joint we did not really see is flagged, not invented.”
Design principles
PreviousOntario Tobacco Pathology AssistantNextCost-Effectiveness of the JAKPOT Rule