MediaPipe API实现骨骼识别功能分步讲解流程
作者:FeathersMouch 发布时间:2022-06-17 05:41:10
骨骼识别的应用场景
如今,当前疫情大环境之下。很多人,因为居家办公或者其他原因闷在家里不能外出健身。那么,借助骨骼识别和卷积神经网络模型,计算机视觉开发者可以通过相对应的API,结合相对轻量化一些的卷积神经网络模型,来构建如Keep
这类的线上锻炼监督APP。
用户通过将摄像头对准自己,使得神经网络能过精确地通过人体骨骼框架,判断出用户是否有在“认认真真”的做运动。
骨骼网络也可以应用在3D模型构建中,通过将获取到的骨骼网络信息,与Unity
或虚幻
等引擎中的3D模型进行动态绑定,即可得到属于自己的虚拟人物形象。
骨骼识别的实现原理
通过观察MediaPipe的官方文档,我们可以看到
MediaPipe是通过两套深度神经网络:即基于GHUM
模型的BlazePose和ResNet50
模型的AlphaPose。
以下是MediaPipe官方对于模型的概述:
该检测器的灵感来自我们自己的轻量级BlazeFace模型,用于MediaPipe 人脸检测,作为人体检测器的代理。它明确地预测了两个额外的虚拟关键点,将人体中心、旋转和比例牢牢描述为一个圆圈。受莱昂纳多的《维特鲁威人》的启发,我们预测了一个人臀部的中点、包围整个人的圆的半径以及连接肩部和臀部中点的连线的倾斜角。
另外,MediaPipie通过从GHUM模型中获取到33个定位点,用于对人体骨骼的完整检测,见下图:
环境准备
请确保你的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
运行结果如下图:
来源:https://blog.csdn.net/Deaohst/article/details/126823786


猜你喜欢
- 概述concurrent.futures 是 3.2 中引入的新模块,它为异步执行可调用对象提供了高层接口。可以使用 ThreadPoolE
- 如何使用Office Chart 9.0 制作图表?代码如下:chart90.asp<HTML><HEAD><
- 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,
- 在Server和Client通讯中,由于网络等原因很可能会发生数据丢包的现象。如果数据缺失,服务端接收的信息不完整,就会造成混乱。我们需要在
- 项目中要对短文本进行相似度估计,word2vec是一个很火的工具。本文就word2vec的训练以及加载进行了总结。word2vec的原理就不
- 我使用的python版本是3.5.2今天想做个语音读取的小脚本,在网上查了一下发现python里有个pyttsx可以识别文字,打算通过pip
- 查看字符编码:import chardetresponse = chardet.detect(b'\xe5\xbd\x93\xe5\
- 实现效果示例代码import timefrom selenium import webdriverfrom selenium.webdriv
- 起步在 《分布式任务队列Celery使用说明》 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能。本文介绍如何在
- 从微信小程序官方发布的公告中我们可获知:小程序体验版、开发版调用 wx.getUserInfo 接口,将无法弹出授权询问框,默认调用失败,需
- 前言mpvue 是美团开源的一套语法与vue.js一致的、快速开发小程序的前端框架,按官网说可以达到小程序与H5界面使用一套代码。使用此框架
- 本文实例为大家分享了python定时发送邮件的具体代码,供大家参考,具体内容如下全部代码如下:import timefrom datetim
- 1.引言甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。Henry Gantt 为了分析已经完成的项目创建了甘特图,他
- 本文实例讲述了python函数装饰器用法。分享给大家供大家参考。具体如下:装饰器经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、
- 以前见过一个很漂亮的网页提示信息,就是把鼠标放到网页的文字或者图片上面就会有提示的那种透明的,还带个箭头,很漂亮,不知道谁在哪见过没有,感谢
- javascript 数组Array(list)添加/删除unshift:将参数添加到原数组开头,并返回数组的长度pop:删除原数组最后一项
- 来自 * 我们的大脑通常最多能感知三维空间,超过三维就很难想象了。尽管是三维,理解起来也很费劲,所以大多数情况下都使用二维平面。不过,我们
- 本文实例讲述了Python实现监控键盘鼠标操作。分享给大家供大家参考,具体如下:# -*- coding: utf-8 -*-import
- Form表单验证:js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等。完整代码如下:
- 模块Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句模