基金項目:2023年度宁夏工商职业技术学院校级科研项目;项目名称:基于OpenCV+MediaPipe的运动姿态AI训练系统的设计与开发;项目编号:NXGS2023ZR10。
作者简介:谢鹏(1975— ),男,山西临猗人,助教,硕士;研究方向:人工智能与大数据技术。
摘要:文章基于OpenCV在计算机视觉和MediaPipe在机器学习中人体姿态估计中的应用,开发了体育运动AI训练系统V1.0,实现自定义示范动作,用以达到辅助体育训练的目的;实现方法为,通过采集MediaPipe检测追踪和捕获在人体运动时姿态各个关节角度数据,作为示范动作的数据集,将训练者动作数据集与示范动作数据集对比,判断动作是否标准;系统经运动员测试使用,动作识别率较高,训练效果良好;运动姿态AI检测在体育训练方面应用有效可行。
关键词:OpenCV;MediaPipe;人体姿态估计;体育训练
中图分类号:TP391 文献标志码:A
1 概述
体育训练通常要求运动员身体具备很好的四肢协调性,运动员很多情况下是重复某个动作的训练,训练的动作本身对身体姿态有一定的要求,包括身体四肢和躯干部分起始动作位置的相互夹角和结束动作位置的夹角。基于这种实际需求,经过综合分析并考虑到技术实现的可行性,笔者选择使用基于OpenCV计算机视觉库[1],结合MediaPipe机器学习中Pose的姿态估计[2-4],以及PyQt5的GUI界面设计的技术,综合运用实现体育运动AI训练系统V1.0软件的设计和开发。系统通过视频获取的实时动作姿态参数与参考动作参数对比,达到辅助训练的目的,经过测试,使用情况良好,有一定的推广价值。以下介绍OpenCV、MediaPipe和PyQt5的基本情况。
1.1 OpenCV——开源的计算机视觉库
开源计算机视觉库(Open Source Computer Vision Library,OpenCV)是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上,其中包含数百种图像处理和计算机视觉算法,已经成为计算机视觉领域最有力的研究工具之一 。它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,使得开发者可以在不同的平台下使用OpenCV计算机设计算法处理问题。应用领域包括:人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉和结构分析。
1.2 MediaPipe——开源的多媒体处理框架
MediaPipe 为直播和流媒体提供跨平台、可定制的 ML 解决方案。MediaPipe的Pose解决方案中的人体姿态估计在量化的体育运动、手语识别和全身手势控制等各种应用中发挥着极为重要的作用。它可以构成运动、健身、瑜伽和舞蹈应用的基础,甚至还可以在增强现实中将计算机中数字的内容和信息与在现实世界进行实时的交互,Pose是一种用于身体姿态实时跟踪的ML解决方案,BlazePose通过从RGB视频帧中获得身体上的33个3D特征点(landmark)和背景分割掩码,如图1 所示。这些特征点会随着动作的动态变化,实时跟踪身体的位置,坐标也实时变化。BlazePose的应用之一是健身运动方面,主要在姿态分类和重复计数,在 Colabs 的帮助下构建自定义姿态分类器。常见健身的两种练习是俯卧撑和深蹲,选择了k-最近邻算法(k-NN)作为分类器,为建立一个较为准确的分类器,训练集需要收集约几百个,适当涵盖不同的相机角度、环境条件、体型和运动变化的样本(俯卧撑的“向上”和“向下”位置)。重复计数,以俯卧撑的“向上”和“向下”终端状态为例:会分别计算“向下”和“向上”姿态类的概率首次超过某个阈值时,认为是“向上”和“向下”2个动作,并计为1次。
1.3 PyQt5——UI设计工具
PyQt5是基于Qt5的Python GUI(图形用户界面)框架,能够利用Python语言所提供的便捷性和灵活性,在跨平台的程序设计和开发过程中提供高效、可靠和易用的工具和资源。PyQt5可以在Windows、Mac OS X、Linux、Android等多个主流操作系统平台上进行编程开发,同时也支持多种编程语言,例如C++、Python、Java等。PyQt5具有友好易用的API和完整的类库,提供了丰富的图形、网络、数据库、多媒体等核心功能组件,同时也涵盖了多种常用控件和界面元素,例如窗口、按钮、文本框、列表框、菜单、工具栏、表格等等。PyQt5在 GUI编程方面使用已经越来越普遍,被广泛应用于各种应用程序的开发、测试和发布,具有丰富的社区支持和资料资源库,为Python开发者提供了强有力的工具和框架。
2 体育运动AI训练系统V1.0的设计与实现
系统开发IDE为PyCharm和QT designer,开发语言为Python,以及OpenCV、MediaPipe、PyQt5等第三方库。系统的4大功能:自定义运动姿态、AI辅助训练、实时姿态数据可视化和视频图像的任意缩放[5]。
本系统可以将运动员自定义的示范动作(主要是四肢与身体的夹角,肘部、膝盖和脚踝的夹角)的数据存储起来,任何需要训练的时候可以选择某个动作数据,点击开始训练,就可以参照示范动作进行训练,左上角的标记,在开始做动作在示范动作的上下15°的范围内时候呈现一种颜色,动作介绍在示范的动作的上下15°的范围内呈现另外一种颜色。两种颜色按顺序变化,则表示动作正确,会有相应的提示。通过反复地在起始位置做动作,颜色相继变化,动作的范围越来越接近参考值,意味着动作越来越接近示范动作,就是接近正确的动作。
實现该系统的主要方法为poseDetector类的findPose()、findPostion()和findAngle()方法,findPostion()可以获得运动姿态的33个特征值,findAngle()输入3个相邻点的特征值,通过计算获得中间点和两边点的夹角,也就是关节间的夹角。
获取运动姿态特征值需要使用的是mediapipe.solutions.pose.Pose()方法中的findPosition()方法,获取运动姿态的关节角度需要使用findAngle()方法,Pose()方法中传递的5个重要参数,具体使用如下:
class poseDetector():
self.pose=self.mpPose.Pose(self.mode, self.upBody, 1,self.smooth,self.detectionCon, self.trackCon)
2.1 实现方法
2.1.1 获取姿态——findPose()
findPose()方法实现获得并标记特征值的点。
def findPose(self, img, draw=True):
self.imgRGB=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
self.results=self.pose.process(self.imgRGB)
#判断特征值是否存在
if self.results.pose_landmarks:
if draw: #标记出运动姿态图像特征值
self.mpDraw.draw_landmarks(img, self.results.pose_landmarks,self.mpPose.POSE_CONNECTIONS)
return img #返回标记特征值的运动姿态图像
2.1.2 获取特征值——findPosition()
使用findPosition方法,能够将运动姿态的33个特征值,每个特征值包括序号、x坐标和y坐标3项,x和y坐标根据图像通过换算转换为实际窗口上的坐标,在每个点上画出圆形进行标注。
def findPosition(self, img, draw=True):
self.lmList=[]
#判断特征值
if self.results.pose_landmarks:
for id, lm in enumerate(self.results.pose_landmarks.landmark):
h, w, c=img.shape
cx, cy=int(lm.x * w), int(lm.y * h)
self.lmList.append([id, cx, cy])
return self.lmList
2.1.3 获取关节角度——findAngle()
findAngle()获得以p2为顶点的以p1p2、p2p3为边的夹角,也是姿态关节的夹角,笔者就是通过与参考夹角范围对比,来判断某个动作是否符合要求的。
def findAngle(self, img, p1, p2, p3, draw=True):
# 获得特征值
x1, y1=self.lmList[p1][1:]
x2, y2=self.lmList[p2][1:]
x3, y3=self.lmList[p3][1:]
# 计算角度
angle=math.degrees(math.atan2(y3 - y2, x3 - x2) -math.atan2(y1 - y2, x1 - x2))
return angle
2.2 自定义运动姿态
以乒乓球正手攻球动作为例,如图2所示,示范者先做好开始动作后由操作人员点击“开始动作”按钮,记录开始动作的四肢动作夹角值,然后再做“结束动作”并点击结束按钮。这两步操作之后,系统会分别记录动作开始和结束数据,点击确定“记录按钮”,会在excel表中新增加一个工作簿。并且操作人员可以自定义命名动作的名称,如果名称重复,则需要重新录入。然后确定存入excel表中新建的工作表,并可以通过选择下拉列表选择当前的数据,便可以在实时显示界面上显示刚刚记录的数据集,如果要开始训练,点击开始训练按钮进行训练。
2.3 AI辅助训练
当运动员选择了要训练的参考动作数据集之后[6],就可以开始训练,其原理为通过视频抓取每一帧的姿态动作与系统参考动作数据进行对比,动作范围可以自定义,本系统默认是15°的范围,比如:开始动作参考数据里的连接前臂和上臂的肘关节夹角度数为120°,那么参考标准度数为120°,训练者的动作可以在105°~135°,如此则认为符合标准的开始动作,结束动作情况一样。比如收小臂之后,参考数据是80°,训练者的动作在65°~95°,笔者认为是符合标准的结束动作,如图3所示。标准的开始和结束动作,两种状态数据都符合标准,认为这是一个标准的动作。笔者特意设计开始和结束使用两种不同的颜色加以区分,开始和结束动作的状态提示。
2.4 实时姿态数据可视化
使用者将从视频中获得的每一帧动作数据,存在一个数组里面,将数据赋值进度条控件,随着每一帧数据变化的不同,进度条的数据也发生变化,这样就有了数据动态变化的数据可视化效果。随着动作的不同,实时数据的变化体现在图形变化上,表现出动作的连续性。
2.5 视频图像的任意缩放功能
使用者通过操作界面拉动滑杆获取比例数据后,赋值给控制视频放大倍数的参数,从而实现视频图像的任意变大或是缩小。
3 未来研究方向
本系统实现最核心的AI辅助训练功能,未来工作方向在如何将收集来的数据进行进一步分析,为训练者提供更多有价值的指导,主要有以下几点。
(1)增加分析功能:训练过程中,将训练数据记录存储。比如规定时间内的标准动作的次数,统计正确率。
(2)增加纠正动作功能:从智能辅助训练到智能纠正动作过渡,能够通过数据指出哪个动作有问题,问题出在哪里,可以考虑语音播报提示。
(3)增加辅助教练:可以根据参考数据,自动产生示范动作的虚拟教练,在屏幕上做动作,起到示范作用。
(4)增加数据可视化:从更多维度来展示,训练动作与参考动作数据的可视化对比效果。
4 结语
本文较为深入地探讨了基于OpenCV、MediaPipe的运动姿态检测在体育辅助训练中的应用,通过设计和开发软件来整合辅助训练的功能,并给出了实现代码,详细阐述了主要功能实现的过程,展示采集数据和训练数据的过程,不同运动员做同一动作均可识别,提高运动者的动作辅助训练效果显著。对OpenCV、MediaPipe的运动姿态检测的研究方向,也进行了一定的讨论,今后会在更为广泛的体育运动或是其他与工作姿态相关的领域得到一定的应用。
参考文献
[1]朱文伟,李建英.OpenCV 4.5计算机视觉开发实战:基于Python[M].北京:清华大学出版社,2022.
[2]王万良.人工智能应用教程[M].北京:清华大学出版社,2023.
[3]張宇,温光照,米思娅,等.基于深度学习的二维人体姿态估计综述[J].软件学报,2022(11):4173-4191.
[4]张国平.深度学习方法在二维人体姿态估计的研究进展[J].计算机科学,2022(12):219-228.
[5]朝乐门.数据科学理论与实践[M].北京:清华大学出版社,2017.
[6]朝乐门.Python编程:从数据分析到数据科学[M].北京:电子工业出版社,2019.
(编辑 沈 强)
Application of AI detection of motion posture based on OpenCV+MediaPipe in sports training
Xie Peng
(Ningxia Vocational Technical College of Industry and Commerce, Yinchuan 750021, China)
Abstract: This article is based on the application of OpenCV in computer vision and MediaPipe in machine learning for human pose estimation. The author has developed Sports Motion AI Training System V1.0 to achieve the goal of assisting sports training by implementing custom demonstration actions. The method involves collecting angle data of various jointsposes during human motion using MediaPipes detection and tracking, creating a dataset of demonstration actions. The system compares the dataset of the trainees actions with the dataset of demonstration actions to determine if the actions are standardized. The system has been tested by athletes and has shown high accuracy in action recognition, resulting in good training effectiveness. The application of AI-based motion pose detection in sports training is effective and feasible.
Key words: OpenCV; MediaPipe; human posture estimation; physical training;