使用 Mediapipe 和 Yolov5 进行多人姿态估计

本文介绍了如何利用Mediapipe进行高保真人体姿态跟踪,以及在多人场景下通过YOLOv5进行对象检测,解决MediaPipe不支持多人姿态估计的问题。通过YOLOv5识别帧中人物,再用MediaPipe估计每个人的姿态,最终整合到单个帧中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

基于图像和视频的人体姿态估计可以在许多应用中发挥重要作用,例如健身活动识别、肢体语言检测、手语识别、量化体育锻炼和全身手势控制。

MediaPipe Pose 是一种用于高保真人体姿态跟踪的机器学习解决方案,从 RGB 视频帧中推断出全身的 33 个 3D 地标和背景分割蒙版。不同姿势的分类也可以使用自定义对象检测模块来完成,但它需要大量数据并且训练将是耗时且复杂的。我们可以简单地使用 MediaPipe 中的关键点,并使用这些关键点通过简单的机器学习模型进行分类。

MediaPipe Pose 中的界标模型预测了 33 个姿势界标的位置,如下图所示。

7d526b2040cfc086449f9bdae0c56bc9.png

33个被 MediaPipe 识别的姿势地标

问题陈述

在大多数情况下,使用 MediaPipe 的姿势估计效果非常好,但是当单个帧上有多个人时就会出现问题。在撰写本文时,MediaPipe 不支持多人姿态估计,但每个问题都有解决方案。

解决此问题的一种灵活方法是使用对象检测模型并获取帧中存在的多个人,然后估计每个人的姿势,最后将图像聚合到单个帧中。对于对象检测模型,将使用 YOLOv5 。

YOLOv5

YOLO 是“You only look once”的首字母缩写,是一种将图像划分为网格系统的对象检测算法。网格中的每个单元都负责检测自身内部的对象。由于其速度和准确性,YOLO 是最著名的对象检测算法之一。开源代码可在 Github (https://github.com/ultralytics/yolov5)上获得。

### 使用MediaPipe进行姿态识别 MediaPipe 提供了一个名为 `Pose` 的解决方案,可以用来检测单个体的姿态。然而,在实际应用场景中,可能需要同时检测个目标的姿态。为此,可以通过 MediaPipe 中的 `Holistic` 或者扩展 `Pose` 解决方案来实现姿态估计。 以下是关于如何使用 MediaPipe 进行姿态识别的具体说明以及示例代码: #### 环境搭建 为了运行 MediaPipe姿态识别功能,需先安装必要的依赖项并配置环境。具体步骤如下所示[^1]: - 安装 Python 版本 >= 3.7。 - 安装 MediaPipe OpenCV 库: ```bash pip install mediapipe opencv-python ``` #### 示例代码 下面提供了一段完整的 Python 脚本,展示如何利用 MediaPipe 实现姿态识别的功能: ```python import cv2 import mediapipe as mp mp_pose = mp.solutions.pose mp_drawing = mp.solutions.drawing_utils def main(): cap = cv2.VideoCapture(0) # 打开摄像头 with mp_pose.Pose( min_detection_confidence=0.5, min_tracking_confidence=0.5, model_complexity=2) as pose: while True: success, image = cap.read() if not success: break # 将图像转换为 RGB 格式以便 MediaPipe 处理 image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 对当前帧执行姿势检测 results = pose.process(image_rgb) # 如果检测物,则绘制它们的关键点连接线 if results.pose_landmarks is not None: annotated_image = image.copy() # 绘制每个物的姿态关键点及其连线 mp_drawing.draw_landmarks( annotated_image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS) cv2.imshow('Multi-Person Pose Estimation', annotated_image) if cv2.waitKey(5) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": main() ``` 上述脚本通过调用 MediaPipe 的 `Pose` 类实现了姿态估计,并在视频流上显示了每个的骨骼节点及连结线条。 #### 性能对比 值得注意的是,虽然 MediaPipe姿态估计方面表现优异,但在某些复杂场景下可能会遇到性能瓶颈。例如,当面对大量物或者高分辨率输入时,其 FPS 可能会有所下降。相比之下,YOLOv7 Pose 则提供了更高的灵活性可定制性,尽管它的速度较慢 (约 0.82 fps)[^2]。 --- ###
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值