基于姿态估计算法的健身辅助应用

news2024/11/17 9:39:52

作为一名健身爱好者,我一直对探索改善锻炼习惯的方法很感兴趣。一个一直让我着迷的领域是使用计算机视觉和机器学习来分析和纠正锻炼过程中的姿势。在本文中,我将分享我使用姿势估计算法构建一个简单的健身房训练辅助应用程序的历程。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、问题陈述

当我开始在家锻炼时,我意识到如果没有私人教练或教练,保持正确的姿势是一项挑战。我希望在健身房里放镜子能有所帮助,但这还不够。我想找到一种方法来分析我的动作并收到关于我的姿势的反馈。作为一个对指标和数字非常痴迷的人,我渴望找到一种方法来量化我的进步并跟踪我随着时间的推移而取得的进步。我知道这可能无法完美地转化为像训练这样的实时活动,但我希望有一些具体的东西来让我的头脑清醒。

1.1 高级计划

我的目标是构建一个应用程序,可以分析我锻炼的视频并提供关于我的姿势的反馈。以下是我的方法的高级概述:

  • 使用关键点检测模型分析锻炼视频
  • 将我的动作与专业人士的动作进行比较
  • 想出某种指标来告诉我锻炼是否正确。它还应突出显示需要改进的地方。

1.2 要求

当我开始探索潜在的解决方案时,我心中有几个关键要求。我想要一个易于实现的东西。我还希望它运行速度快,最好在我的 MacBook Pro M1 上运行,这样我就可以使用它并快速迭代,而无需花大价钱购买高端 GPU。我的目标是找到一种解决方案,让我能够试验和改进我的方法,而不会陷入技术细节或昂贵硬件的泥潭。考虑到这些要求,我开始探索姿势估计算法和计算机视觉的世界。

2、姿势估计简介

姿势估计是一个研究深入的领域,可应用于动作识别、活动跟踪、增强现实、动画、游戏等。姿势估计的目标是检测图像或视频中人体部位(例如关节和四肢)的位置和方向。

姿势估计。来源:2d pose estimation

姿势估计主要有两种方法:单人和多人。单人姿势估计在图像中找到一个人的姿势。它知道这个人在哪里,以及要寻找多少个关键点,这是一个回归问题。多人姿势估计则不同。它试图解决一个更难的问题,即图像中的人的数量和位置都是未知的。

单人姿势估计可以进一步分为两个框架:基于直接回归和基于热图。基于直接回归的框架从特征图中预测关键点。基于热图的框架生成图像中所有关键点的热图,然后使用其他方法构建最终的火柴人。

3、寻找正确的关键点检测模型

当我沉浸在姿势估计的世界中时,我对众多可用的关键点检测模型并不感到惊讶。目前最好的一些模型,例如 OmniPose,拥有令人印象深刻的准确性。OpenMMLab 的姿势估计工具箱也引起了我的注意。它为与姿势估计相关的所有内容提供了一个全面而强大的框架,包括比较不同模型的基准。

我一直在寻找一个简单而轻量级的解决方案,所以我决定使用 Google 的 MoveNet。MoveNet 是一个紧凑而高效的姿势估计模型,非常适合移动和嵌入式设备。MoveNet 只有约 4M 个参数,而 OmniPose 有约 68M(或精简版约 20M)。它的小巧和简单使它成为我项目的理想选择,让我可以快速进行实验和原型设计,而无需大量计算资源。虽然它可能无法提供与一些更先进的模型相同的准确度,但它是我项目的绝佳起点。

4、MoveNet

但 MoveNet 是如何工作的呢?简而言之,MoveNet 使用热图来准确定位人体关键点。这是一个自下而上的估计模型,这意味着它首先检测一个人的人体关节,然后将这些关节组装成姿势。

MoveNet 架构由两个主要组件组成:

a、特征提取器:带有附加特征金字塔网络的 MobileNetV2。MobileNetV2 是一种轻量级卷积神经网络,非常适合移动和嵌入式设备。特征金字塔网络允许 MoveNet 以多种尺度捕获特征,这对于检测距离相机不同距离的关键点非常重要。

b、预测器头:一组预测器头连接到特征提取器。这些预测器头负责预测:

  • 实例(人)的几何中心
  • 人的完整关键点集
  • 所有关键点的位置
  • 从每个输出特征图像素到每个关键点的精确子像素位置的局部偏移量使用 MoveNet 提取的关键点示例。

