机器学习笔记 - MediaPipe了解 + 结合OpenCV进行人体姿势估计

一、MediaPipe概述

        MediaPipe 为直播和流媒体提供开源跨平台、可定制的 ML 解决方案。MediaPipe 是谷歌开发的开源框架。它是一个非常轻量级的多平台机器学习解决方案框架,可以在 CPU 上实时运行。

        支持较多场景的检测

        人脸检测、面部网格、手势识别、部分姿势识别、人体姿势估计(可以给出33个关键点的3D坐标)、目标检测跟踪等等。

         还支持如下语言:Android    iOS    C++    Python    JS    Coral

        但不是每种语言所有功能都具备的。

         详情参考文档地址:Home - mediapipehttps://google.github.io/mediapipe/

二、人体姿势估计概述

1、人体姿势估计

        人体姿态估计表示人体的图形骨架。它有助于分析人类的活动。骨架基本上是一组描述人的姿势的坐标。每个关节都是一个单独的坐标,称为关键点或姿势地标。关键点之间的连接称为对。

        通过姿势估计,我们能够跟踪人类在现实世界空间中的运动和活动。这开辟了广泛的应用可能性。它是一种强大的技术,有助于非常有效地构建复杂的应用程序。

2、人体姿势估计的应用

(1)人类活动估计

        姿势估计可用于跟踪人类活动,例如步行、跑步、睡眠、饮酒。它提供了一些关于一个人的信息。活动估计可以增强安全和监视系统。

扫描二维码关注公众号,回复: 13761254 查看本文章

(2)运动转移

        人体姿态估计最有趣的应用之一是运动转移。我们在电影或游戏中看到,3d 图形角色的身体运动就像真实的人类或动物。通过跟踪人体姿势,3d 渲染的图形可以通过人体的运动进行动画处理。

(3)机器人

        为了训练机器人的运动,可以使用人体姿态估计。不是手动对机器人进行编程以遵循特定路径,而是使用人体姿势骨架来训练机器人的关节运动。

(4)游戏

        如今,VR或虚拟现实游戏非常流行。在虚拟现实游戏中,3d 姿势由一个或多个摄像头估计,游戏角色根据人类的动作移动。

3、姿态估计模型

        姿态估计模型主要有三类:

        1.运动学模型:它是一种基于骨骼的模型,代表人体。

        2.平面模型:平面模型是一种基于轮廓的模型,它使用人体周围的轮廓来表示人体形状。

        3. 体积模型:体积模型创建人体的 3d 网格,表示人体的形状和外观。

4、姿势估计的类别

        1. 2D 姿态估计:在 2d 姿态估计中,仅预测图像中每个地标的 x 和 y 坐标。它不提供有关骨架角度或物体或人体实例的旋转或方向的任何信息。

        2. 3D 姿态估计: 3D 姿态估计允许我们预测人的螺旋位置。它为每个地标提供 x、y 和 z 坐标。通过 3d 姿态估计,我们可以确定人体骨骼每个关节的角度。

        3、刚体姿态估计:刚体姿态估计也称为6D姿态估计。它提供有关人体姿势以及人体实例的旋转和方向的所有信息。

        4. 单一姿态估计:在单一姿态估计模型中,只能在图像中预测一个人的姿态。

        5. 多姿态估计:在多姿态估计中,可以在一张图像中同时预测多个人体姿态。

5、姿势估计的流程

        姿态估计主要使用深度学习解决方案来预测人体姿态标志。它将图像作为输入,并为每个实例提供姿势界标作为输出。

        姿态估计有两种方法,

        1. 自下而上:在这种方法中,特定关键点的每个实例都在图像中进行预测,然后将一组关键点组合成最终的骨架。

        2. 自上而下:在自上而下的方法中,首先在给定图像中检测对象/人,然后在该图像的每个裁剪对象实例中预测地标。

6、一些流行的姿势估计模型

        1. OpenPose: OpenPose 是目前最流行的多人人体姿态估计方法之一。它是一种具有高精度关键点的开源实时多人检测。

        2. DeepPose: DeepPose 使用深度神经网络来估计人体姿势。该架构捕获卷积层中的所有铰链和关节,然后是全连接层以形成这些层的一部分。

        3. PoseNet: PoseNet 建立在 Tensorflow.js 之上。这是一个运行在移动设备和浏览器上的轻量级架构。

三、结合OpenCV进行人体姿势估计

1、代码参考

        MediaPipe 在后端使用 TensorFlow lite。使用检测器首先在框架内定位人 (ROI)。然后它使用 ROI 裁剪帧作为 INPUT 并预测 ROI 内的地标/关键点。mediaPipe 姿态估计器共检测到 33 个关键点。

         MediaPipe 姿态估计是一个单一的 3D 姿态估计器。它检测每个地标的 x、y 和 z 坐标。Z轴基本上是关于地标深度的信息。这意味着地标相对于其他地标与相机的距离或接近。

        因为我使用的这个版本的opencv没有实现gui,所以是把识别的图片保存起来到文件夹内,否则是可以实时看到的。

# TechVidvan Human pose estimator
# import necessary packages

import cv2
import mediapipe as mp

# initialize Pose estimator
mp_drawing = mp.solutions.drawing_utils
mp_pose = mp.solutions.pose

pose = mp_pose.Pose(
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5)

# create capture object
cap = cv2.VideoCapture('C:\\Users\\xiaomao\\Desktop\\123.mp4')

i = 0
while cap.isOpened():
    # read frame from capture object
    _, frame = cap.read()

    # try:
    # convert the frame to RGB format
    RGB = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    # process the RGB frame to get the result
    results = pose.process(RGB)

    print(results.pose_landmarks)
    # draw detected skeleton on the frame
    mp_drawing.draw_landmarks(
        frame, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)

    # show the final output
    cv2.imwrite('C:\\Users\\zyh\\Desktop\\123456\\' + str(i) + '.jpg', frame)
    i = i+1

cap.release()
cv2.destroyAllWindows()

2、结果预览

猜你喜欢

转载自blog.csdn.net/bashendixie5/article/details/123508782