AI 资源精选
  相关资讯
标题:
工具:
简介:
中文提示词:
基于MediaPipe的人体姿态识别
发布时间:2025-03-12

一、前言

在计算机视觉领域,人体姿态识别是一个极具挑战性和应用价值的任务。它广泛应用于动作捕捉、虚拟现实、智能监控等诸多场景。而MediaPipe作为谷歌推出的一个开源机器学习框架,为人体姿态识别提供了强大的支持和便捷的实现方式。本文将详细介绍如何使用MediaPipe进行人体姿态识别,包括环境搭建、代码实现以及结果展示等环节。


二、MediaPipe简介

Mediapipe 是由Google开发的开源框架,旨在构建跨平台的机器学习管道,特别适用于处理多媒体数据如视频和图像。它提供了一套库和工具,让开发者能够快速将人工智能(AI)和机器学习(ML)技术应用到自己的应用程序中。无论是在移动设备、网页应用还是嵌入式系统上,MediaPipe都能提供高效的性能表现。


核心功能

MediaPipe Tasks:用于部署解决方案的跨平台API和库。

MediaPipe Models:预训练的、即用型模型。

MediaPipe Model Maker:允许使用自定义数据定制模型。

MediaPipe Studio:在浏览器中可视化、评估和基准测试解决方案。


核心特性

GPU加速:利用图形处理单元(GPU)进行快速处理,能够处理最具挑战性的多媒体任务。

并行处理:能够同时执行多项任务,如处理多个视频流或运行多个计算机视觉模型。

OpenCV集成:集成了强大的开源计算机视觉库OpenCV,轻松添加视频捕获、处理和渲染功能。

TensorFlow支持:与Google的机器学习工具TensorFlow集成,便于添加预训练或自定义模型。

多语言支持:支持C++、Java和Python等流行语言。

预训练模型:提供即用型模型,便于快速集成到应用中。

模型定制:通过MediaPipe Model Maker,可以使用特定数据定制模型。

高效的设备端处理:针对设备端机器学习进行了优化,无需依赖云处理即可实现实时性能。


应用场景

MediaPipe在多个领域都有广泛的应用,以下是一些典型的应用场景:

人体姿态估计:在健身、体育和医疗保健领域通过精确的人体姿态估计技术产生了重大影响。它可以实时检测和追踪身体关节和运动,被用于运动反馈应用、体育表现分析和物理治疗辅助。

视频通话增强:在COVID-19疫情期间,远程通信和视频会议应用的使用大幅增加。MediaPipe在改进这些技术方面发挥了重要作用,添加了动态帧调整和手势控制等功能。

增强现实滤镜设计:可用于创建类似Snapchat或Instagram的基于增强现实(AR)的人脸滤镜。这个过程涉及多个步骤,首先是准确识别人脸特征。

智能安防:在安防监控系统中,MediaPipe可以用于身份验证和行为分析。

医疗健康:某医院采用MediaPipe的面部追踪技术,帮助医生监测患者的面部表情变化,从而评估其心理状态。

MediaPipe是一个功能强大且易于使用的多媒体处理框架,无论你是初学者还是资深开发者,都能从中受益。它提供了丰富的预训练模型和工具,支持多种平台和语言,能够满足各种实时处理视觉数据的需求。


三、环境搭建

安装MediaPipe和OpenCV

在开始之前,我们需要安装MediaPipe和OpenCV库。这两个库将共同完成视频捕获和姿态检测的任务。在Windows命令行环境下,可以使用以下命令进行安装:

pip install mediapipe opencv-python


四、代码实现

实时监测姿态识别

导入必要的Python模块


import cv2
import mediapipe as mp


初始化MediaPipe姿态检测对象


mpPose = mp.solutions.pose  # 导入姿态检测模块
pose_mode = mpPose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)  # 创建姿态检测对象并设置参数
mpDraw = mp.solutions.drawing_utils  # 导入绘图工具
 捕获视频并进行姿态检测
