import cv2
import mediapipe as mp
import math

# 初始化MediaPipe的人体姿势模型
mp_drawing = mp.solutions.drawing_utils
mp_pose = mp.solutions.pose

# 打开输入视频文件
cap = cv2.VideoCapture('1.mp4')

# 获取输入视频的帧率和分辨率
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 创建输出视频文件
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('2.mp4', fourcc, fps, (width, height))

# 处理视频文件中的每一帧
with mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5) as pose:
    while cap.isOpened():
        # 读取一帧
        ret, frame = cap.read()
        if not ret:
            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]

        # 计算腿与右手的角度
        angle = math.degrees(math.atan2(right_wrist.y - right_ankle.y, right_wrist.x - right_ankle.x) - 
                             math.atan2(right_knee.y - right_ankle.y, right_knee.x - right_ankle.x))

        # 在输出图片上显示角度值
        cv2.putText(frame, 'Angle: {:.2f}'.format(angle), (50, 50),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

        # 将帧写入输出视频文件
        out.write(frame)

        # 显示当前帧的结果
        cv2.imshow('MediaPipe Pose Detection', frame)
        cv2.imshow('MediaPipe Pose Estimation', frame)
        # 按下q键退出

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

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

代码功能:

  1. 使用MediaPipe库进行人体姿势检测,识别出人体关键点,包括右膝、右脚踝和右手腕。
  2. 计算右脚踝与右膝之间的角度,以及右脚踝与右手腕之间的角度,并计算两者的差值,即腿与右手的角度。
  3. 使用OpenCV库将角度值显示在视频画面上。

代码运行步骤:

  1. 确保已安装MediaPipe和OpenCV库。
  2. 将视频文件命名为'1.mp4',放置在代码所在目录下。
  3. 运行代码,代码会自动生成一个名为'2.mp4'的输出视频文件,其中包含检测结果和角度值。

代码改进:

  • 可以根据实际情况调整代码参数,例如min_detection_confidencemin_tracking_confidence,以提高检测精度。
  • 可以增加其他角度计算,例如计算其他关节之间的角度,以更全面地分析人体运动。
  • 可以添加GUI界面,方便用户选择输入视频文件和设置参数。

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

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