使用Mediapipe Holistic时未识别Landmark仍被输出的问题咨询
解决MediaPipe Holistic未识别关键点仍输出坐标导致角度计算错误的问题
MediaPipe Holistic确实会返回全部预设数量的关键点,但未出现在画面中的关键点,其**visibility(可见性)和presence(存在性)**属性值会接近0,你可以通过这两个参数判断关键点是否被有效识别,从而避免无效的角度计算。
具体解决步骤:
- 提取关键点时同步获取可见性值:每个Pose关键点都自带
visibility和presence属性,其中visibility更适合判断关键点是否在画面中被检测到,一般取0.5作为阈值(大于0.5则认为是有效识别)。 - 计算角度前校验关键点有效性:在执行角度计算逻辑前,先检查所有需要用到的关键点(肩膀、肘部、腕部、食指等)的
visibility是否达标,只要有一个不满足,就跳过角度计算。
示例代码片段:
# 假设pose_landmarks是MediaPipe返回的Pose关键点集合 # 这里用Pose关键点索引举例:11=左肩、13=左肘、15=左腕、8=左手食指尖 required_landmark_indices = [11, 13, 15, 8] is_all_valid = True # 遍历校验所有需要的关键点 for idx in required_landmark_indices: landmark = pose_landmarks.landmark[idx] # 可见性阈值设为0.5,可根据实际场景调整 if landmark.visibility < 0.5: is_all_valid = False break if is_all_valid: # 所有关键点都有效,执行角度计算 # 这里替换成你的角度计算逻辑 calculate_arm_angles(landmark_11, landmark_13, landmark_15, landmark_8) else: # 存在未识别的关键点,不执行计算或做相应提示 print("部分手臂关键点未被识别,跳过角度计算")
补充说明:
- 若场景光线较差或关键点部分被遮挡,可以适当降低
visibility阈值(比如0.3),但不要过低,避免引入误判的无效坐标。 - 如果你用的是手部关键点(比如食指属于Hand Landmarks),逻辑同理,每个手部关键点也有
visibility属性,只需对应调整关键点索引即可。
内容的提问来源于stack exchange,提问作者user23328166
相关产品推荐
相关产品推荐

