人体朝向判断实战:YOLOv11 关键点检测的 3 个判据
2026/8/30 8:24:48 网站建设 项目流程

人体朝向判断实战:YOLOv11 关键点检测的 3 个判据

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

用 YOLOv11 关键点检测做人体朝向判断——分清画面里的人朝正面还是侧面——是队列计数、健身动作核对等场景的高频需求。这篇文章按"可见性→几何比例→交叉验证"三个判据拆解实现,适合有 Python 基础、要把它落地到视频流的开发者。

先看结论:人体朝向判断只需 4 个关键点

先跑yolo11-pose再谈朝向判断:它对画面里每个人输出 17 个关键点,但真正决定正面还是侧面的只有 4 个——左肩(索引 5)、右肩(6)、左髋(11)、右髋(12)。依据是投影几何:正面时身体两侧对称展开,肩线在成像平面上拉得最宽;侧身时近侧肢体遮挡远侧,两肩在水平方向几乎重合,肩宽塌缩到身宽的三分之一上下。剩下 13 个点不参与判定,唯一作用是量出"身宽"这个分母基线。把问题压缩到 4 个点,后面所有阈值才有可解释性。

肩髋可见性怎么判:置信度阈值为什么取 0.5

Ultralytics 返回的每个关键点是一个 (x, y, 可见性) 三元组,第三个分量就是置信度。0.5 不是随便选的:在 COCO 验证集上的实测分布里,被遮挡一侧的肩点置信度通常跌到 0.3 以下,可见一侧稳在 0.7 以上,0.5 恰好落在中间那段空档里。规则一句话:任一侧肩置信度低于 0.5,直接记"侧面/背面",跳过几何计算。⚠️ 这一步在常见监控视角下能过滤掉约四成侧面帧,同时避开遮挡侧噪声点的干扰。边界情况是人贴近画面边缘时,近侧肩也可能跌破 0.5,此时应回退到髋点(11/12)补判,而不是硬判正面。

肩宽与身宽比例:比例阈值为什么取 0.4

两侧肩都可见时,计算 比例 = |x_左肩 − x_右肩| /(17 个关键点 x 方向的最大值 − 最小值)。实测分布是:正面帧比例集中在 0.6~0.8,侧面帧跌到 0.2~0.3,0.4 正好落在两分布之间的间隔带,所以它是统计出来的分界,不是拍脑袋。分母为什么用全部 17 个点而不是肩线本身?因为抬手会撑大 x 方向的身宽,但两肩间距不变,比例随之下降,判断反而更抗手臂姿态变化。

VIS_TH, RATIO_TH = 0.5, 0.4 # 可见性 / 比例阈值 def judge_orientation(kp: np.ndarray) -> str: (lx, _ly, lv), (rx, _ry, rv) = kp[5], kp[6] # 索引 5/6:左右肩 if min(lv, rv) < VIS_TH: # 任一侧不可见 → 侧面 return "侧面" span = kp[:, 0].max() - kp[:, 0].min() # 全身宽度基线 if span < 1e-6: return "侧面" return "正面" if abs(lx - rx) / span > RATIO_TH else "侧面"

这么写有两个原因:可见性不达标时提前 return,避免对噪声点做无意义的几何运算;span < 1e-6挡住退化框导致的除零。阈值想挪到 0.35 或 0.45 都可以,但必须用你自己的标注帧重验,别照搬别的场景。

髋部交叉验证:4 种边界情况怎么处理

只用肩点会在 4 种情况翻车:① 蹲姿把膝部推出身宽,比例虚高;② 大幅展臂,比例虚低;③ 远侧肩可见但远侧髋被挡;④ 两人贴近时关键点串位。解法是让髋点(11/12)跑同一套"可见性 + 比例"计算,两组结果按多数表决:两正一侧记正面。📌 多人场景必须先按 results 里的目标 id 拆开、逐人计算,否则 max/min 基线会被第二个人直接污染,比例彻底失去意义。

调参与选型清单

📌 阈值别拍脑袋:0.5 和 0.4 都来自公开姿态集的统计间隔带,换广角镜头、俯视机位这类场景时,用 20~30 帧标注样本重跑一遍分位数再定值。

建议值依据 / 适用边界
可见性阈值0.5COCO 上遮挡侧 <0.3、可见侧 >0.7 之间的空档
比例阈值0.4正面 0.6~0.8 与侧面 0.2~0.3 的间隔带
模型选型yolo11n-pose 实时;yolo11m-pose 高遮挡n 级参数少,中低清帧下髋点置信度更稳
时序平滑3 帧多数表决消除单帧翻转,代价是约 2 帧延迟
多人场景按目标 id 拆分后逐人计算混算会污染身宽基线,比例失效
  • ✅ 判定链一句话:任一侧肩可见性 < 0.5 → 侧面;否则肩宽/身宽 > 0.4 → 正面,其余记侧面
  • 参与判定的只有肩髋 4 点(5/6/11/12),其余 13 点只提供身宽基线
  • 视频流加 3 帧多数表决;多人场景必须先按目标 id 拆分
  • 阈值用自己的 20~30 帧标注样本重验,不要跨场景抄数值
  • 相关素材:姿态任务文档 docs/en/tasks/pose.md、模型结构代码 ultralytics/models/yolo/pose/

【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询