使用Python实现整体跟踪
本教程将讨论使用MediaPipe整体性的全身姿势估计。该模型将检测脸部、手部内的所有面部地标,以及来自我们身体的姿势。
[MediaPipe]库提供了广泛的ML解决方案模型。我们将在本教程中使用[MediaPipe整体]模型。
MediaPipe整体模型由三个不同的模型组成。
- [MediaPipe Pose]。
- MediaPipe[面部网格]。
- MediaPipe[双手]。
MediaPipe Face Mesh 探测面部的地标, ,探测我们手部的所有关节, ,探测身体内的所有姿势。MediaPipe Hands MediaPipe Pose
前提条件
要继续学习本教程,你需要。
- 熟悉机器学习建模。
- 熟悉各个人脸地标和手部检测模型。
- 使用谷歌Colab或Jupyter笔记本。
在本教程中,我们将使用Google Colab。
目标
- 设置MediaPipe库。
- 检测姿势、面部地标和双手姿势。
- 在屏幕上实现检测的可视化。
安装和导入依赖项
在本教程中,我们将需要两个关键的依赖项。
- [MediaPipe]。
- [OpenCV]。
MediaPipe用于访问模型,而OpenCV用于访问网络摄像头或静态图像进行检测。
让我们来安装它们。
!pip install mediapipe opencv-python
接下来,我们需要将它们导入我们的笔记本中。
import mediapipe as mp
import cv2
设置MediaPipe
我们首先要导入MediaPipe绘图工具。它将帮助我们从整体模型中绘制检测结果。
mp_drawing = mp.solutions.drawing_utils
接下来,从MediaPipe中导入整体模型。记住,MediaPipe库由许多ML解决方案组成。要使用代码检查这些模型,在一个新的单元格上输入mp.solutions. ,你就能看到库中的可用模型。
我们需要导入整体模型。
mp_holistic = mp.solutions.holistic
使用OpenCV加载一个图像
from google.colab.patches import cv2_imshow
image = cv2.imread("workout.jpg")
cv2_imshow(image)
运行该命令后,你应该看到以下内容。
![]()
下一步是将加载的图像,对其进行检测。
探测地标
我们首先通过使用with 段来初始化整体模型。
with mp_holistic.Holistic(
static_image_mode=True, model_complexity=2, enable_segmentation=True, refine_face_landmarks=True) as holistic:
static_image_mode 被设置为True ,以检测静态图像。当设置为False ,它检测的是输入图像的视频流。
enable_segmentation 特征被设置为True ,以允许生成分割掩码。refine_face_landmarks 被设置为True ,以允许进一步完善嘴唇和眼睛周围的检测区域。
使用imread() 方法,我们加载workout.jpg 图像。
image = cv2.imread("workout.jpg")
下一步涉及对我们的图像进行重新着色。我们使用cvtColor 函数来完成这项任务。
当我们使用OpenCV时,我们得到的图像格式是BGR ,但当我们把图像传给整体模型时,我们希望图像是RGB 。这是MediaPipe唯一接受的图像格式。因此,要进行转换。
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_recolored = holistic.process(image)
让我们从绘制面部地标开始。
mp_drawing.draw_landmarks(image, image_recolored.face_landmarks, mp_holistic.FACE_CONNECTIONS)
让我们对手和姿势地标采用同样的方法。
对于姿势地标,编写以下代码。
mp_drawing.draw_landmarks(image, image_recolored.pose_landmarks, mp_holistic.POSE_CONNECTIONS)
对于左边的地标。
mp_drawing.draw_landmarks(image, image_recolored.left_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
对于右手的地标。
mp_drawing.draw_landmarks(image, image_recolored.right_hand_landmarks, mp_holistic.HAND_CONNECTIONS)
探测结果的可视化
使用OpenCV的imshow() 方法来可视化我们的连接。
cv2_imshow(image)
输出。
![]()
我们已经成功地使用Python实现了一个整体模型。你可以把这个实验做得更进一步,尝试用你的电脑网络摄像头在实时视频数据上使用这个模型。
此外,你可以使用landmark_drawing_spec 和connection_drawing_spec 功能改变颜色、厚度和圆的半径。
总结
本教程展示了如何使用MediaPipe整体实现全身姿势的估计。这个模型可以用来检测不同形式的身体语言,比如一个人是否快乐、悲伤或愤怒。
此外,你可以用它来建立一个无触摸的手势控制,或一个锻炼计数器,即计算你做了多少个俯卧撑或计算你做了多少个二头肌。这样的用例是无穷无尽的。