news 2026/10/3 20:07:49

Dorso 如何“看见“你的坐姿?Vision 框架身体姿态检测与面部回退策略全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dorso 如何“看见“你的坐姿?Vision 框架身体姿态检测与面部回退策略全解析

Dorso 如何"看见"你的坐姿?Vision 框架身体姿态检测与面部回退策略全解析

【免费下载链接】dorsoA macOS app that blurs your screen when you slouch.项目地址: https://gitcode.com/gh_mirrors/po/dorso

Dorso 是一款 macOS 坐姿检测应用:当你弯腰驼背时,它会用渐进式屏幕模糊提醒你坐直。本文完整解析 Dorso 的核心技术——基于 Vision 框架的身体姿态检测,以及当身体不在画面时自动切换面部识别的回退策略,带你看懂这套坐姿检测系统如何一步步"看见"你。

一分钟看懂 Dorso 的坐姿检测效果 📷

Dorso 的工作方式很直接:Mac 摄像头持续观察你,一旦发现你从"坐姿基线"往下塌,就立刻模糊你的屏幕;你坐直后,模糊瞬间消失。

整个过程分为四个环节:

  1. 采集:摄像头以低帧率(默认 4 帧/秒)输出画面
  2. 识别:Vision 框架在画面中定位身体姿态关键点
  3. 比较:把鼻子位置与你校准好的"好坐姿基线"对比
  4. 反馈:偏差超过死区时触发模糊,坐直后立即解除

所有逻辑都集中在 CameraPostureDetector.swift,下面逐层拆解。

第一步:Vision 框架捕捉身体姿态关键点

Dorso 的主检测手段是 Vision 框架的人体姿态检测(Body Pose Detection)。每一帧画面都会执行一次VNDetectHumanBodyPoseRequest,从结果中取出鼻子(nose)关键点的位置——因为低头驼背时,鼻子在画面中的纵向坐标会明显下移,这是最可靠的"塌腰信号"。

这里有两个关键细节:

  • 置信度门槛:只有当鼻子关键点置信度 > 0.3 时才采信,过滤掉识别模糊的帧,见 analyzeBodyPose
  • 帧节流:摄像头其实每帧都送画面,但检测器默认每 0.25 秒才真正分析一次;一旦判定你正在驼背,分析频率自动提升到每 0.1 秒一次,这样你坐直的瞬间就能立刻解除模糊,见 frameInterval

这种"平时省电、出事加速"的策略,是整套坐姿检测系统流畅度的关键。帧处理的完整入口在 processFrame。

第二步:面部回退策略——身体不在画面时怎么办?

摄像头视角固定时,你的肩膀和身体可能完全出镜(比如用外接摄像头斜对着你)。如果此时没有备选方案,坐姿检测就会"失明"。

Dorso 的解法是面部识别回退策略(Face Detection Fallback):

身体姿态检测失败或没有结果时,自动降级为VNDetectFaceRectanglesRequest人脸框检测,用人脸框的纵向中心点(midY)代替鼻子位置,人脸框宽度则用于额外判断。

逻辑非常简洁:身体检测有结果 → 用鼻子坐标;没有结果 → 自动跑一次人脸检测;连脸都找不到 → 累计"无人帧"计数。完整实现见 tryFaceDetection。

这个"无人帧"计数还有一个隐藏用途:连续 15 帧检测不到人时,Dorso 会判定你离开了电脑,如果你开启了"离开时模糊"(Blur when Away)选项,屏幕会自动变模糊保护隐私,见 handleNoDetection。

校准流程:教会 Dorso 认识"你的"好坐姿

每个人的屏幕距离、坐姿习惯都不同,所以 Dorso 不依赖写死的坐标,而是先做坐姿校准:

  • 先坐直,采集若干帧作为"好姿态"样本
  • 再放松塌下去,采集"坏姿态"样本
  • 系统把样本中最高的鼻子 Y 值定为好坐姿基线(goodPostureY),最低的定为坏姿态基线(badPostureY),两者之差就是你的个人姿态范围(postureRange)

同样,校准时会记录最大人脸宽度作为中性基准(neutralFaceWidth),用于下面要讲的"探头"检测。校准数据的生成逻辑在 createCalibrationData,数据结构定义见 CameraCalibrationData。

