【姿态估计实战】使用OpenCV和Mediapipe构建锻炼跟踪器【附完整源码与详细说明】

《------往期经典推荐------》

一、AI应用软件开发实战专栏【链接】

项目名称项目名称
1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】
3.【手势识别系统开发】4.【人脸面部活体检测系统开发】
5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】
7.【YOLOv8多目标识别与自动标注软件开发】8.【基于YOLOv8深度学习的行人跌倒检测系统】
9.【基于YOLOv8深度学习的PCB板缺陷检测系统】10.【基于YOLOv8深度学习的生活垃圾分类目标检测系统】
11.【基于YOLOv8深度学习的安全帽目标检测系统】12.【基于YOLOv8深度学习的120种犬类检测与识别系统】
13.【基于YOLOv8深度学习的路面坑洞检测系统】14.【基于YOLOv8深度学习的火焰烟雾检测系统】
15.【基于YOLOv8深度学习的钢材表面缺陷检测系统】16.【基于YOLOv8深度学习的舰船目标分类检测系统】
17.【基于YOLOv8深度学习的西红柿成熟度检测系统】18.【基于YOLOv8深度学习的血细胞检测与计数系统】
19.【基于YOLOv8深度学习的吸烟/抽烟行为检测系统】20.【基于YOLOv8深度学习的水稻害虫检测与识别系统】
21.【基于YOLOv8深度学习的高精度车辆行人检测与计数系统】22.【基于YOLOv8深度学习的路面标志线检测与识别系统】
23.【基于YOLOv8深度学习的智能小麦害虫检测识别系统】24.【基于YOLOv8深度学习的智能玉米害虫检测识别系统】
25.【基于YOLOv8深度学习的200种鸟类智能检测与识别系统】26.【基于YOLOv8深度学习的45种交通标志智能检测与识别系统】
27.【基于YOLOv8深度学习的人脸面部表情识别系统】28.【基于YOLOv8深度学习的苹果叶片病害智能诊断系统】
29.【基于YOLOv8深度学习的智能肺炎诊断系统】30.【基于YOLOv8深度学习的葡萄簇目标检测系统】
31.【基于YOLOv8深度学习的100种中草药智能识别系统】32.【基于YOLOv8深度学习的102种花卉智能识别系统】
33.【基于YOLOv8深度学习的100种蝴蝶智能识别系统】34.【基于YOLOv8深度学习的水稻叶片病害智能诊断系统】
35.【基于YOLOv8与ByteTrack的车辆行人多目标检测与追踪系统】36.【基于YOLOv8深度学习的智能草莓病害检测与分割系统】
37.【基于YOLOv8深度学习的复杂场景下船舶目标检测系统】38.【基于YOLOv8深度学习的农作物幼苗与杂草检测系统】
39.【基于YOLOv8深度学习的智能道路裂缝检测与分析系统】40.【基于YOLOv8深度学习的葡萄病害智能诊断与防治系统】
41.【基于YOLOv8深度学习的遥感地理空间物体检测系统】42.【基于YOLOv8深度学习的无人机视角地面物体检测系统】
43.【基于YOLOv8深度学习的木薯病害智能诊断与防治系统】44.【基于YOLOv8深度学习的野外火焰烟雾检测系统】
45.【基于YOLOv8深度学习的脑肿瘤智能检测系统】46.【基于YOLOv8深度学习的玉米叶片病害智能诊断与防治系统】
47.【基于YOLOv8深度学习的橙子病害智能诊断与防治系统】48.【基于深度学习的车辆检测追踪与流量计数系统】
49.【基于深度学习的行人检测追踪与双向流量计数系统】50.【基于深度学习的反光衣检测与预警系统】
51.【基于深度学习的危险区域人员闯入检测与报警系统】52.【基于深度学习的高密度人脸智能检测与统计系统】
53.【基于深度学习的CT扫描图像肾结石智能检测系统】54.【基于深度学习的水果智能检测系统】
55.【基于深度学习的水果质量好坏智能检测系统】56.【基于深度学习的蔬菜目标检测与识别系统】
57.【基于深度学习的非机动车驾驶员头盔检测系统】58.【太基于深度学习的阳能电池板检测与分析系统】
59.【基于深度学习的工业螺栓螺母检测】60.【基于深度学习的金属焊缝缺陷检测系统】
61.【基于深度学习的链条缺陷检测与识别系统】62.【基于深度学习的交通信号灯检测识别】
63.【基于深度学习的草莓成熟度检测与识别系统】64.【基于深度学习的水下海生物检测识别系统】
65.【基于深度学习的道路交通事故检测识别系统】66.【基于深度学习的安检X光危险品检测与识别系统】
67.【基于深度学习的农作物类别检测与识别系统】68.【基于深度学习的危险驾驶行为检测识别系统】
69.【基于深度学习的维修工具检测识别系统】70.【基于深度学习的维修工具检测识别系统】
71.【基于深度学习的建筑墙面损伤检测系统】72.【基于深度学习的煤矿传送带异物检测系统】
73.【基于深度学习的老鼠智能检测系统】

