引言
本文主要介绍一个使用OpenCV和Mediapipe的运动跟踪器的实战项目,主要实现手部二头肌卷取动作的检测与计数,并详细介绍了其实现原理与实现代码,供小伙伴们学习参考。当然,通过该项目原理可以实现很多其他锻炼项目的检测与计数,感兴趣的小伙伴自行探索。
什么是OpenCV?
OpenCV(Open Source Computer Vision Library)是计算机视觉领域使用最广泛的工具之一。它是一个开源库,包含2,500多种算法,使我们能够执行目标检测、面部识别和图像处理等任务。
在我们的运动跟踪项目中,OpenCV扮演了关键角色。它使我们能够:
1.从计算机的网络摄像头捕获视频。
2.处理视频的每一帧以检测特定身体部位的运动,如肘部和手腕。
3.以视频和文本叠加的形式向用户显示实时反馈。
我们为这个项目选择OpenCV的主要原因之一是它易于使用Python,即使是初学者也可以使用。OpenCV支持多种平台,包括Windows、macOS和Linux,这使得学生可以轻松地在自己的计算机上运行该项目。
什么是姿态估计?
在我们深入研究我们项目的技术细节之前,理解姿态估计的概念是很重要的。姿态估计是计算机视觉中的一种技术,它允许我们通过检测关键点或“地标”(如肘部,肩部,手腕和臀部)来跟踪和分析人体的运动。
通过连接这些关键点,我们可以绘制人体地图,并测量不同身体部位的运动和角度。
简而言之,姿势估计可以帮助计算机识别您的身体所处的位置。无论您是站着、坐着还是执行特定运动(例如举起哑铃),姿势估计都可以识别每个关节的位置以及它的真实的移动方式。
使用姿势估计跟踪运动的能力使其成为构建需要用户交互的应用程序的理想工具。这包括健身追踪器、互动游戏、虚拟现实和基于手势的界面等应用程序。
什么是Mediapipe?
Mediapipe由Google开发,是一个机器学习框架,可以简化构建用于人体姿势估计,手部跟踪,面部检测等的实时系统。它提供了预先构建的模型,可以以惊人的精度和速度检测人体,手部或面部的关键点。
Mediapipe的设计高度灵活和高效,使其成为移动的设备和实时应用的理想选择。它使用复杂的机器学习算法来跟踪人体上的地标,使其成为我们运动跟踪器项目的完美工具。
项目技术路线选择与步骤
这就是为什么Mediapipe是我们项目的最佳选择:
实时性能: Mediapipe可以足够快地处理视频帧,以便为用户提供真实的反馈。
准确度: 它能够以高精度检测身体的最小运动。
用途: 它与Python顺利集成,使初学者易于实现。
与OpenCV一起,Mediapipe允许我们为二头肌卷曲跟踪器捕获和分析身体运动。
步骤1:设置OpenCV和Mediapipe
我们项目的第一步是设置必要的工具。我们首先安装了OpenCV和Mediapipe库,这对捕获视频和检测姿势至关重要。
以下是安装过程:
安装完成后,我们在Python脚本中导入了必要的模块:
导入必要的Python模块
在我们的例子中,OpenCV处理视频捕获,而Mediapipe检测姿势。这两个库将共同创建二头肌卷曲跟踪器。
步骤2:使用OpenCV捕获视频
在这一步中,我们解释了OpenCV如何从计算机的网络摄像头捕获视频。来自网络摄像头的每一帧都经过处理,使我们能够实时查看和分析运动。
以下是我们如何拍摄视频:
获视频帧的代码
步骤3:使用Mediapipe检测身体关节
下一步是使用Mediapipe来检测特定的身体关节,如肩膀,肘部和手腕。Mediapipe的姿态估计模型让我们可以轻松地做到这一点。它为身体的不同部位提供了关键点(地标),我们可以用它来跟踪运动。
我们首先建立了Mediapipe Pose模型。我们还设置了Mediapipe的绘图和姿势工具。
对于每一帧视频,Mediapipe都会检测姿势和地标:
这段代码有助于可视化身体标志,显示肩膀、肘部和手腕等关节上的点。
第四步:姿势估计
现在我们有了依赖项,让我们设置网络摄像头提要并开始检测姿势。
此脚本从网络摄像头捕获视频并应用姿势估计,在屏幕上可视化检测到的姿势。您将看到Mediapipe如何在真实的时间内识别您身体上的关键点。
步骤5:提取关节坐标
接下来,我们将提取特定关节的坐标。这对于以后计算角度至关重要。
为了访问特定的关节,我们使用姿势标志列表中的索引。例如,左肩的坐标可以如下访问:
步骤6:计算关节角度
为了创建运动跟踪器,我们需要计算在卷曲过程中二头肌在不同点的角度。这需要一些简单的三角函数,我们教学生使用一个函数来计算三点之间的角度:肩膀,肘部和手腕。
下面是我们如何计算角度:
代码计算3点之间的角度:肩,肘和手腕
此函数获取肩、肘和腕的坐标,并计算二头肌弯曲期间手肘关节的角度。
我们现在可以使用这个函数来计算手肘关节的角度:
计算并显示肘关节处的角度
第五步:建立二头肌卷曲计数器
随着角度计算到位,我们现在可以建立我们的运动跟踪器的核心-二头肌卷曲计数器!计数器将根据手肘的角度跟踪卷曲的数量。
我们设置了一个计数器变量来跟踪完成的卷曲次数,并设置了一个阶段变量来检查手臂是处于“向上”还是“向下”的位置。
计算二头肌卷曲次数的代码
这种逻辑确保了手肘从“向下”位置(角度> 160°)移动到“向上”位置(角度< 30°)时,它将被计为一次卷曲。
第6步:构建二头肌卷曲跟踪器
最后,我们将结合之前的代码,实现我们的二头肌卷曲跟踪器。我们将根据手肘关节的角度变化来计算卷曲。
所有代码合并
有了这个,你就建立了一个二头肌卷曲跟踪器,可以计数总次数和显示阶段手臂所在阶段,你的手臂位置(向上或向下)等信息。
总结
本文通过使用Mediapipe和OpenCV构建了一个二头肌卷曲跟踪器,当然你也可以通过了解基础知识,扩展此锻炼监控系统,以跟踪其他锻炼,如蹲下,俯卧撑,甚至瑜伽姿势。这些应用程序不仅提供实时反馈,还使锻炼更具吸引力和乐趣。
原文地址:https://blog.csdn.net/qq_42589613/article/details/144965624
原文中还有很多学习练习的例子,请访问原地址查看: