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


在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速上手Python,制作趣味猜数字游戏

在编程学习的旅程中&#xff0c;游戏是一个极佳的切入点。今天&#xff0c;我们将一起创建一个简单而有趣的猜数字游戏&#xff0c;借此机会深入学习Python编程的基础知识和一些实用的编程技巧。无论你是初学者还是有一定基础的开发者&#xff0c;相信你都能从中获得乐趣和收获…

AI驱动的可演化架构与前端开发效率

1. 引言 在当今快节奏的数字时代&#xff0c;软件系统需要具备强大的适应能力才能在瞬息万变的市场需求中保持竞争力。软件可演化架构的重要性日益凸显&#xff0c;它能够让软件系统在面对需求变更、技术升级以及市场波动时&#xff0c;能够快速、高效地进行调整和升级&#x…

用豆包MarsCode IDE打造精美数据大屏:从零开始的指南

原标题&#xff1a;用豆包MarsCode IDE&#xff0c;从0到1画出精美数据大屏&#xff01; 豆包MarsCode IDE 是一个云端 AI IDE 平台&#xff0c;通过内置的 AI 编程助手&#xff0c;开箱即用的开发环境&#xff0c;可以帮助开发者更专注于各类项目的开发。 作为一名前端开发工…

基于RK3568/RK3588大车360度环视影像主动安全行车辅助系统解决方案,支持ADAS/DMS

产品设计初衷 HS-P2-2D是一款针对大车盲区开发的360度全景影像 安全行车辅助系统&#xff0c;通过车身四周安装的超广角像机&#xff0c;经算法合成全景鸟瞰图&#xff0c;通过鸟瞰图&#xff0c;司机非常清楚的看清楚车辆四周情况&#xff0c;大大降低盲区引发的交通事故。 产…

pygame飞机大战

飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 #窗口尺寸 import random import p…

c++ 两线交点计算程序(Program for Point of Intersection of Two Lines)

给定对应于线 AB 的点 A 和 B 以及对应于线 PQ 的点 P 和 Q&#xff0c;找到这些线的交点。这些点在 2D 平面中给出&#xff0c;并带有其 X 和 Y 坐标。示例&#xff1a; 输入&#xff1a;A (1, 1), B (4, 4) C (1, 8), D (2, 4) 输出&#xff1a;给定直线 AB 和…

Taro+react 开发第一节创建 带有redux状态管理的项目

Taro 项目基于 node&#xff0c;请确保已具备较新的 node 环境&#xff08;>16.20.0&#xff09;&#xff0c;推荐使用 node 版本管理工具 nvm 来管理 node&#xff0c;这样不仅可以很方便地切换 node 版本&#xff0c;而且全局安装时候也不用加 sudo 了。 1.安装 npm inf…

2024AAAI SCTNet论文阅读笔记

文章目录 SCTNet: Single-Branch CNN with Transformer Semantic Information for Real-Time Segmentation摘要背景创新点方法Conv-Former Block卷积注意力机制前馈网络FFN 语义信息对齐模块主干特征对齐共享解码头对齐 总体架构backbone解码器头 对齐损失 实验SOTA效果对比Cit…

代码随想录 数组test5(leetcode 59.螺旋矩阵)

59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 大致的想法是从起点开始以顺时针走到中心&#xff0c;有两种实现方式:一圈一圈赋值或者每走一步就赋值 方法一:按圈循环 思路: 外层循环是要循环的圈数&#xff0c;这里需要分奇偶讨论&#xff0c;若题目给出的n为偶…

向成电子XC3588H工控主板助力内窥镜应用升级

随着微创手术在全球范围内普及&#xff0c;内窥镜应用越来越广泛。利用内窥镜&#xff0c;医生可以看到X射线不能显示的病变&#xff0c;对医疗诊断有非常重要的作用。内窥镜设备凝聚了先进的影像技术&#xff0c;提供高画像精度诊断微小的病变。在设备智能化的今天&#xff0c…

基于SpringBoot的音乐网站与分享平台