cap = cv2.VideoCapture(0)  # 使用摄像头捕获视频,参数0表示使用默认摄像头
 
while True:
    success, img = cap.read()  # 读取视频帧
    img = cv2.flip(img, 1)  # 翻转图像,使画面更加自然
    results = pose_mode.process(img)  # 对图像进行姿态检测
 
    if results.pose_landmarks:
        mpDraw.draw_landmarks(img, results.pose_landmarks, mpPose.POSE_CONNECTIONS)  # 绘制姿态关键点和连接线
 
    cv2.imshow("img", img)  # 显示图像
    if cv2.waitKey(1) & 0xFF == ord("q"):  # 按下'q'键退出循环
        break
 
cap.release()  # 释放摄像头资源
cv2.destroyAllWindows()  # 关闭所有OpenCV窗口



效果图如下


视频的姿态识别的实现

与上述实时监测的原理相同,代码如下


import cv2
import mediapipe as mp
 
# 打开本地视频文件
cap = cv2.VideoCapture('./demo.mp4')
 
# 获取视频的宽度、高度和帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
 
# 定义视频编码器和输出文件
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height))
 
# 初始化MediaPipe姿态检测对象
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(min_detection_confidence=0.5, min_tracking_confidence=0.5)
mp_drawing = mp.solutions.drawing_utils
 
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = pose.process(frame_rgb)
    
    if results.pose_landmarks:
        mp_drawing.draw_landmarks(frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
    
    # 写入输出文件
    out.write(frame)
    
    cv2.imshow('Pose Detection', frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
 
cap.release()
out.release()
cv2.destroyAllWindows()



效果图如下


图片的姿态识别的实现

import cv2
import mediapipe as mp
 
# 初始化MediaPipe的绘制工具和姿态检测模块
mp_drawing = mp.solutions.drawing_utils
mp_pose = mp.solutions.pose
 
# 设置绘制关键点和连接线的样式
DrawingSpec_point = mp_drawing.DrawingSpec((0, 255, 0), 2, 2)
DrawingSpec_line = mp_drawing.DrawingSpec((0, 0, 255), 2, 2)
 
# 初始化姿态检测对象,设置为静态图片模式
pose = mp_pose.Pose(static_image_mode=True)
 
# 读取图片
file = 'input.jpg'
image = cv2.imread(file)
image_height, image_width, _ = image.shape
 
# 将BGR图像转换为RGB图像
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
 
# 处理RGB图像,获取姿态检测结果
results = pose.process(image_rgb)
 
# 在图像上绘制姿态关键点和连接线
if results.pose_landmarks:
    mp_drawing.draw_landmarks(
        image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS,
        DrawingSpec_point, DrawingSpec_line
    )
    # 打印某个关键点的坐标,例如鼻子的坐标
    print(
        f'Nose coordinates: ('
        f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].x * image_width}, '
        f'{results.pose_landmarks.landmark[mp_pose.PoseLandmark.NOSE].y * image_height})'
    )
 
# 保存绘制后的图像
cv2.imwrite('image-pose.jpg', image)
 
# 释放姿态检测对象
pose.close()



效果图如下

五、总结与展望

本文详细介绍了基于MediaPipe的人体姿态识别的实现过程,包括环境搭建、代码实现以及结果展示等环节。MediaPipe强大的姿态检测功能和便捷的API接口,使得我们能够快速搭建起人体姿态识别系统,并在实际应用中发挥重要作用。未来,我们可以进一步探索如何结合深度学习等技术,提高姿态识别的准确性和鲁棒性,拓展其在更多领域的应用,如体育训练、康复医疗等。


希望本文对你有所帮助,如果你对MediaPipe人体姿态识别有更深入的研究或应用,欢迎在评论区分享你的经验和见解。

————————————————                        

原文链接:https://blog.csdn.net/m0_74152166/article/details/145228710


访问次数:83