Flutter 实现本地实时健身识别的避坑指南
做宠物养成类的健身 App 逻辑不难,难的是如何让用户在做深蹲或俯卧撑时,App 能精准计数而不至于让用户怀疑智商。
下一篇
Hinglish 混合文本分类:别再指望拿英文模型去硬刚多语言语料了 →
我最初的思路非常理想化:直接调 Pose 模型拿到关节坐标,用几何算法算膝盖夹角。只要角度低于阈值,就判定动作完成。结果真机测试时发现,2D 摄像头的透视误差能把几何逻辑玩死。用户手机放得稍微歪一点,原本 90 度的深蹲在画面里可能看起来像 150 度,算法要么直接罢工漏记,要么疯狂双倍计数。
针对这种“坐标骗局”,我尝试过用身体直线逻辑去判定俯卧撑,依然无法解决投影失真的问题。后来我换了个思路,不再死磕关节角度,而是通过追踪躯干轴线的朝向向量,来判断用户是在站立还是处于水平俯卧姿态。这种从“几何计算”转向“信号处理”的做法,在实际业务场景下的鲁棒性明显更高。
目前的技术方案是:
1. 框架:Flutter
2. 推理引擎:tflite_flutter
3. 处理逻辑:所有姿态识别完全在设备端完成,不传回服务器,兼顾隐私与响应速度。
顺便提个问题:如果要在低端机上跑这种实时向量计算,大家会优先考虑降低采样帧率,还是降低模型分辨率?
代码逻辑中我特意留了一个 debug 开关,用于在真机上实时切换不同的信号处理算法进行 A/B 测试。做移动端 ML 开发,本质上是在处理带有噪声的信号,而不是在做纯数学题。