使用Mediapipe识别视频姿态时出现AttributeError错误的求助
修复Mediapipe视频姿态识别的AttributeError问题
错误原因
视频中部分帧可能存在无人体姿态、画面模糊或姿态超出检测范围的情况,导致Mediapipe返回的results.pose_landmarks为None,此时直接访问.landmark属性就会触发AttributeError。而摄像头实时画面通常姿态稳定、检测成功率高,所以不会出现该问题。
修复步骤
1. 增加空值判断(核心修复)
在访问pose_landmarks.landmark之前,先检查results.pose_landmarks是否不为空:
import cv2 import mediapipe as mp mp_pose = mp.solutions.pose pose = mp_pose.Pose() cap = cv2.VideoCapture("your_video_path.mp4") while cap.isOpened(): ret, frame = cap.read() if not ret: break # 视频读取完毕或出错,退出循环 # 处理帧并检测姿态 frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results = pose.process(frame_rgb) # 关键:先判断pose_landmarks是否存在 if results.pose_landmarks: # 访问特定landmark,比如鼻子(索引0) nose_landmark = results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE] # 后续处理逻辑... else: # 可选:无姿态检测时的提示或处理 print("当前帧未检测到姿态") # 显示帧(可选) cv2.imshow("Pose Detection", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
2. 优化视频读取逻辑
确保每次读取帧时,ret为True(表示成功读取帧),避免处理空帧导致的连锁错误。
3. 调整Mediapipe检测参数(可选)
如果视频中姿态检测率过低,可以初始化Pose时调整参数,提高检测灵敏度:
pose = mp_pose.Pose( min_detection_confidence=0.5, # 降低检测置信度阈值,默认0.5 min_tracking_confidence=0.5 # 降低追踪置信度阈值,默认0.5 )
内容的提问来源于stack exchange,提问作者dee_to
相关产品推荐
相关产品推荐

