Dorso 如何用 AirPods 监测坐姿:CoreMotion 头部追踪与 8 款机型兼容检测指南
【免费下载链接】dorsoA macOS app that blurs your screen when you slouch.项目地址: https://gitcode.com/gh_mirrors/po/dorso
Dorso是一款 macOS 坐姿监测应用——当你驼背低头时,它会渐进地模糊你的屏幕来提醒你挺直;姿势恢复后,画面立刻清晰。更妙的是,它不用摄像头,而是借你耳朵上的 AirPods 里的运动传感器(CoreMotion 头部追踪)来感知头部的俯仰角度,并通过蓝牙产品 ID 精确判断你的耳机是不是 8 款带运动传感器的机型之一。下面带你轻松看懂这套原理。 🎧
为什么用 AirPods 监测坐姿,而不是摄像头?
传统做法是靠摄像头识别你的脸和肩膀,但 Dorso 提供了一条更"无感"的路径:直接用 AirPods 当传感器。👇
- 无需摄像头权限:全程只读耳机里的运动数据,隐私更安心
- 佩戴即监测:把 AirPods 放进耳朵就开始追踪,摘下自动暂停
- 角度更精准:耳机紧贴头部,俯仰角比摄像头估脸位置更灵敏
💡 核心源码在 AirPodsPostureDetector.swift,它实现了统一的 PostureDetector 协议,和摄像头检测器平级。
核心原理:CoreMotion 头部追踪如何工作
整个过程分两步:读姿态→算差值。
第一步:CMHeadphoneMotionManager 读取头部三轴姿态
macOS 14 起,CoreMotion 提供了专门的CMHeadphoneMotionManager。Dorso 用它持续订阅耳机里的运动数据,拿到三个欧拉角:
| 轴 | 含义 | 用途 |
|---|---|---|
| Pitch(俯仰) | 低头 / 抬头 | ⭐ 判断驼背的核心 |
| Roll(翻滚) | 左歪 / 右歪 | 参与校准 |
| Yaw(偏航) | 左转 / 右转 | 参与校准 |
关键调用见 AirPodsPostureDetector.swift#L341-L375:
startDeviceMotionUpdates每次回调都会取出motion.attitude.pitch / roll / yaw。
第二步:用俯仰角差值判断是否驼背
启动时你会做一次校准(坐正后点确认),Dorso 记下你"端正姿势"的基准俯仰角calibration.pitch。之后每帧都计算差值:
- 低头 = 俯仰角变小(负方向)
- 当
当前 pitch - 基准 pitch < -阈值时,判定为前倾驼背,并输出 0~1 的严重度 - 往后靠(拉伸)会被忽略,不会误报
阈值由"基础阈值(约 8.5°)+ 你在设置里调的死区"叠加而成,严重度随超出幅度线性放大。📐
这段判断逻辑见 AirPodsPostureDetector.swift#L468-L495。
8 款机型兼容检测:靠蓝牙产品 ID 精准识别
不是所有 AirPods 都有运动传感器——第 1、2 代和标准版 AirPods 4 就没有。Dorso 的做法很聪明:通过IOBluetooth读取已配对耳机的供应商 ID + 产品 ID,直接对照一份"白名单"。
✅ 带运动传感器、兼容的 8 款机型(对应 产品 ID 白名单):
| 型号 | 蓝牙产品 ID |
|---|---|
| AirPods Pro(第 1 代) | 0x200E |
| AirPods Pro(第 2 代 · Lightning) | 0x2014 |
| AirPods Pro(第 2 代 · USB-C) | 0x2030 |
| AirPods(第 3 代 · Lightning) | 0x2013 |
| AirPods(第 3 代 · MagSafe) | 0x2024 |
| AirPods Max(第 1 代) | 0x200A |
| AirPods Max(第 2 代 · USB-C) | 0x2028 |
| AirPods 4(降噪版 ANC) | 0x2036 |
❌不兼容(无运动传感器):第 1 代(0x2002)、第 2 代(0x200F)、标准版 AirPods 4(0x2033)。
兜底逻辑:如果某个产品 ID 不在表里(比如新机型),Dorso 会回退到"名称检测"(名字里含
pro/max/3/4),并记一条日志方便后续补充兼容,见 checkCompatibility。
新手上手:三步开启 AirPods 坐姿监测
- 确认系统:需要macOS 14(Sonoma)及以上,且耳机为上述 8 款之一
- 授权:首次启动时授予Motion & Fitness Activity(运动与健身)权限
- 校准:戴上 AirPods 坐正 → 屏幕提示"自动开始校准" → 完成后进入监测 ✅
菜单栏里可一键Recalibrate(重新校准)、开关Enable,还能查看Analytics(统计)。校准界面见 CalibrationWindow.swift。
常见问题 FAQ
Q:摘下 AirPods 会怎样?会自动暂停监测;重新戴回后继续。
Q:普通 AirPods 4 能用吗?标准版无运动传感器,不支持;请选降噪版(ANC)。
Q:权限被拒了怎么办?到"系统设置 → 隐私与安全性 → 运动与健身活动"里重新开启。
Q:数据会上传吗?不会。全部在本地 Mac 处理,无账号、无云、不追踪。🔒
想深入阅读源码?
Dorso 的追踪状态集中在 Sources/Core/ 下(PostureEngine做姿态状态流转,TrackingFeature负责状态机),AirPods 兼容检测在 Sources/Detectors/。若需克隆仓库自行研究,可用只读地址:
git clone https://gitcode.com/gh_mirrors/po/dorso一句话总结:Dorso 把CoreMotion 头部追踪装进了你的 AirPods,再用蓝牙产品 ID精准筛出 8 款带传感器的机型——既无摄像头之忧,又能灵敏地在你低头驼背时"糊"住屏幕,温柔地把你的腰背"拉"回来。🪑
【免费下载链接】dorsoA macOS app that blurs your screen when you slouch.项目地址: https://gitcode.com/gh_mirrors/po/dorso
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考