Inspiration
I started TrueROM because of a problem I experienced myself. I have limited shoulder mobility, so I regularly stretch and do rehabilitation exercises to improve it. But even when I felt better, I had no reliable way to answer a simple question: Is my shoulder mobility actually improving?
When I tried tracking my shoulder range of motion (ROM), the results were inconsistent. I realized that a higher arm angle did not always mean better shoulder mobility. As I raised my arm, I could compensate by leaning, rotating, or extending my trunk, increasing the measured ROM even though part of the movement was not coming from my shoulder.
This made ROM difficult to use as a benchmark for stretching or rehabilitation. If my ROM increased, I couldn't tell whether my shoulder had actually improved or whether I had simply compensated more.
That experience led me to build TrueROM. Instead of asking only “How high can I raise my arm?”, I wanted to also ask “Did I move my trunk to get there?”
TrueROM combines shoulder ROM measurement with trunk-compensation detection to make mobility progress easier to track consistently over time.
What it does
TrueROM is a webcam-based shoulder mobility tracker that measures shoulder ROM while simultaneously monitoring compensatory trunk movement. After a short calibration establishes the user's natural starting posture, TrueROM tracks shoulder ROM and three types of trunk movement in real time: forward/backward trunk lean, lateral lean, and trunk rotation. Rather than directly subtracting trunk movement from shoulder ROM, TrueROM uses compensation as a measurement-quality signal. The camera border changes from green to orange to red as compensation increases, while individual movement-quality indicators show which type of trunk compensation is occurring. Moderate compensation provides real-time feedback while allowing the measurement to continue. If compensation becomes excessive, TrueROM prevents the measurement from being finalized. When the user reaches their end range, TrueROM detects when the movement stabilizes, asks them to hold the position for three seconds, and records the median of the stable measurements as the Final ROM. After completion, the Final ROM remains visible until the user chooses to measure again. Completed measurements are saved locally and displayed alongside the previous result, the change from that result, and recent measurement history, making mobility progress easier to compare over time.
How we built it
I built TrueROM with React, TypeScript, Vite, and MediaPipe Pose Landmarker, using a standard webcam for real-time pose tracking.
Shoulder ROM is calculated using the hip, shoulder, and elbow landmarks. Signed angles distinguish forward flexion from backward extension, while lightweight smoothing reduces frame-to-frame jitter.
A 3-second neutral calibration establishes a personalized zero point for shoulder ROM and a baseline trunk orientation. For compensation detection, MediaPipe's 3D world landmarks from the shoulders and hips are used to construct a trunk reference and track changes in forward/backward lean, lateral lean, and trunk rotation relative to the user's calibrated starting posture.
Because single-camera 3D tracking can occasionally become unreliable, TrueROM also validates landmark and trunk geometry before using compensation estimates rather than treating every detected value as equally reliable.
I also built an endpoint-detection pipeline. Once ROM stabilizes near the user's end range, TrueROM starts a 3-second hold countdown and records the median of the stable samples. If excessive trunk compensation occurs during the hold, the measurement is cancelled and no Final ROM is recorded.
Everything runs locally in the browser, with completed measurements stored locally for comparison across sessions.
Challenges we ran into
- Making ROM measurements stable: Pose landmarks fluctuate between frames, causing ROM values to change even when the arm is still. I addressed this with smoothing and personalized neutral calibration.
- Deciding when to record the Final ROM: Simply recording the highest angle could capture tracking noise or an unstable movement. TrueROM instead detects a stable endpoint and records the median of a 3-second hold.
- Identifying trunk compensation: Research on upper-extremity rehabilitation and kinematic assessment helped guide my approach. I track forward/backward lean, lateral lean, and trunk rotation separately rather than directly subtracting them from shoulder ROM, since these movements occur across different axes.
- Working with a single webcam: Depth estimation and landmark visibility can become unreliable depending on body orientation and camera framing. I added landmark and geometry validation, framing feedback, and baseline-relative trunk tracking to reduce misleading measurements.
Accomplishments that we're proud of
- Going beyond a single ROM number: TrueROM evaluates not only how far the arm moves, but also how the movement was achieved. Excessive trunk compensation can prevent an unreliable measurement from being recorded.
- Building a repeatable measurement flow: Calibration, ROM tracking, compensation monitoring, endpoint detection, a stable 3-second hold, and Final ROM recording work together as one measurement process.
- Turning individual measurements into progress tracking: TrueROM preserves completed measurements and lets users compare their latest Final ROM with previous results instead of treating each measurement as an isolated number.
- Making it accessible with a webcam: The prototype works with a standard webcam and browser-based pose estimation, without requiring dedicated motion-capture equipment or wearable sensors.
What we learned
- Pose estimation needs more than raw landmarks: Real-time landmarks alone do not create a reliable measurement. Calibration, smoothing, validation, and temporal logic are essential for turning raw pose data into a more stable measurement pipeline.
- 3D landmarks reveal movement that is difficult to capture in 2D: Using MediaPipe's 3D world landmarks taught me how trunk lean and rotation can be tracked separately from the arm angle, while also showing the importance of validating when those estimates are reliable.
- Real-time computer vision is also a UX problem: Accurate algorithms are not enough if users cannot position themselves correctly or understand what the system detects. Framing guidance, color-coded feedback, and individual compensation indicators became important parts of the measurement experience.
- Building the complete pipeline: TrueROM gave me hands-on experience connecting webcam input, pose estimation, geometric calculations, temporal filtering, measurement logic, local history, and a React/TypeScript interface into one real-time system.
What's next for TrueROM
- From measurement to actionable guidance: In the future, I want TrueROM to identify where mobility becomes limited or compensation begins to increase. It could then connect those movement patterns with short, relevant rehabilitation or mobility exercise videos, allowing users to exercise, measure again, and compare the results.
- Expanding to more shoulder movements: TrueROM could expand beyond flexion and extension to movements such as shoulder abduction and rotation, with compensation monitoring adapted to each movement.
- Validating the measurement system: A major next step is testing TrueROM with more users and comparing its measurements with established clinical or motion-capture methods. This could also help validate and refine the experimental thresholds used for trunk-compensation feedback.
Built With
- css3
- html5
- mediapipe
- react
- typescript
- vercel
- vite
- webrtc
Log in or sign up for Devpost to join the conversation.