使用 MoveNet 提取的关键点示例。来源:MoveNet:超快速和准确的姿势检测模型

MoveNet 在 TensorFlow Hub 上可用,并附带大量教程、文档和随附代码,使我的开始尽可能顺利。但真正让我印象深刻的是,MoveNet 甚至可以在浏览器中运行,在大多数现代设备(包括智能手机)上实现 30+ FPS。这使其成为健身、健康和保健应用的理想选择,因为实时反馈和低延迟至关重要。

5、提取关键点

MoveNet 可检测全身从鼻子到脚踝的 17 个关键点。该模型输出一个 17x3 张量,其中每行代表关键点的标准化 X 和 Y 坐标以及置信度分数。

我正在做划船练习

我对我的录音结果进行了定性分析,对关键点检测的质量感到满意。该模型能够准确检测我身体上的关键点,但我的录音光线充足,角度清晰。该模型提供的置信度分数也很好地表明了检测的可靠性,让我能够过滤掉任何低置信度检测的关键点。

总体而言,我对 MoveNet 模型的性能印象深刻,并发现它是从我的录音中提取关键点的可靠工具。

7、从帧到序列 — 对齐记录

虽然从单个帧中提取关键点是至关重要的一步,但对于实际应用来说这还不够。我们必须将眼光放得更远,而不仅仅是单个帧,并考虑到记录可能并非完全对齐的事实。在这种情况下,逐帧比较关键点会产生不正确的结果。如果一个记录比另一个记录早几分之一秒开始,那么两个记录中的关键点将不匹配,即使动作相同。为了让分数真正有用,我必须对齐每个记录的帧。

为了实现这一点,我在视频编辑软件中手动完成了大部分工作。我修剪和调整了记录以确保它们同步。为了进一步完善对齐,我使用了动态时间扭曲 (DTW)。这是一种允许比较可能具有不同长度或时间的序列的技术。DTW 有助于微调对齐,确保每个记录中的关键点尽可能准确地匹配。

DTW 与欧几里得匹配。来源:Wikipedia

对于我的简单用例,使用 DTW 细化的手动对齐很有效。它是劳动密集型的,因此不是现实世界应用的可扩展解决方案。对于此类应用,对齐记录的过程必须自动化。这是另一个挑战,也是一篇完全独立的文章的主题。自动对齐需要开发能够准确同步记录的算法,即使在存在噪声、可变性和其他现实世界复杂性的情况下也是如此。

对齐的记录。左图:我,右图:专业人士


8、比较动作

现在我已经对齐了序列,我需要将我的动作与专业人士的动作进行比较。为此,我使用了余弦相似度,这是姿势估计问题空间中广泛使用的度量。

余弦相似度是两个向量之间相似度的度量,用于计算它们之间角度的余弦。在姿势估计的背景下,它通常用于比较两组关键点(例如身体关节或面部标志)之间的相似度。余弦相似度度量之所以被广泛使用,是因为它对比例和旋转的变化具有鲁棒性,非常适合比较姿势。

这个简单的度量也有很多变体,我尝试了其中的一些来查看它们的表现。结果和想法如下。

我录了两次自己的动作——第一次尽可能正确地做这个练习(下面 GIF 的左侧)。第二次我尝试做错了(下面 GIF 的右侧)——注意在动作的第一阶段我的背部向前倾斜太多。做这个练习的专业人士在中间(参考)。

左图:我正确地做运动,中图:专业人士,右图:我做运动不正确

8.1 简单的余弦相似度

我能想到的最简单的度量标准是一次性查看整个动作。我只需将所有关键点连接成一个形状为  [num_frames * 17 (num_keypoints) * 2 (coordinates)] 的向量,并计算我和专业人士之间的余弦相似度。结果是:

  • cos_sim(correct_movement, professional) = 0.8409
  • cos_sim(incorrect_movement, professional) = 0.8255

显然,第二个动作与参考动作不太相似,但差异幅度 (0.0154) 并不大。

8.2 逐帧并取平均值

我的第二种方法是利用帧对齐的事实,计算相应帧上关键点的余弦相似度(在相应的运动阶段)并取平均值。