校准完成后,你可以随时通过菜单栏的Recalibrate重新校准,适应新的工位距离。

实时评估:滑动平均 + 死区 + 滞回,如何避免误报?

原始坐标帧帧抖动,直接比较会频繁误报。Dorso 在 evaluatePosture 中叠加了三重滤波:

① 滑动平均平滑:保留最近 5 帧的鼻子 Y 值取平均,抹掉单帧抖动,见 smoothNoseY。

② 死区(Dead Zone)+ 滞回(Hysteresis):只有当"下沉量"超过死区阈值才判定为驼背;进入驼背状态后,解除阈值自动缩小到 70%,避免你在阈值边缘反复横跳时模糊效果闪烁——这是经典的进入/退出双阈值设计。

③ 探头检测(Forward-Head Detection):除了"往下塌",脖子前探("乌龟颈")同样有害。Dorso 用人脸宽度与校准基准的比值来判断:脸突然变"大" 5% 以上(说明你凑近屏幕了),即触发探头警告,且严重程度至少记为 0.5。相关阈值常量定义在 CameraCalibrationData。

最终每一帧都会输出一个 0.0(完全坐直)到 1.0(非常严重)的严重程度分数,驱动模糊强度渐进加深——不是简单报警,而是"越驼背越模糊"的渐进提醒。

性能与隐私:4 帧/秒的本地坐姿检测

  • 低开销:默认 4 帧/秒的分析频率 + VGA 分辨率采集,CPU 占用极低,适合长期后台运行
  • 全本地处理:所有视频数据都在你的 Mac 上分析,不上传、不存储任何画面
  • 摄像头权限透明:首次启动会请求相机权限,随时可在系统设置中管理

检测出的每条坐姿读数(PostureReading:时间戳 + 是否驼背 + 严重程度)还会汇入分析面板,帮你看到近 7 天的坐姿评分趋势,让"坐直"变成可量化的习惯。

快速上手:三步完成坐姿检测校准

  1. 安装:运行brew install dorso,或下载最新 DMG 拖入应用程序
  2. 授权:首次启动时允许相机访问(若误拒,去"系统设置 > 隐私与安全性 > 相机"重新开启)
  3. 校准:按引导先坐直、再放松,分别采集好/坏姿态样本,坐姿监控即开始

几个让坐姿检测更准的小技巧:摄像头尽量与视线平齐、面部光线充足、与屏幕保持固定距离,并确保肩膀在画面内——身体在画面中时,鼻子关键点检测比人脸框回退更精准。

总结

Dorso 的坐姿检测可以概括为一条流水线:Vision 身体姿态检测定位鼻子 → 面部识别兜底 → 个人校准基线对比 → 平滑 + 死区 + 滞回三重滤波 → 渐进模糊提醒。身体姿态检测负责精度,面部回退策略负责鲁棒性,校准机制负责个性化——三者配合,才让"屏幕模糊"这个简单动作,变成真正懂你坐姿的提醒。

【免费下载链接】dorsoA macOS app that blurs your screen when you slouch.项目地址: https://gitcode.com/gh_mirrors/po/dorso

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 19:59:24

甘特图重温

一开始让Agent美化一下成这样子了,好像不太对劲,不是想要的效果。再来~~把自己的链接拿来用,发现控制台报一堆红,排查了一下,发现是没打包,效果如下和最终效果还是差蛮多的,还需完善~~

作者头像 李华
网站建设 2026/10/3 19:58:50

AI 短剧换镜头脸就变了,有什么工具或方法能让人物形象不崩?

用 AI 生成短剧时,「换镜头主角换脸」是最常见的翻车点:同一个角色,镜头一切,五官、发型、肤色甚至性别都变了,观众一秒出戏。这个问题在技术上叫「角色一致性」,本文从成因、通用方法、工具对比三个层面给…

作者头像 李华
网站建设 2026/10/3 19:52:55

千万不能忽视!江苏体育高职单招培训机构最新排名揭晓

引言 随着体育教育的不断发展,越来越多的学生选择通过高职单招的方式进入心仪的体育院校。然而,在激烈的竞争中,如何选择一家优质的培训机构成为了许多考生和家长关注的重点。本文将为您揭示最新的江苏体育高职单招培训机构排名,并…

作者头像 李华