在使用 MediaPipe 姿势识别模型提取关键点数据时,可能会遇到以下错误:

pose_data = []
for landmark in results.pose_landmarks.landmark:
    if landmark.visibility < 0.5:  # 如果关键点可见度小于0.5,则跳过
        continue
    if landmark.name not in ['NOSE', 'LEFT_SHOULDER', 'RIGHT_SHOULDER', 'LEFT_ELBOW', 'RIGHT_ELBOW',
                         'LEFT_WRIST', 'RIGHT_WRIST', 'LEFT_HIP', 'RIGHT_HIP', 'LEFT_KNEE',
                         'RIGHT_KNEE', 'LEFT_ANKLE', 'RIGHT_ANKLE']:  # 如果关键点不是需要的关键点,则跳过
        continue
    pose_data.append(landmark.x)
    pose_data.append(landmark.y)
    pose_data.append(landmark.z if landmark.z is not None else 0)

错误原因:

这个错误是因为在使用 landmark.z 时,有些关键点的 z 值可能为 None,而 None 不能被序列化,所以需要进行判断和处理。

解决方案:

可以将这一行代码改为:

pose_data.append(landmark.z if hasattr(landmark, 'z') and landmark.z is not None else 0)

这样就可以避免出现 AttributeError 的错误了。

解释:

hasattr(landmark, 'z') 用于检查 landmark 对象是否具有属性 z。如果 landmark 具有 z 属性,并且 landmark.z 不是 None,则将 landmark.z 追加到 pose_data 列表中;否则,将 0 追加到 pose_data 列表中。

注意:

在使用 MediaPipe 的其他功能时,也可能遇到类似的错误。建议在处理关键点数据时,仔细检查每个关键点的属性,并进行必要的判断和处理,避免出现错误。

解决Python MediaPipe 姿势识别中 AttributeError: name 错误

原文地址: https://www.cveoy.top/t/topic/gNkb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录