← All apps Retisense

Gait Analysis Vision

A clinical gait-analysis iOS app: the phone camera tracks body movement in real time, measures joint angles and alignment, and produces a multi-page PDF report — generated on-device.

Role
Primary developer — built end to end
Platform
iOS · Swift + WKWebView hybrid
Status
In production on the App Store
Links
Gait Analysis Vision (App Store)

The hard problem

Clinics measure gait with marker systems and force plates. The goal here: get useful joint-angle measurements from nothing but a phone camera — in real time, at 30 fps on a mid-range iPhone.

Raw pose estimation alone doesn't get you there: landmarks jitter frame to frame, angles need anatomical definitions and normal ranges, and the practitioner needs a report in hand two minutes after the assessment.

What I built

Every layer of the product:

  • CV pipeline — MediaPipe 33-landmark pose tracking and an angle-calculation layer producing 13+ metrics (hip, knee, dorsiflexion, pelvic obliquity, trunk sway) with normal ranges and left/right symmetry.
  • Signal quality — OneEuro filtering tuned per-metric, so curves are smooth enough to read without lagging real movement.
  • Two assessment modes — free-form continuous analysis, and a guided 5-step protocol with voice prompts.
  • Reporting — a multi-page vector PDF engine (metric cards, time-series charts, status colouring) that runs fully offline.
  • AI commentary — per-metric insights via a server-side OpenAI integration, cached to avoid duplicate calls.
  • The native layer — Swift shell, WKWebView bridge protocol, services for auth, upload, sharing and deep links.

Later extracted into a company-wide CocoaPod by a teammate.

How the system works

  • Camera30 fps capture in-app
  • PoseMediaPipe — 33 landmarks
  • Metricsangle calc + OneEuro smoothing
  • Reportvector PDF
  • AIinsights via cloud fn

The architecture is a deliberately thin Swift shell around a web-based CV/UI core, joined by a typed message bridge — which let one engineer ship native-feeling iOS while iterating on the ML pipeline at web speed.

Stack

SwiftWKWebView bridgeMediaPipeJavaScript OneEuro filterjsPDFOpenAI APIParse