关键点检测模型 (Keypoint Detection)
备注
本页面介绍DaoAI World模型的关键点检测类型。返回 DaoAI World模型主页
模型简介
关键点检测模型用于识别物体上的特定关键点位置,输出每个关键点的坐标和可见性信息。最常见的应用是人体姿态估计,但也可用于任何需要定位关键特征点的场景。
输出内容:
关键点坐标 (x, y)
关键点置信度/可见性 (0~1之间的浮点数)
物体边界框 (可选)
姿态骨架连接 (可选)
适用场景
关键点检测模型适用于以下场景:
人体姿态估计:健身动作识别、体态分析、动作捕捉
手势识别:手部关键点检测、手语识别、AR交互
人脸关键点:面部特征定位、表情识别、美颜滤镜
运动分析:体育动作分析、步态识别、康复训练
工业检测:零件关键点定位、装配引导
动物行为分析:动物姿态跟踪、行为研究
车辆关键点:车辆关键部位定位、损伤检测
输出格式
关键点检测模型的输出包含检测到的所有实例及其关键点信息:
{
"instances": [
{
"class": "person",
"confidence": 0.95,
"bbox": {
"x": 100,
"y": 50,
"width": 200,
"height": 400
},
"keypoints": [
{
"name": "nose",
"x": 200,
"y": 120,
"confidence": 0.98,
"visible": true
},
{
"name": "left_eye",
"x": 190,
"y": 110,
"confidence": 0.95,
"visible": true
},
{
"name": "right_eye",
"x": 210,
"y": 110,
"confidence": 0.96,
"visible": true
},
{
"name": "left_shoulder",
"x": 170,
"y": 200,
"confidence": 0.92,
"visible": true
},
{
"name": "right_shoulder",
"x": 230,
"y": 200,
"confidence": 0.90,
"visible": true
}
],
"skeleton": [
["nose", "left_eye"],
["nose", "right_eye"],
["left_shoulder", "right_shoulder"]
],
"instance_id": 1
}
],
"count": 1
}
字段说明:
class: 物体类别confidence: 检测整体置信度bbox: 物体边界框keypoints: 关键点列表name: 关键点名称x,y: 关键点坐标confidence: 该关键点的置信度visible: 关键点是否可见(未被遮挡)
skeleton: 骨架连接关系(定义哪些关键点之间有连接)instance_id: 实例唯一标识符
常见关键点集合
人体姿态关键点 (17点 - COCO格式)
0: nose (鼻子)
1: left_eye (左眼)
2: right_eye (右眼)
3: left_ear (左耳)
4: right_ear (右耳)
5: left_shoulder (左肩)
6: right_shoulder(右肩)
7: left_elbow (左肘)
8: right_elbow (右肘)
9: left_wrist (左腕)
10: right_wrist (右腕)
11: left_hip (左臀)
12: right_hip (右臀)
13: left_knee (左膝)
14: right_knee (右膝)
15: left_ankle (左踝)
16: right_ankle (右踝)
手部关键点 (21点)
手掌根部、5个手指各4个关节点
人脸关键点 (68点/98点)
面部轮廓、眉毛、眼睛、鼻子、嘴巴的特征点
配置示例
人体姿态检测
{
"step_name": "pose_estimation",
"image": "input.image",
"model_type": "keypoint_detection",
"confidence": 0.5
}
高精度动作分析
{
"step_name": "fitness_pose_check",
"image": "camera.frame",
"model_type": "keypoint_detection",
"confidence": 0.7,
"label_confidence_thresholds": {
"person": 0.8
}
}
多人姿态检测
{
"step_name": "multi_person_pose",
"image": "crowd.image",
"model_type": "keypoint_detection",
"confidence": 0.6,
"label_confidence_thresholds": {
"person": 0.7
}
}
使用技巧与最佳实践
置信度阈值设置
整体检测置信度:0.5-0.7
单个关键点置信度:0.3-0.5(关键点部分遮挡时会降低)
关键应用(如医疗):0.8-0.9
处理遮挡情况
检查每个关键点的
visible标志过滤掉
confidence过低的关键点使用骨架连接关系推断被遮挡的关键点
多人场景处理
通过
instance_id区分不同的人使用边界框信息辅助追踪
关注
count字段获取总人数
动作识别应用
计算关键点之间的角度判断姿态
追踪关键点运动轨迹分析动作
使用骨架长度比例进行姿态标准化
性能优化
关键点检测计算量较大,建议使用GPU
对于实时应用,可适当降低输入分辨率
多人场景下性能随人数增加而降低
常见问题
Q: 关键点坐标是归一化的还是绝对坐标?
A: 关键点坐标为绝对像素坐标,与输入图像尺寸对应。
Q: 如何判断某个关键点是否被遮挡?
A: 检查该关键点的 visible 标志和 confidence 值。如果 visible 为 false 或 confidence 很低(如<0.3),说明该点可能被遮挡。
Q: 检测不到关键点怎么办?
A: 可能的原因和解决方案:
图像质量差:提高图像分辨率和清晰度
姿态极端:确保训练数据包含各种姿态
遮挡严重:降低关键点置信度阈值
光照不佳:改善拍摄条件或使用数据增强
Q: 如何计算两个关键点之间的角度?
A: 使用三个关键点的坐标,通过向量夹角公式计算:
import math
def calculate_angle(p1, p2, p3):
"""计算p1-p2-p3形成的角度"""
v1 = (p1['x'] - p2['x'], p1['y'] - p2['y'])
v2 = (p3['x'] - p2['x'], p3['y'] - p2['y'])
dot = v1[0]*v2[0] + v1[1]*v2[1]
len1 = math.sqrt(v1[0]**2 + v1[1]**2)
len2 = math.sqrt(v2[0]**2 + v2[1]**2)
angle = math.acos(dot / (len1 * len2))
return math.degrees(angle)
Q: 可以检测多个人吗?
A: 可以。模型会为每个检测到的人输出独立的关键点集合,通过 instance_id 区分。
应用案例
案例1:健身动作检测
检测用户的健身动作是否标准,如深蹲、俯卧撑等。
{
"step_name": "fitness_coach",
"model_type": "keypoint_detection",
"confidence": 0.7
}
应用逻辑:
检测关键点位置
计算关节角度(如膝盖角度、手臂角度)
与标准动作对比
给出实时反馈
案例2:跌倒检测
监测老人或患者的姿态,检测跌倒事件。
{
"step_name": "fall_detection",
"model_type": "keypoint_detection",
"confidence": 0.6
}
检测逻辑:
计算身体主轴(头部到臀部)与垂直方向的角度
如果角度>60度且头部高度低于臀部,触发跌倒警报
案例3:手势识别
识别手部关键点,实现手势控制。
{
"step_name": "hand_gesture",
"model_type": "keypoint_detection",
"confidence": 0.7,
"label_confidence_thresholds": {
"hand": 0.75
}
}
应用场景:
非接触式界面控制
手语翻译
AR/VR交互
案例4:体育动作分析
分析运动员的动作技术,用于训练改进。
{
"step_name": "sports_analysis",
"model_type": "keypoint_detection",
"confidence": 0.8
}
分析内容:
投篮/挥拍动作的标准性
跑步姿态分析
关节角度和运动轨迹追踪
性能参考
场景 |
推荐配置 |
预期性能 |
|---|---|---|
单人实时检测 |
640×480, GPU |
30+ FPS |
多人场景(<5人) |
1280×720, GPU |
15-25 FPS |
高精度分析 |
1920×1080, GPU |
5-10 FPS |