Field NotesBuild NotesTeachingAbout
videopose landmarksgeometryevidenceinterpretationgenerativedeterministicMEASUREMENTINTERPRETATION
Build Note 001

Separating Measurement From Interpretation.

The model interprets evidence. It does not manufacture it.

Evidence boundaries · Measurement · Interpretation · System architecture
September 30, 2026

Most "AI coaching" demos ask a model to look at something and tell you what it sees.

I wanted a harder boundary.

In xCycleForm, the model never measures the cyclist. MediaPipe identifies landmarks. Deterministic geometry calculates joint angles. A hysteresis state machine identifies pedal stroke cycles and biomechanical extremes. Only then does a vision-language model receive the measurements and selected video frames. Its job is to interpret what they might mean.

That distinction matters. The generative model can reason about evidence. It cannot manufacture the evidence itself.

QuestionCan a generative model provide useful biomechanical interpretation without being responsible for measurement?
ConstraintAll numerical measurements must originate from deterministic computation.
ResultYes, but useful interpretation quickly produces claims whose evidentiary strength varies. That makes attribution the next problem.
xCycleForm interface showing pose skeleton overlay on a cyclist on an indoor trainer, right knee angle measurement (130.4 degrees, valid), landmark confidence values, pedal stroke cycle detection (9 cycles, 98 rpm, 6 frames captured), and a vision-language model inference in progress (Sending 6 frames to VLM, 10 seconds)
The actual prototype running against a trainer session. Nothing in the pose overlay or measurement panel was mocked for this image.

The pipeline

The measurement pipeline runs entirely in the browser. No server-side ML infrastructure is required until the evidence package reaches the generative interpretation layer. The pipeline has six stages, and the boundary between deterministic and generative falls between stages five and six.

1
Camera
Video file or live camera feed. Standard side-view of the cyclist.
2
Pose
MediaPipe PoseLandmarker runs on-device via GPU. Detects up to two people (cyclist + bike fitter). Returns 33 landmarks per person with per-landmark confidence.
3
Geometry
Deterministic angle calculation given the estimated landmarks. The interior angle at the knee (hip-knee-ankle) is computed from landmark coordinates. Confidence gating rejects frames where any landmark falls below threshold.
4
Cycle Detection
A hysteresis-based state machine tracks knee angle over time to identify pedal stroke boundaries. Bottom dead center (BDC, leg extended) and top dead center (TDC, leg flexed) are detected as local extremes. Per-cycle ROM, cadence, and timing are computed.
5
Evidence Package
Video frames are captured at each BDC and TDC moment. The measurement buffer assembles a structured summary: per-cycle angle data, aggregate statistics, confidence breakdown, and six key frames spread across the session (early, middle, late).
6
Interpretation
A vision-language model (Qwen2.5-VL-32B-Instruct, accessed via API) receives the structured measurements and captured frames. It is instructed to interpret the evidence, compare angles to established reference ranges, and note what it observes in the images. This is the only generative step.

Stages three through five are deterministic given the estimated landmarks. Given the same pose model output, they produce the same measurements. Stage two (pose estimation) is the source of measurement uncertainty; accuracy of every downstream angle depends on the quality of those landmark estimates. Stage six is generative. Given the same evidence package, it may produce different interpretations. That is by design. Interpretation is where generative models are useful. Measurement is not.

What interpretation adds

The VLM received 23 complete pedal stroke cycles, per-cycle BDC and TDC angles, cadence data, and six video frames captured at biomechanical extremes. It produced a coaching analysis that was genuinely useful in several respects.

It correctly identified that the average BDC angle (161.3 degrees) was above the reference range of 140 to 150 degrees. It noted the known 10 to 15 degree inflation from 2D pose estimation, which places the corrected estimate at roughly 146 to 151 degrees. That overlaps the upper end of the reference range rather than clearly exceeding it. The model treated the value as definitively elevated, but the corrected range makes the finding less conclusive than the raw number suggests. It recognized the limited range of motion (64.3 degrees versus the reference of 70 to 75) as consistent with the BDC observation.

More importantly, it used the captured frames. It visually corroborated the near-straight leg at bottom dead center. It identified hand placement on the hoods. It assessed trunk posture, elbow tension, head and neck position, and the absence of lateral sway. These are observations the geometric pipeline cannot currently make. The VLM earned its place in the architecture by seeing things the measurement layer does not measure.

Where the model went past its evidence

This is the more interesting result.

The deterministic system says: BDC angle = 161.3 degrees.

The model can reasonably say: this appears unusually extended relative to the provided reference range.

But the coaching output crossed several increasingly weak inference boundaries beyond that observation.

Measured
BDC knee angle averages 161.3 degrees across 23 cycles.
Supported
This is above the reference range before correction. After accounting for 2D measurement bias, the corrected value overlaps the upper end of the range.
Inferred
The saddle is too high.
Specific
Lower the saddle by 1 to 2 cm.
Causal
Cadence variation is caused by the saddle height.
Clinical
This increases the risk of knee injury.

Each step is weaker than the last. The angle is measured. The comparison to reference ranges is well-supported. The inference about saddle height is plausible but assumes the measurement bias is well-characterized, which it is not. The specific 1 to 2 cm recommendation requires a calibrated relationship between angle and seat post position that does not exist in this system. The causal claim about cadence has no supporting evidence at all. 149 RPM could be real cadence, a transient, or an artifact. The injury risk claim extends beyond what any single observation session can establish.

This is not a failure of the prototype. This is the finding.

The system made the inference gradient visible. You can see exactly where the model transitions from reporting evidence to generating increasingly unsupported claims. And that visibility is what makes the architecture useful rather than just impressive.

What comes next: attribution

The obvious next step is not adding more measurements. It is requiring the model to show which evidence supports each claim.

Imagine the coaching output structured differently:

Observation
Knee appears highly extended at bottom dead center.
Evidence
Cycles 18 through 23: BDC 158.7 to 163.4 degrees
Mean: 161.3 degrees
Landmark confidence: 0.94
Frames: BDC-19, BDC-21, BDC-23
Interpretation
Position may indicate excessive saddle height.
Confidence
Moderate
Limitation
2D hip landmark placement introduces an estimated +10 to 15 degree bias. Camera calibration has not been performed.
Suggested next test
Reduce saddle height incrementally and repeat measurement under the same camera setup.

That is no longer an AI answer. It is an inspectable coaching claim.

Every recommendation identifies the observations supporting it. If the model claims cadence variation is caused by saddle height but cannot point to evidence establishing that relationship, the interface can label that portion as inference rather than presenting it alongside measured facts.

This is the architectural pattern I am most interested in building. Not just for cycling. For any domain where something can be measured deterministically, the measurement should happen first. Retrieve it or calculate it. Then give the model the resulting evidence and let it do what generative systems are good at: synthesis, explanation, and reasoning about what the evidence means.

The model should be allowed to interpret evidence. It should not be allowed to invent it.

PublishedSeptember 2026
AuthorBen Faircloth
StackReact, MediaPipe PoseLandmarker, Qwen2.5-VL-32B-Instruct (API), Vite, TypeScript
SourcePrivate prototype
Cite asFaircloth, B. (2026). "Separating Measurement From Interpretation." BenFaircloth.com, Build Note 001.

New build notes, occasionally.

RSS