Rowing Motion Analysis Dashboard
I built this project to better understand my own rowing technique — especially to fix a habit I’ve been working on: early layback.
Instead of relying only on “feel,” I wanted to see what my body was actually doing during each stroke and how it changed over time.
The dashboard turns regular rowing videos into interactive motion analyses, showing key metrics like stroke rate, rhythm, and posture — and even flags when my back opens too early.
🚣Open DashboardWhat It Does
The tool uses computer vision to detect 17 key body landmarks in each frame of video (shoulders, hips, knees, ankles, etc.) and transforms that motion data into rowing metrics such as:
- Stroke Rate (SPM) – how many strokes per minute
- Recovery : Drive Ratio – how much time I spend gliding vs. pushing
- Trunk Angle – how far I lean forward and back
- Knee Angle – how compressed or extended my legs are
- Early Back Swing – automatically detects if I open my back before my legs finish driving
Each stroke is plotted on an interactive timeline with a smooth moving average.
Hovering over a data point instantly shows the corresponding stroke in a pose viewer, so I can literally watch how my technique changes.
Why I Built It
As a rower, I often noticed that my perception of a “good stroke” didn’t always match reality — especially when it came to sequencing.
I wanted an objective way to:
- See whether I was opening my back too early
- Quantify my stroke rhythm (recovery vs. drive)
- Track improvements over time
- Connect what I feel in the boat with what’s actually happening biomechanically
This dashboard gives me a visual mirror — turning motion into measurable insights that help fine-tune both rhythm and efficiency.
What the Metrics Mean
Metric | What It Tells You | Typical Range |
---|---|---|
Stroke Rate (SPM) | Your tempo | 18–22 steady, 24–28 moderate, 30+ sprint |
Recovery : Drive Ratio | Stroke rhythm | 1.3–1.6 steady, 1.0–1.3 sprint |
Trunk Angle (° ) | Forward/back lean | 25–35° forward at catch, ~100–120° open at finish |
Knee Angle (° ) | Compression/extension | ~60° flexed at catch → nearly straight at finish |
Early Back Swing | Torso opens before legs finish drive | Flagged when trunk changes >10° while knees <140° |
In my current data:
- Average Stroke Rate: ~25 SPM
- Recovery : Drive Ratio: ~1.28
This indicates a quick, race-like rhythm — efficient, but I’m aiming for a slightly longer recovery to relax more between strokes.
Tech Stack
Layer | Tools |
---|---|
Pose Detection & Metrics | Computer Vision (MoveNet / MediaPipe), Python, Pandas |
Visualization | Plotly.js, HTML, Vanilla JS, CSS |
Output | Interactive HTML report + synchronized pose viewer |
What’s Next
- Add real-time form feedback (“open later,” “slide slower”)
- Compare two sessions side by side
- Expand to 3D motion capture with dual cameras
- Integrate with erg or wearable data for hybrid analysis