安装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
)

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