端侧姿态估计实战:用 MediaPipe Pose Landmarker 给应用装上骨架追踪
为什么要在端侧做姿态估计
健身 App 的深蹲计数、体感游戏的角色控制、运动康复的关节角度分析、儿童体态监测——这些场景的共同点是需要实时追踪人体骨架,而画面里全是敏感的身体信息。把姿态估计模型跑在设备端,视频不出手机,延迟低到能跟上 30fps 的视频流,还不用为每次推理付云服务费。这就是端侧姿态估计(On-Device Pose Estimation)的价值。
过去这类能力门槛很高,但 2026 年的今天,一个 5.8MB 的模型就能在普通手机上实时输出人体 33 个关键点坐标。这篇文章带你从模型选型到完整代码跑通全流程。
方案选型:MoveNet 还是 Pose Landmarker
端侧单人姿态估计有两大主流开源方案,都是 Google 出品:
| 方案 | 关键点 | 模型体积 | 输入尺寸 | 特点 |
|---|---|---|---|---|
| MoveNet Lightning | 17 点 | 约 4.5MB | 192x192 | 轻量优先,帧率高 |
| MoveNet Thunder | 17 点 | 约 12.6MB | 256x256 | 精度优先 |
| Pose Landmarker Lite | 33 点 | 5.8MB | 256x256 | 含脸部 6 点,轻量 |
| Pose Landmarker Full | 33 点 | 9.4MB | 256x256 | 精度/速度均衡 |
| Pose Landmarker Heavy | 33 点 | 30.7MB | 256x256 | 最高精度,桌面端 |
MoveNet 只有 17 个关键点(躯干加四肢),而 Pose Landmarker 基于 BlazePose 架构输出 33 个关键点,多了眼睛、耳朵、嘴巴等面部点位,还附带每个点的可见度和世界坐标,做健身计数、动作比对都更从容。体积只差 1MB,我推荐直接用 Pose Landmarker,三个档位按设备性能挑。
以上体积数据来自 Google 官方模型仓库(storage.googleapis.com 的 float16 版本),实测下载确认。
实战:Python 十分钟跑通
先安装依赖并下载 Lite 模型:
|
|
推理代码只有二十几行:
|
|
关键点索引是固定枚举:0 鼻子、11 左肩、12 右肩、13 左肘、14 右肘、15 左腕、16 右腕、23 左髋、24 右髋、25 左膝、26 右膝、27 左踝、28 右踝。坐标全部归一化到 0-1,乘以画面宽高即得像素位置。
应用实战:深蹲计数
有了关键点坐标,做健身计数就只剩三角函数。深蹲的核心特征是髋膝踝三点夹角小于某个阈值:
|
|
配合一个简单的状态机(下蹲-站起翻转一次计一个数),50 行代码就能做出可用的深蹲计数器,全程本地推理、无网络依赖。
端侧性能与集成建议
按 Google 官方文档数据,Pose Landmarker 在移动 GPU 上:Lite 模型可达 100fps 以上,Full 模型 60fps 左右,Heavy 模型约 30fps(手机 CPU 上会明显下降)。实际体验中,中端 Android 手机跑 Lite 用 CPU delegate 也能稳定 30fps,完全满足实时视频流需求。
集成到不同端侧框架:
- Android:官方 AAR 包,
PoseLandmarker.createFromFile一行加载,支持 CPU/GPU delegate - iOS:MediaPipe Tasks Swift API,模型转 Core ML 后可配合 Vision 框架(参考本站 YOLOv8 转 Core ML 一文的方法)
- 桌面/树莓派:Python API 开箱即用,Heavy 模型在桌面 CPU 约 15-25fps
开源方案推荐
| 项目 | 适用场景 |
|---|---|
| MediaPipe Tasks(官方) | 跨端生产级方案,Android/iOS/Python/Web 全覆盖 |
| MoveNet(TFLite) | 极致轻量,低端设备首选 |
| mmpose(OpenMMLab) | 学术研究、自定义训练,精度上限高 |
| Ultralytics YOLOv8-pose | 想用 YOLO 统一检测+姿态管线时 |
小结
端侧姿态估计已经不是高不可攀的算法题,而是一个下载模型、二十行代码就能落地的工程活。选 Pose Landmarker Lite 起步,用关键点夹角做业务逻辑,Android 直接集成官方 SDK,iOS 走 Core ML 转换——这套路径从原型到上线都走得通。下一篇可以聊聊用姿态关键点序列训练动作分类模型,把"计数"升级成"动作识别"。