二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~

《------正文------》

目录

  • 引言
  • 什么是OpenCV?
  • 什么是姿态估计?
  • 什么是Mediapipe?
  • 步骤1:设置OpenCV和Mediapipe
  • 步骤2:使用OpenCV捕获视频
  • 步骤3:使用Mediapipe检测身体关节
  • 第四步:姿势估计
  • 步骤5:提取关节坐标
  • 步骤6:计算关节角度
  • 第五步:建立二头肌卷曲计数器
  • 第6步:构建二头肌卷曲跟踪器
  • 总结

引言

img
本文主要介绍一个使用OpenCV和Mediapipe的运动跟踪器的实战项目,主要实现手部二头肌卷取动作的检测与计数,并详细介绍了其实现原理与实现代码,供小伙伴们学习参考。当然,通过该项目原理可以实现很多其他锻炼项目的检测与计数,感兴趣的小伙伴自行探索。

什么是OpenCV?

OpenCV(Open Source Computer Vision Library)是计算机视觉领域使用最广泛的工具之一。它是一个开源库,包含2,500多种算法,使我们能够执行目标检测、面部识别和图像处理等任务。

在我们的运动跟踪项目中,OpenCV扮演了关键角色。它使我们能够:

1.从计算机的网络摄像头捕获视频。

2.处理视频的每一帧以检测特定身体部位的运动,如肘部和手腕。

3.以视频和文本叠加的形式向用户显示实时反馈。

我们为这个项目选择OpenCV的主要原因之一是它易于使用Python,即使是初学者也可以使用。OpenCV支持多种平台,包括Windows、macOS和Linux,这使得学生可以轻松地在自己的计算机上运行该项目。

什么是姿态估计?

在我们深入研究我们项目的技术细节之前,理解姿态估计的概念是很重要的。姿态估计是计算机视觉中的一种技术,它允许我们通过检测关键点或“地标”(如肘部,肩部,手腕和臀部)来跟踪和分析人体的运动。

img

通过连接这些关键点,我们可以绘制人体地图,并测量不同身体部位的运动和角度。

简而言之,姿势估计可以帮助计算机识别您的身体所处的位置。无论您是站着、坐着还是执行特定运动(例如举起哑铃),姿势估计都可以识别每个关节的位置以及它的真实的移动方式。

使用姿势估计跟踪运动的能力使其成为构建需要用户交互的应用程序的理想工具。这包括健身追踪器、互动游戏、虚拟现实和基于手势的界面等应用程序。

什么是Mediapipe?

Mediapipe由Google开发,是一个机器学习框架,可以简化构建用于人体姿势估计,手部跟踪,面部检测等的实时系统。它提供了预先构建的模型,可以以惊人的精度和速度检测人体,手部或面部的关键点。

