前言
本文分享如何使用 MediaPipe 完成人体姿态关键点的实时跟踪检测。
1. 导入工具包
# 安装 opencv
pip install opencv-contrib-python
# 安装 mediapipe
pip install mediapipe
# pip install mediapipe --user #有 user 报错的话试试这个
# 安装之后导入各个包
import cv2 #opencv
import mediapipe as mp
import time
人体姿态检测相关说明见官方文档:Pose - mediapipe (google.github.io) MediaPipe Pose 中的地标模型预测了 33 个姿势地标的位置。
2. 相关函数说明
从 mediapipe 中导入检测方法,使用 mediapipe.solutions.pose。
mediapipe.solutions.hands # 手部关键点检测
mediapipe.solutions.pose # 人体姿态检测
mediapipe.solutions.face_mesh # 人脸网状检测
mediapipe.solutions.face_detection # 人脸识别
(1)mediapipe.solutions.pose.Pose() 姿态关键点检测函数
参数:
- static_image_mode:默认为 False,将输入图像视为视频流。它将尝试在第一张图像中检测最突出的人,并在成功检测后进一步定位姿势地标。在随后的图像中,它只是简单地跟踪那些地标,而不会调用另一个检测,直到失去对目标的跟踪,可以减少计算和延迟。若为 True,则会对每张输入图像执行人体检测方法,非常适合处理一批静态的、可能不相关的图像。
- model_complexity:默认为 1,姿势地标模型的复杂度:0、1、2。地标准确度和推理延迟通常随着模型复杂度的增加而增加。
- smooth_landmarks:默认为 True,平滑图像,过滤不同的输入图像上的姿势地标以减少抖动,但如果 static_image_mode 也设置为 True 则忽略。
- upper_body_only:默认为 False,是否只检测上半身的地标。人体姿势共有 33 个地标,上半身的姿势地标有 25 个。
- enable_segmentation:默认为 False。如果设置为 true,除了姿势地标之外,该解决方案还会生成分割掩码。
- smooth_segmentation:默认为 True,过滤不同的输入图像上的分割掩码以减少抖动,但如果 enable_segmentation 设置为 False,或者 static_image_mode 设置为 True 则忽略。
- min_detection_confidence:默认为 0.5,来自人员检测模型的最小置信值 (0-1 之间),高于该阈值则认为检测视为成功。
- min_tracking_confidence:默认为 0.5。来自地标跟踪模型的最小置信值 (0-1 之间),用于将被视为成功跟踪的姿势地标,否则将在下一个输入图像上自动调用人物检测。将其设置为更高的值可以提高解决方案的稳健性,但代价是更高的延迟。如果 static_image_mode 为 True,则人员检测将在每帧图像上运行。
返回值:具有 "pose_landmarks" 字段的 NamedTuple 对象,其中包含检测到的最突出人物的姿势坐标。


