人体姿态检测把人的位置转成关节点,适合研究动作数据或检查拍摄角度。它与识别人脸身份、判断某人是否健康是不同任务。这里用 YOLO11n-pose 输出 17 个 COCO 关键点,并用遮挡照片检查哪些点不应直接使用。
先准备适合检查的照片
选一张获得使用许可、全身较完整的 person.jpg。再准备一张手臂或腿被遮挡的对照图。左、右指人物自身的左右,不是观察者屏幕的左右;对照时不要把两者混为一谈。

python -m pip install ultralytics
在独立 Python 3.11 环境运行;示例走 CPU。安装时记录版本,首次加载可能下载权重。本文未运行该姿态模型,没有把下面代码当成姿态精度评测。
导出关键点和核对图
保存为 pose_points.py,与 person.jpg 放在同一目录,运行 python pose_points.py。
import json
from ultralytics import YOLO
model = YOLO("yolo11n-pose.pt")
result = model.predict("person.jpg", device="cpu", verbose=False)[0]
names = ["nose", "left_eye", "right_eye", "left_ear", "right_ear",
"left_shoulder", "right_shoulder", "left_elbow", "right_elbow",
"left_wrist", "right_wrist", "left_hip", "right_hip",
"left_knee", "right_knee", "left_ankle", "right_ankle"]
people = []
if result.keypoints is not None:
xy = result.keypoints.xy.cpu().tolist()
conf = result.keypoints.conf
conf = conf.cpu().tolist() if conf is not None else None
for person_id, points in enumerate(xy):
people.append({"person_index": person_id, "points": [
{"name": names[k], "xy": point,
"score": conf[person_id][k] if conf is not None else None}
for k, point in enumerate(points)]})
result.save(filename="pose_check.jpg")
print(json.dumps(people, ensure_ascii=False, indent=2))
person_index 只表示这次图片输出里的序号,不是跨照片身份 ID。xy 是原图像素位置;score 为该关键点的置信信息,缺失时保留 null,不替模型编分数。
完整照片与遮挡照片如何对照
打开 pose_check.jpg,对照肩、肘、腕、髋、膝、踝的位置,再把输入换成遮挡图重跑。记录明显偏离的位置和低置信点,不只检查是否输出 17 个元素。
遮挡、出画面或低置信度关键点不能直接用于角度结论;坐标为零也不应当成真的关节点。先在自有标注样本上设置可用分数门槛,再决定是否计算动作特征。
常见问题
- 没有人:检查拍摄主体是否足够大、照片是否完整读入、是否用错普通检测权重。
- 多人点连错:逐个 person_index 对照框和骨架,不把不同人的关节点拼在一起。
- 想评判动作标准:另建有专业人工标注的评估集;骨架图本身不能证明动作正确。
本例不提供医疗或运动损伤判断。商业分发或系统接入前应阅读 Ultralytics 的授权选项。
资料与适用范围
本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30647.html