img

Mediapipe的设计高度灵活和高效,使其成为移动的设备和实时应用的理想选择。它使用复杂的机器学习算法来跟踪人体上的地标,使其成为我们运动跟踪器项目的完美工具。

img

img

这就是为什么Mediapipe是我们项目的最佳选择:

实时性能: Mediapipe可以足够快地处理视频帧,以便为用户提供真实的反馈。

准确度: 它能够以高精度检测身体的最小运动。

用途: 它与Python顺利集成,使初学者易于实现。

与OpenCV一起,Mediapipe允许我们为二头肌卷曲跟踪器捕获和分析身体运动。

步骤1:设置OpenCV和Mediapipe

我们项目的第一步是设置必要的工具。我们首先安装了OpenCV和Mediapipe库,这对捕获视频和检测姿势至关重要。

以下是安装过程:

img安装MediaPipe和OpenCV

安装完成后,我们在Python脚本中导入了必要的模块:

img导入必要的Python模块

在我们的例子中,OpenCV处理视频捕获,而Mediapipe检测姿势。这两个库将共同创建二头肌卷曲跟踪器。

步骤2:使用OpenCV捕获视频

在这一步中,我们解释了OpenCV如何从计算机的网络摄像头捕获视频。来自网络摄像头的每一帧都经过处理,使我们能够实时查看和分析运动。

以下是我们如何拍摄视频:

img用于从网络摄像头流捕获视频帧的代码

步骤3:使用Mediapipe检测身体关节

下一步是使用Mediapipe来检测特定的身体关节,如肩膀,肘部和手腕。Mediapipe的姿态估计模型让我们可以轻松地做到这一点。它为身体的不同部位提供了关键点(地标),我们可以用它来跟踪运动。

我们首先建立了Mediapipe Pose模型。我们还设置了Mediapipe的绘图和姿势工具。

img

img

对于每一帧视频,Mediapipe都会检测姿势和地标:

img

这段代码有助于可视化身体标志,显示肩膀、肘部和手腕等关节上的点。

第四步:姿势估计

现在我们有了依赖项,让我们设置网络摄像头提要并开始检测姿势。

img

此脚本从网络摄像头捕获视频并应用姿势估计,在屏幕上可视化检测到的姿势。您将看到Mediapipe如何在真实的时间内识别您身体上的关键点。

步骤5:提取关节坐标

接下来,我们将提取特定关节的坐标。这对于以后计算角度至关重要。

img

为了访问特定的关节,我们使用姿势标志列表中的索引。例如,左肩的坐标可以如下访问:

img

步骤6:计算关节角度

为了创建运动跟踪器,我们需要计算在卷曲过程中二头肌在不同点的角度。这需要一些简单的三角函数,我们教学生使用一个函数来计算三点之间的角度:肩膀,肘部和手腕。

下面是我们如何计算角度:

img代码计算3点之间的角度:肩,肘和手腕

此函数获取肩、肘和腕的坐标,并计算二头肌弯曲期间手肘关节的角度。

我们现在可以使用这个函数来计算手肘关节的角度:

img计算并显示肘关节处的角度

img肩、肘、腕角度显示

第五步:建立二头肌卷曲计数器

随着角度计算到位,我们现在可以建立我们的运动跟踪器的核心-二头肌卷曲计数器!计数器将根据手肘的角度跟踪卷曲的数量。

我们设置了一个计数器变量来跟踪完成的卷曲次数,并设置了一个阶段变量来检查手臂是处于“向上”还是“向下”的位置。

img计算二头肌卷曲次数的代码

这种逻辑确保了手肘从“向下”位置(角度> 160°)移动到“向上”位置(角度< 30°)时,它将被计为一次卷曲。

第6步:构建二头肌卷曲跟踪器

最后,我们将结合之前的代码,实现我们的二头肌卷曲跟踪器。我们将根据手肘关节的角度变化来计算卷曲。