基于SpringBoot的音乐网站与分享平台 摘要1. 研究背景2.研究内容3.系统功能 3.1前台首页功能模块3.2在线听歌功能模块3.3后台登录功能模块3.4在线听歌管理模块 4.部分功能代码实现5.源码分享(免费获取) 需要源码联系我即可(免费获取)~ ??大家点赞、收藏、关注、评论啦 、查…

nginx-灰度发布策略(split_clients)

一. 简述&#xff1a; 基于客户端的灰度发布&#xff08;也称为蓝绿部署或金丝雀发布&#xff09;是一种逐步将新版本的服务或应用暴露给部分用户&#xff0c;以确保在出现问题时可以快速回滚并最小化影响的技术。对于 Nginx&#xff0c;可以通过配置和使用不同的模块来实现基于…

【数据结构】栈与队列(FIFO)

在阅读该篇文章之前&#xff0c;可以先了解一下堆栈寄存器和栈帧的运作原理&#xff1a;<【操作系统】堆栈寄存器sp详解以及栈帧>。 栈(FILO) 特性: 栈区的存储遵循着先进后出的原则。 例子: 枪的弹夹&#xff0c;最先装进去的子弹最后射出来&#xff0c;最后装入的子弹…

python基础案例

#一个年份如果能被4整除但不能被 100整除&#xff0c;或能被 400整除&#xff0c;那么这个年份就是闰年。 year int(input(请输入年份&#xff1a;)) if (year %40 and year %100!0) or year %4000:print("这个年份就是闰年") else:print("这个年份不是闰…

微服务框架,Http异步编程中,如何保证数据的最终一致性

一、背景 在微服务框架下&#xff0c;跨服务之间的调用&#xff0c;当遇到操作耗时或者量大的情况&#xff0c;我们一般会采用异步编程实现。 本文出现的问题是&#xff1a;异步回调过来时&#xff0c;却未查询到数据库中的任务&#xff0c;导致未能正常处理回调。 下面是当…

Kafka详解 ③ | Kafka集群操作与API操作

目录 1、Kafka集群操作 1.1、创建 topic 1.2、查看主题命令 1.3、生产者生产 1.4、消费者消费数据 1.5、运行 describe topics命令 1.6、增加 topic分区数 1.7、增加配置 1.8、删除配置 1.9、删除 topic 2、Kafka的Java API操作 2.1、生产者代码 2.2、消费者代 2…

Echarts集成Vue2个人总结与反思

协同净焦水处理系统 统计模块 环境部署 1、创建数据库ry-cloud并导入数据脚本ry_2021xxxx.sql&#xff08;必须&#xff09;&#xff0c;quartz.sql&#xff08;可选&#xff09; 2、创建数据库ry-config并导入数据脚本ry_config_2021xxxx.sql&#xff08;必须&#xff09; …

aardio —— 虚表 —— 模拟属性框

写了个简单的属性框例程&#xff0c;抛砖引玉&#xff0c;期待你做出更丰富强大的功能。 本例演示&#xff1a;折叠子行、选择框、输入文本、输入数值、下拉选择、选择图片、选择颜色、选择字体等功能。 只有想不到&#xff0c;没有做不到&#xff0c;发挥你的想象力吧。 imp…

《Vue3 七》插槽 Slot

插槽可以让组件的使用者来决定组件中的某一块区域到底存放什么元素和内容。 使用插槽&#xff1a; 插槽的使用过程其实就是抽取共性、预留不同。将共同的元素、内容依然留在组件内进行封装&#xff1b;将不同的元素使用 slot 作为占位&#xff0c;让外部决定到底显示什么样的…

Functions

1.trigonometric function 定义和图像 反三角函数是三角函数的反函数 versin(verse -sin)&#xff1a;1/sinx 性质 三角函数的公式 三角恒等式 周期性公式&#xff1a;直接画图记 公式记忆&#xff1a;先想象一个在第一象限的锐角 1&#xff1a;在坐标轴中旋转360 2.sin&am…