左图:我正确地做运动,中图:专业人士,右图:我做运动不正确

逐帧余弦相似度

看上面的图表,我可以得出结论,右侧的运动与参考运动不太相似(因此更差)。右侧的分数一直下降到 0.79,并且(几乎)总是低于左侧的分数。

平均得分与第一种方法几乎相同:

  • 平均 cos_sim(正确移动,专业)= 0.8411
  • 平均 cos_sim(不正确移动,专业)= 0.8256
  • 中位数 cos_sim(正确移动,专业)= 0.8399
  • 中位数 cos_sim(不正确移动,专业)= 0.8257

8.3 加权相似度

我还没有使用 MoveNet 返回的第 3 个分数——关键点置信度分数。

参考记录中的关键点置信度

一些关键点(如左肘)在参考记录中几乎不可见。我的记录也是如此,因为我试图从类似的角度进行记录。

在计算加权余弦相似度时,我使用置信度分数作为权重。它应该更多地关注在两个记录中都清晰可见的关键点。这种方法产生了以下分数:

  • 平均 cos_sim(正确移动,专业)= 0.8135
  • 平均 cos_sim(不正确移动,专业)= 0.7976

再次,分数证实,第二个动作比第一个动作更差,但差异很小。对于生产用途,必须进一步调整指标。

9、未来的改进

当我反思我的项目时,我可以看到两个可以改进的主要领域。让我们深入研究它们中的每一个。

  • 推进核心 CV/AI 技术

从技术角度来看,有几种方法可以增强姿势估计算法。例如,改进和调整比较指标可以更准确地评估锻炼形式。另一种方法可能是专注于分析骨骼或整个肢体,而不仅仅是关节,这可能提供对运动的更全面理解。此外,确保算法不受摄像机角度、光照条件和其他环境因素的影响,将使其更加稳健和可靠。

  • 生产化和用户体验

第二个需要改进的领域是生产化。为了创造无缝的用户体验,我需要完全自动化整个过程,这需要投入更多时间进行预处理和对齐数据。这将涉及弄清楚如何简化工作流程,处理潜在的技术问题,以及设计直观的界面。此外,建立一个具有各种设置(例如不同的摄像机角度和环境)的综合练习库对于为用户提供多种练习选项和场景至关重要。

帮助我制作这篇文章的 Jupyter Notebook 可在此处获得。


原文链接:基于姿态估计的健身应用 - BimAnt

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

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

相关文章

Qt实现自定义的文件对话框CustomFileDialog

背景: 最近客户有需求说Qt自带的文件对话框在windows上打开网络共享文件的时候比较卡,需要解决这个问题,于是参考Qt源码,自定义了一个文件对话框。已经实现流畅加载网络共享文件夹了。效果如下,所有的代码都可以直接修…

ComfyUI中缺失节点安装一点小小注意事项

加载工作流,遇到了红当当的缺失节点警告窗口: 在ComfyUI-Manager点击安装缺失节点,发现竟然弹出4个,而上面告警窗口中只是缺失3个,究竟是怎么回事呢,刚开始接触ComfyUI时,我也是不管3721&#x…

echarts 导出pdf空白原因

问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…

卷轴模式开发的技术架构分析与源代码展示

在软件开发中,"卷轴模式"(虽然不是一个广泛认知的术语,在此我们可以理解为一种类似于游戏或应用中内容逐步加载与展示的模式,类似于古代卷轴展开的方式)通常用于处理大量数据或内容,特别是当这些…

人工智能与自然语言处理发展史

前言 在科技的浪潮中,人工智能 (AI) 作为一股不可阻挡的力量,持续推动着社会与科技的进步。本博客旨在深入剖析人工智能及其核心领域——神经网络、自然语言处理、统计语言模型、以及大规模语言模型——的演进历程,以专业的视角展现这一领域…

网站建设中常见的网站后台开发语言有哪几种,各自优缺点都是什么?

市场上常见的网站后台开发语言有PHP、Python、JavaScript、Ruby、Java和.NET等。这些语言各有其独特的优缺点,适用于不同的开发场景和需求。以下是对这些语言的具体介绍: PHP 优点:PHP是一种广泛用于Web开发的动态脚本语言,特别适…

828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter

