如何使用Python实现整体跟踪

170 阅读3分钟

使用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)

运行该命令后,你应该看到以下内容。

Loaded 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)

输出。

Output image

我们已经成功地使用Python实现了一个整体模型。你可以把这个实验做得更进一步,尝试用你的电脑网络摄像头在实时视频数据上使用这个模型。

此外,你可以使用landmark_drawing_specconnection_drawing_spec 功能改变颜色、厚度和圆的半径。

总结

本教程展示了如何使用MediaPipe整体实现全身姿势的估计。这个模型可以用来检测不同形式的身体语言,比如一个人是否快乐、悲伤或愤怒。

此外,你可以用它来建立一个无触摸的手势控制,或一个锻炼计数器,即计算你做了多少个俯卧撑或计算你做了多少个二头肌。这样的用例是无穷无尽的。