所有代码合并

img

有了这个,你就建立了一个二头肌卷曲跟踪器,可以计数总次数和显示阶段手臂所在阶段,你的手臂位置(向上或向下)等信息。

img

总结

本文通过使用Mediapipe和OpenCV构建了一个二头肌卷曲跟踪器,当然你也可以通过了解基础知识,扩展此锻炼监控系统,以跟踪其他锻炼,如蹲下,俯卧撑,甚至瑜伽姿势。这些应用程序不仅提供实时反馈,还使锻炼更具吸引力和乐趣。


在这里插入图片描述

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cityhash–对字符串的哈希算法

原文地址&#xff1a;cityhash–对字符串的哈希算法 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 分享一个给字符串计算hash的开源库&#xff0c;谷歌出品。 源代码在&#xff1a;https://github.com/google/cityhash 可以自己下载&#x…

spring cloud微服务分布式架构

spring cloud微服务分布式架构 应用架构 单体应用架构&#xff1a;all in one 如&#xff1a;前端后端部署在一台服务器中 web应用和数据库放在同一台服务器中&#xff0c;只要服务器挂掉&#xff0c;应用就会终止。 分布式架构&#xff1a;将一个系统拆分为多个独立的组件&…

【HarmonyOS】鸿蒙应用点9图的处理(draw9patch)

【HarmonyOS】鸿蒙应用点9图的处理&#xff08;draw9patch&#xff09; 一、前言&#xff1a; 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案&#xff0c;鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置Resiza…

深入Android架构(从线程到AIDL)_12 Android UI 单线程程序

目录 6、 Android UI 单线程程序 單線程程序概念 单线程可避免线程安全问题 SurfaceView与非UI线程 6、 Android UI 单线程程序 單線程程序概念 单线程程序意谓着两个(或多个)线程不能共享对象或变量值。Android的UI是单线程程序的环境。UI控件(如Button等)都是由UI线程所…

STM32-笔记36-ADC(模拟/数字转换器)

一、什么是ADC&#xff1f; 全称&#xff1a;Analog-to-Digital Converter&#xff0c;指模拟/数字转换器。 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12 位 ADC 是一种逐次逼近型模拟数字转换器&#xff08;0…

房产销售系统(源码+数据库+文档)

亲测完美运行带论文&#xff1a;文末获取源码 文章目录 项目简介&#xff08;论文摘要&#xff09;运行视频包含的文件列表&#xff08;含论文&#xff09;前端运行截图后端运行截图 项目简介&#xff08;论文摘要&#xff09; 随着科学技术的飞速发展&#xff0c;各行各业都在…

游戏社交趋势下,游戏语音再升级!

如今&#xff0c;游戏已成为我们社交生活的一个重要娱乐方式&#xff0c;春节临近&#xff0c;与亲朋好友一起畅玩“开黑”无疑是节假日的一大乐趣。在游戏社交互动中&#xff0c;“游戏语音”不可或缺。在传统游戏语音领域&#xff0c;多人在线游戏如 MOBA、FPS 和 MMORPG 的实…

HTML5实现好看的博客网站、通用大作业网页模板源码

HTML5实现好看的博客网站、通用大作业网页模板源码 前言一、设计来源1.1 主界面1.2 列表界面1.3 文章界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的博客网站、通用大作业网页模板源码&#xff0c;博客网站源码&#xff0c;HTML模板源码&#xff0…

ArcGIS中怎么把数据提取到指定范围(裁剪、掩膜提取)

最近&#xff0c;经常能收到怎么把数据提取到指定范围、栅格数据怎么裁剪、矢量数据怎么裁剪、栅格数据怎么掩膜提取的咨询。 下面是我对这个问题的解决思路&#xff1a; 对于矢量数据&#xff1a; ①首先把数据加载进来 ②软件界面上面的工具栏找到→地理处理→裁剪&#x…

