Form Analyzer — On-Device Biomechanical ML Feedback
Rotation-invariant 3D Vector Triad Dot Product geometry and asynchronous inference gating on mobile devices.
Role & Responsibilities
Mobile & ML Developer / Researcher
Primary Stack
Flutter, Dart, Google ML Kit, Android NDK, 3D Vector Geometry
Key Engineering Metric
Zero-latency on-device processing maintaining 30–60 FPS with 0 server transmissions
Status & Verification
Published Research (IEEE ISEC 2026)
30–60 FPS
On-Device Inference
0 ms
Cloud Latency
33 Nodes
3D Spatial Tracking
IEEE 2026
Published Paper
Executive Overview
The Problem
Cloud-based fitness coaching apps suffer from 200–800ms latency, bandwidth costs, and privacy risks from uploading video feeds.
The Architecture
Edge Flutter client combining Google ML Kit pose detection with rotation-invariant 3D Vector Triad geometry and async frame gating.
Engineering Impact
Zero cloud latency, 60 FPS viewport smoothness, and verified rotation invariance across oblique camera angles (IEEE ISEC 2026).
[ Camera YUV420 Stream (60 FPS) ] ──► [ isBusy Inference Guard ]
│
┌───────────────────────────┴───────────────────────────┐
▼ ▼
[ Drop Frame (if Busy) ] [ Acquire Frame Lock ]
│
▼
[ Google ML Kit 3D Poses ]
│
▼
[ 3D Vector Triad Engine ]
- Direction Vectors u, v
- Dot Product Theta Solve
│
▼
[ Biomechanical FSM Cues ]
Technical Architecture
1. 3D Vector Triad Dot Product Geometry
Evaluates interior joint angles from 3D spatial landmarks $(\vec{u} = P_1 - P_2, \vec{v} = P_3 - P_2)$, eliminating 2D planar foreshortening error:
\[\theta = \arccos\left( \frac{\vec{u} \cdot \vec{v}}{\|\vec{u}\| \|\vec{v}\|} \right)\]3D Vector Triad Angle Engine Dart
```dart
class VectorTriadCalculator {
static double calculateJointAngle({
required PoseLandmark proximal,
required PoseLandmark vertex,
required PoseLandmark distal,
}) {
final double ux = proximal.x - vertex.x, uy = proximal.y - vertex.y, uz = proximal.z - vertex.z;
final double vx = distal.x - vertex.x, vy = distal.y - vertex.y, vz = distal.z - vertex.z;
final double dotProduct = (ux * vx) + (uy * vy) + (uz * vz);
final double magU = math.sqrt(ux * ux + uy * uy + uz * uz);
final double magV = math.sqrt(vx * vx + vy * vy + vz * vz);
if (magU < 0.0001 || magV < 0.0001) return 180.0;
final double cosTheta = (dotProduct / (magU * magV)).clamp(-1.0, 1.0);
return math.acos(cosTheta) * (180.0 / math.pi);
}
}
```
2. Asynchronous Inference Gating (isBusy Guard)
Prevents backpressure by discarding intermediate camera frames during active neural net evaluation:
Asynchronous Frame Locking Service Dart
```dart
class PoseDetectorService {
final PoseDetector _detector = PoseDetector(options: PoseDetectorOptions(mode: PoseDetectionMode.stream));
bool _isBusy = false;
void processCameraImage(CameraImage image, Function(List) onPoses) async {
if (_isBusy) return;
_isBusy = true;
try {
final inputImage = _convertCameraImage(image);
final poses = await _detector.processImage(inputImage);
if (poses.isNotEmpty) onPoses(poses);
} finally {
_isBusy = false;
}
}
}
```
</div>
</details>
---
## Key Takeaways & Verification
- **Edge Privacy & Latency**: 100% on-device execution delivers instantaneous audio cues with 0 bytes transmitted off-device.
- **Academic Publication**: Peer-reviewed and published at the 16th IEEE Integrated STEM Education Conference (ISEC 2026).