在追求创新与效率并重的今天,我们公司迎难而上,决定自主搭建一款短视频生成AI工具——MoneyPrinter,旨在为市场带来前所未有的创意风暴。面对服务器选择的难题,我们经过深思熟虑与多方比较,最终将信任票投给了华为云Fl…

使用vite+react+ts+Ant Design开发后台管理项目(四)

前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…

将Pytorch环境打包,快速部署到另一台机器上(在没有网络,或者网络环境不好的情况下推荐使用)

打包PyTorch环境 当您需要在不同的机器上快速部署包含PyTorch的Python环境时,使用conda-pack是一个很好的选择。conda-pack可以打包一个完整的Conda环境,包括所有已安装的包和依赖项,使其能够轻松地在其他机器上还原。 步骤一:…

Django 对数据库的增删改查

新增 使用方法:类模型.objects.create 类模型 from django.db import models# Create your models here. class Car(models.Model):user models.CharField(max_length200)plate_number models.CharField(max_length20)def __str__(self):return f{self.user} -…

Linux之我不会

一、常用命令 1.系统管理 1.1 systemctl start | stop | restart | status 服务名 案例实操 1 查看防火墙状态 systemctl status firewalld2 停止防火墙服务 systemctl stop firewalld3 启动防火墙服务 systemctl start firewalld4 重启防火墙服务 systemctl restart f…

构建高可用和高防御力的云服务架构第一部分:深入解析DDoS高防(1/5)

引言 在数字化时代,网络安全已成为全球关注的焦点。随着互联网技术的快速发展和应用的广泛深入,网络安全形势日益严峻。特别是分布式拒绝服务(DDoS)攻击,以其破坏性强、难以防范的特点,对个人、企业乃至国…

Django操作ES实现搜索功能

Django操作ES实现题目的高亮搜索功能 一、基础配置二、使用ES完成题目的高亮搜索1. ES的初始化接口2. 使用ES实现题目的增删改查1. 题目的高亮搜索2. 题目的高亮搜索优化3. 将数据存储到MYSQL中持久化存储并同步到ES中一、基础配置 下载依赖,与之前配置的ES版本一致。 ES的配置…

Mac安装manim

文章目录 0.关于Manim1.官方安装方法2.使用conda2.1 下载Anaconda2.2 创建环境2.3 Required Dependencies 3.实验 今天发现Mac电脑以前安装的manim不能用了,索性重新装一次,顺便把过程记录下来。 0.关于Manim Manim 主要分为两个主要版本: …

使用VSCode远程调试AutoDL上的程序

在租用的AutoDL服务器上基于终端不便进行代码调试,而使用远程桌面控制部署也相对麻烦。pycharm 则需要专业版才能进行远程开发,如果使用Shell启动的程序也没有办法调试,最终选择利用 VScode 来进行远程代码调试。 一、远程租用并启动服务器 …

一步到位:如何在卡内基梅隆大学计算机科学学院官网下载并安装ACME软件

想要在卡内基梅隆大学计算机科学学院官网下载ACME软件?下面是详细的操作步骤! 1. 访问官网 首先,打开卡内基梅隆大学计算机科学学院的官方网站。 2. 搜索ACME软件 在官网首页的搜索框中输入“acme”,然后按下回车键。 3. 找到下载…

大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询

文章目录 案例实践——淘宝母婴数据加速查询 一、​​​​​​​创建数据库表并导入数据 二、​​​​​​​​​​​​​​创建session集群 三、​​​​​​​​​​​​​​源表查询 四、​​​​​​​​​​​​​​指标计算 案例实践——淘宝母婴数据加速查询 随着…

【全新课程】正点原子《ESP32基础及项目实战入门》培训课程上线!

正点原子《ESP32基础及项目实战入门》全新培训课程上线啦!正点原子工程师手把手教你学!熟练掌握ESP-IDF开发,突破ESP32入门难题! 一、课程介绍 本课程针对ESP32的入门和基础外设进行系统教学,内容包括环境搭建、编程…

C#和数据库高级:密封类和方法覆盖

文章目录 一、密封类关键字:sealed方法覆盖 面向对象三大特性总结 一、密封类 关键字:sealed 方法覆盖 面向对象三大特性总结

类与对象【中】

1.类的六个默认构造函数 如果一个类中什么成员都没有简称空类 但空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显示实现,编译器会生成的成员函数…