node.js内置模块之---stream 模块

stream 模块的作用 在 Node.js 中&#xff0c;stream 模块是一个用于处理流&#xff08;stream&#xff09;的核心模块。流是一种处理数据的抽象方式&#xff0c;允许程序处理大量数据时不会一次性将所有数据加载到内存中&#xff0c;从而提高性能和内存效率。通过流&#xff0…

手持PDA终端,提升零售门店管理效率

随着科技的不断进步和零售行业的持续发展&#xff0c;手持PDA终端的应用将会越来越广泛。它将不断融合更多先进的技术和功能&#xff0c;为零售门店管理带来更加便捷、高效、智能的解决方案。 手持PDA终端是集成了数据处理、条码扫描、无线通信等多种功能于一体的便携式设备‌…

【51单片机-零基础chapter1】

安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…

使用JMeter玩转tidb压测

作者&#xff1a; du拉松 原文来源&#xff1a; https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的&#xff0c;所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具&#xff0c;直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…

Win11+WLS Ubuntu 鸿蒙开发环境搭建(一)

参考文章 Windows11安装linux子系统 WSL子系统迁移、备份与导入全攻略 如何扩展 WSL 2 虚拟硬盘的大小 Win10安装的WSL子系统占用磁盘空间过大如何释放 《Ubuntu — 调整文件系统大小命令resize2fs》 penHarmony南向开发笔记&#xff08;一&#xff09;开发环境搭建 一&a…

基于深度学习算法的AI图像视觉检测

基于人工智能和深度学习方法的现代计算机视觉技术在过去10年里取得了显著进展。如今&#xff0c;它被广泛用于图像分类、人脸识别、图像中物体的识别等。那么什么是深度学习&#xff1f;深度学习是如何应用在视觉检测上的呢&#xff1f; 什么是深度学习&#xff1f; 深度学习是…

HuatuoGPT-o1:基于40K可验证医学问题的两阶段复杂推理增强框架,通过验证器引导和强化学习提升医学模型的推理能力

HuatuoGPT-o1&#xff1a;基于40K可验证医学问题的两阶段复杂推理增强框架&#xff0c;通过验证器引导和强化学习提升医学模型的推理能力 论文大纲理解1. 确认目标2. 分析过程3. 实现步骤4. 效果展示 解法拆解全流程提问俩阶段详细分析 论文&#xff1a;HuatuoGPT-o1, Towards …

硬件基础知识笔记(2)——二级管、三极管、MOS管

Part 2 二级管、三极管、MOS管 1、二级管1.1肖特基二极管和硅二极管选型比较1.2到底是什么决定了二极管的最高工作频率&#xff1f;1.3二极管结电容和反向恢复时间都是怎么来的1.4肖特基二极管的工作原理1.5为什么要用肖特基二极管续流&#xff1f; 2、三极管2.1三极管工作原理…

vue3-dom-diff算法

vue3diff算法 什么是vue3diff算法 Vue3中的diff算法是一种用于比较虚拟DOM树之间差异的算法&#xff0c;其目的是为了高效地更新真实DOM&#xff0c;减少不必要的重渲染 主要过程 整个过程主要分为以下五步 前置预处理后置预处理仅处理新增仅处理后置处理包含新增、卸载、…

【C++】B2093 查找特定的值

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式输出格式输入输出示例 &#x1f4af;题目分析与解题思路&#x1f4af;代码实现与对比分析我的实现代码老师的实现代码详细对比与分析1. 数组的定义方式2. …

计算机网络:网络层知识点及习题(一)

网课资源&#xff1a; 湖科大教书匠 1、概述 网络层实现主机到主机的传输&#xff0c;主要有分组转发和路由选择两大功能 路由选择处理机得出路由表&#xff0c;路由表再生成转发表&#xff0c;从而实现分组从不同的端口转发 网络层向上层提供的两种服务&#xff1a;面向连接…