MediaPipe API实现骨骼识别功能分步讲解流程

作者:FeathersMouch 时间:2022-06-17 05:41:10 

骨骼识别的应用场景

如今,当前疫情大环境之下。很多人,因为居家办公或者其他原因闷在家里不能外出健身。那么,借助骨骼识别和卷积神经网络模型,计算机视觉开发者可以通过相对应的API,结合相对轻量化一些的卷积神经网络模型,来构建如Keep这类的线上锻炼监督APP。

用户通过将摄像头对准自己,使得神经网络能过精确地通过人体骨骼框架,判断出用户是否有在“认认真真”的做运动。

骨骼网络也可以应用在3D模型构建中,通过将获取到的骨骼网络信息,与Unity虚幻等引擎中的3D模型进行动态绑定,即可得到属于自己的虚拟人物形象。

骨骼识别的实现原理

通过观察MediaPipe的官方文档,我们可以看到

MediaPipe API实现骨骼识别功能分步讲解流程

MediaPipe是通过两套深度神经网络:即基于GHUM模型的BlazePose和ResNet50模型的AlphaPose。

以下是MediaPipe官方对于模型的概述:

该检测器的灵感来自我们自己的轻量级BlazeFace模型,用于MediaPipe 人脸检测,作为人体检测器的代理。它明确地预测了两个额外的虚拟关键点,将人体中心、旋转和比例牢牢描述为一个圆圈。受莱昂纳多的《维特鲁威人》的启发,我们预测了一个人臀部的中点、包围整个人的圆的半径以及连接肩部和臀部中点的连线的倾斜角。

MediaPipe API实现骨骼识别功能分步讲解流程

另外,MediaPipie通过从GHUM模型中获取到33个定位点,用于对人体骨骼的完整检测,见下图:

MediaPipe API实现骨骼识别功能分步讲解流程

环境准备

请确保你的Python环境中包含如下的库,才能顺利完成依赖处理并安装mediapipe

  • numpy

  • tensorflow

  • opencv

使用pip install mediapipe来安装mediapipe模块

pip install mediapipe

代码实战

我这里准备了一个特别视频用于检测骨骼API检测。但是在开始之前,我们要先把我们使用的模块导入进来

import time
import cv2
import mediapipe as mp
import sys

首先我们初始化MediaPipe标志点绘制器和MediaPipe姿态检测器

# 初始化MediaPipe绘图工具,以及样式
mp_drawing = mp.solutions.drawing_utils
mp_drawing_styles = mp.solutions.drawing_styles
mp_pose = mp.solutions.pose

初始化OpenCV窗口

# 初始化OpenCV窗口
window = cv2.namedWindow("Gi", cv2.WINDOW_FULLSCREEN)

使用cv2.VideoCapture()读取视频

cap = cv2.VideoCapture('data.flv')

设置捕获器的缓冲区大小

# 设置视频缓冲区
cap.set(cv2.CAP_PROP_BUFFERSIZE, 2)

初始化FPS计数器和FPS计数时间

# 初始化FPS计时器和计数器
fps_start_time = 0
fps = 0

定义图像处理函数processing()

# 定义Processing处理函数
def processing(image):
   # 使用cv2.putText绘制FPS
   cv2.putText(image, "FPS: {:.2f}".format(
       fps), (10, 85), cv2.FONT_HERSHEY_SIMPLEX, 3, (0, 255, 0), 3)
   # 使用image.flags.writeable = False将图像标记为只读,以加快处理速度
   image.flags.writeable = False
   # 使用cv2.resize将图像缩放到适合的尺寸
   image = cv2.resize(image, (640, 480))
   # 使用cv2.cvtColor将图像转换为RGB
   image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
   # 使用MediaPipe Pose检测关键点
   results = pose.process(image)
   # 解锁图像读写
   image.flags.writeable = True
   # 将图像转换回BGR
   image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
   # 使用draw_landmarks()绘制关键点
   mp_drawing.draw_landmarks(
       image,
       results.pose_landmarks,
       mp_pose.POSE_CONNECTIONS,
       landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())
   # 返回处理后的图像
   return image

初始化MediaPipe Pose类并开始进行骨骼检测

# 初始化MediaPipe Pose类
with mp_pose.Pose(
       min_detection_confidence=0.5,
       min_tracking_confidence=0.5) as pose:
   # 当视频打开时
   while cap.isOpened():
       # 读取视频帧和状态
       success, image = cap.read()
       # 如果初始化失败,则推出进程
       if not success:
           print("")
           exit(1)
       # 初始化FPS结束点计时器
       fps_end_time = time.time()
       # 计算FPS
       fps = 1.0 / (fps_end_time - fps_start_time)
       # 重置FPS开始点计时器
       fps_start_time = fps_end_time
       # 创建线程处理图像
       image = processing(image)
       # 显示图像
       cv2.imshow('Gi', image)
       # 按下q键退出
       if cv2.waitKey(1) & 0xFF == ord('q'):
           break
cap.release()

运行与效果

运行脚本

python Baby.py

运行结果如下图:

MediaPipe API实现骨骼识别功能分步讲解流程

来源:https://blog.csdn.net/Deaohst/article/details/126823786

标签:MediaPipe,API,骨骼识别
0
投稿

猜你喜欢

  • vue实现评论列表功能

    2023-07-02 17:05:29
  • python绘制棉棒图的方法详解

    2021-11-06 06:24:58
  • MySQL备份与恢复之保证数据一致性(5)

    2024-01-16 19:16:20
  • 数据库的选择原则是什么?

    2010-07-14 21:05:00
  • 如何判断pytorch是否支持GPU加速

    2023-10-06 11:46:49
  • 数据库触发器(Trigger)的一点使用心得

    2024-01-28 14:21:29
  • python之mock模块基本使用方法详解

    2022-03-05 03:10:33
  • Express的路由详解

    2024-05-13 10:06:30
  • 一文搞懂python 中的迭代器和生成器

    2022-02-11 15:47:14
  • Config服务端连接Git配置的技巧

    2023-03-12 02:32:59
  • 2022最新腾讯轻量云 debian 10 安装pve教程详解

    2022-09-16 15:55:38
  • MySQL 回表,覆盖索引,索引下推

    2024-01-21 12:56:59
  • Python函数关键字参数及用法详解

    2023-08-13 00:34:06
  • Python Log文件大小设置及备份的方法

    2022-08-02 13:46:14
  • Python基于smtplib模块发送邮件代码实例

    2022-09-18 11:07:49
  • Python解析m3u8拼接下载mp4视频文件的示例代码

    2022-04-22 13:20:16
  • 浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)

    2023-04-15 09:25:18
  • Python RawString与open文件的newline换行符遇坑解决

    2021-08-28 20:37:41
  • Python requests接口测试实现代码

    2023-09-10 18:09:21
  • 优化MySQL数据库性能的八大“妙手”

    2007-11-18 14:49:00
  • asp之家 网络编程 m.aspxhome.com