MediaPipe坐姿检测报错:'NoneType'无landmark属性及视频警告
问题解决方案
一、TensorFlow Lite 警告处理
这类警告大多是MediaPipe依赖的TFLite版本和你本地环境版本不匹配,或是TFLite默认日志级别过高导致的,按以下步骤处理:
- 在代码开头加入日志抑制代码,直接屏蔽无关警告:
import tensorflow as tf tf.get_logger().setLevel('ERROR') - 若警告仍存在,卸载现有版本后重新安装兼容的MediaPipe和TensorFlow组合,比如:
pip uninstall mediapipe tensorflow -y pip install mediapipe==0.10.0 tensorflow==2.15.0
二、摄像头模式下的AttributeError('NoneType'对象没有'landmark'属性)
这个错误是因为MediaPipe姿态检测模型没捕捉到人体,返回了None,你直接访问results.pose_landmarks.landmark就会报错,解决方法如下:
- 强制添加空值判断:在处理姿态关键点前先检查检测结果是否有效,修改核心逻辑:
# 原检测代码 results = pose.process(image) # 修改为带判断的版本 if results.pose_landmarks: landmarks = results.pose_landmarks.landmark # 把你原本的坐姿计算、绘图逻辑放在这里 else: # 可选:在画面上提示未检测到人体 cv2.putText(image, "未检测到人体", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2) - 调整检测阈值:降低Pose初始化时的置信度阈值,避免因检测标准过严导致漏检:
pose = mp.solutions.pose.Pose( min_detection_confidence=0.5, min_tracking_confidence=0.5) - 优化拍摄环境:保证摄像头前光线充足,人体在画面中占比不小于1/3,避免侧身或过度遮挡身体。
内容的提问来源于stack exchange,提问作者Kanon Watanabe
相关产品推荐
相关产品推荐

