Python 使用 MediaPipe 计算人体腿部与右手的角度并输出到视频
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(image, '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()
代码说明:
- 导入必要的库:
cv2、mediapipe、math - 初始化 MediaPipe 的人体姿势模型:
mp_drawing和mp_pose - 打开输入视频文件:
cap - 获取输入视频的帧率和分辨率:
fps、width、height - 创建输出视频文件:
out - 使用
mp_pose.Pose对象进行人体姿势检测,并绘制人体骨架 - 获取右膝、右踝和右手腕的关键点:
right_knee、right_ankle、right_wrist - 使用
math.atan2函数计算腿部与右手的角度:angle - 在输出图片上显示角度值
- 将处理后的帧写入输出视频文件
- 显示当前帧的结果
- 按下
q键退出程序 - 释放资源
运行代码:
- 确保已经安装了
cv2、mediapipe和math库。 - 将代码保存为
.py文件,例如angle_detection.py。 - 将输入视频文件命名为
1.mp4,并将代码中的路径修改为你的视频文件路径。 - 运行代码:
python angle_detection.py。
注意:
- 代码中的
min_detection_confidence和min_tracking_confidence参数分别表示姿势检测和跟踪的最小置信度阈值。可以根据实际情况进行调整。 - 可以根据需要修改输出视频文件的路径和名称。
- 角度计算的方法可以根据实际需求进行调整。
希望这个例子能够帮助你理解如何使用 MediaPipe 在 Python 中计算人体腿部与右手的角度并输出到视频中。
原文地址: https://www.cveoy.top/t/topic/j9pG 著作权归作者所有。请勿转载和采集!