【代码分享】使用MediaPipe库实时监测人体关键点
·
安装MediaPipe库
确保已安装Python 3.7及以上版本,通过pip安装MediaPipe库:
pip install mediapipe
导入依赖库
需要OpenCV和MediaPipe库处理视频流和关键点检测:
import cv2
import mediapipe as mp
初始化MediaPipe模型
加载MediaPipe的人体姿态检测模块,并配置参数:
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(
static_image_mode=False,
model_complexity=1,
smooth_landmarks=True,
min_detection_confidence=0.5,
min_tracking_confidence=0.5
)
mp_drawing = mp.solutions.drawing_utils
处理视频流
打开摄像头或视频文件,逐帧处理并检测关键点:
cap = cv2.VideoCapture(0) # 0表示默认摄像头
while cap.isOpened():
success, image = cap.read()
if not success:
break
# 转换为RGB格式
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 检测关键点
results = pose.process(image_rgb)
# 绘制关键点和连接线
if results.pose_landmarks:
mp_drawing.draw_landmarks(
image,
results.pose_landmarks,
mp_pose.POSE_CONNECTIONS,
landmark_drawing_spec=mp_drawing.DrawingSpec(color=(0, 255, 0), thickness=2, circle_radius=2),
connection_drawing_spec=mp_drawing.DrawingSpec(color=(0, 0, 255), thickness=2)
)
# 显示结果
cv2.imshow('MediaPipe Pose', image)
if cv2.waitKey(5) & 0xFF == 27: # 按ESC退出
break
cap.release()
cv2.destroyAllWindows()
关键点坐标提取
可通过results.pose_landmarks.landmark获取每个关键点的归一化坐标(0-1范围):
if results.pose_landmarks:
for idx, landmark in enumerate(results.pose_landmarks.landmark):
h, w, _ = image.shape
cx, cy = int(landmark.x * w), int(landmark.y * h)
print(f"Keypoint {idx}: ({cx}, {cy})")
性能优化
对于低配置设备,可降低输入分辨率或模型复杂度:
pose = mp_pose.Pose(
static_image_mode=False,
model_complexity=0, # 0=轻量,1=标准,2=高精度
smooth_landmarks=True
)
更多推荐


所有评论(0)