Python 人体姿态识别:绘制骨架并计算关节角度

本文介绍如何使用 MediaPipe 在 Python 中进行人体姿态识别,绘制人体骨架,并计算左肩、左肘和左手腕之间的角度。

import mediapipe as mp
import cv2

# 初始化 MediaPipe 姿态估计模型
mp_pose = mp.solutions.pose
pose = mp_pose.Pose()

# 初始化绘图工具
mp_drawing = mp.solutions.drawing_utils

# 加载视频或图像
cap = cv2.VideoCapture(0)

while True:
    # 读取视频帧或图像
    success, frame = cap.read()
    if not success:
        break

    # 转换图像为RGB格式
    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    # 进行姿态估计
    results = pose.process(image)

    # 绘制人体骨架
    mp_drawing.draw_landmarks(
        frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    # 获取右膝、右踝和右手腕关键点的信息
    right_knee = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_KNEE]
    right_ankle = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_ANKLE]
    right_wrist = results.pose_landmarks.landmark[mp_pose.PoseLandmark.RIGHT_WRIST]

    # 获取左膝、左踝和左手腕关键点的信息
    left_knee = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_KNEE]
    left_ankle = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_ANKLE]
    left_wrist = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_WRIST]

    # 获取左肩、左肘和左手腕的角度
    left_shoulder = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_SHOULDER]
    left_elbow = results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_ELBOW]
    left_wrist_angle = calculate_angle(left_shoulder, left_elbow, left_wrist)

    # 显示结果
    cv2.imshow('Pose Estimation', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

# 计算三个关键点之间的角度函数
def calculate_angle(a, b, c):
    # 计算向量
    ba = [b.x - a.x, b.y - a.y]
    bc = [c.x - b.x, c.y - b.y]
    # 计算向量点积
    dot_product = ba[0] * bc[0] + ba[1] * bc[1]
    # 计算向量模长
    magnitude_ba = (ba[0]**2 + ba[1]**2)**0.5
    magnitude_bc = (bc[0]**2 + bc[1]**2)**0.5
    # 计算角度
    angle = np.arccos(dot_product / (magnitude_ba * magnitude_bc))
    angle = np.degrees(angle)
    return angle

代码说明:

  1. 导入必要的库,包括 mediapipe, cv2, numpy。
  2. 初始化 MediaPipe 姿态估计模型和绘图工具。
  3. 加载视频或图像,并循环处理每一帧。
  4. 将图像转换为 RGB 格式,并使用 MediaPipe 模型进行姿态估计。
  5. 绘制人体骨架。
  6. 获取左右膝盖、左右踝关节、左右手腕的关键点信息。
  7. 获取左肩、左肘和左手腕关键点,并使用 calculate_angle() 函数计算角度。
  8. 显示结果,并监听键盘输入。
  9. 释放资源。

角度计算函数 calculate_angle():

  1. 计算向量 ba 和 bc。
  2. 计算向量点积。
  3. 计算向量模长。
  4. 计算角度,并将其转换为角度制。

通过以上代码,我们可以成功绘制人体骨架,并计算左肩、左肘和左手腕之间的角度,为进一步的动作识别和分析提供基础。

Python 人体姿态识别:绘制骨架并计算关节角度

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

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