基金項目:2023年度寧夏工商職業(yè)技術(shù)學(xué)院校級科研項目;項目名稱:基于OpenCV+MediaPipe的運動姿態(tài)AI訓(xùn)練系統(tǒng)的設(shè)計與開發(fā);項目編號:NXGS2023ZR10。
作者簡介:謝鵬(1975— ),男,山西臨猗人,助教,碩士;研究方向:人工智能與大數(shù)據(jù)技術(shù)。
摘要:文章基于OpenCV在計算機視覺和MediaPipe在機器學(xué)習(xí)中人體姿態(tài)估計中的應(yīng)用,開發(fā)了體育運動AI訓(xùn)練系統(tǒng)V1.0,實現(xiàn)自定義示范動作,用以達(dá)到輔助體育訓(xùn)練的目的;實現(xiàn)方法為,通過采集MediaPipe檢測追蹤和捕獲在人體運動時姿態(tài)各個關(guān)節(jié)角度數(shù)據(jù),作為示范動作的數(shù)據(jù)集,將訓(xùn)練者動作數(shù)據(jù)集與示范動作數(shù)據(jù)集對比,判斷動作是否標(biāo)準(zhǔn);系統(tǒng)經(jīng)運動員測試使用,動作識別率較高,訓(xùn)練效果良好;運動姿態(tài)AI檢測在體育訓(xùn)練方面應(yīng)用有效可行。
關(guān)鍵詞:OpenCV;MediaPipe;人體姿態(tài)估計;體育訓(xùn)練
中圖分類號:TP391? 文獻標(biāo)志碼:A
1? 概述
體育訓(xùn)練通常要求運動員身體具備很好的四肢協(xié)調(diào)性,運動員很多情況下是重復(fù)某個動作的訓(xùn)練,訓(xùn)練的動作本身對身體姿態(tài)有一定的要求,包括身體四肢和軀干部分起始動作位置的相互夾角和結(jié)束動作位置的夾角?;谶@種實際需求,經(jīng)過綜合分析并考慮到技術(shù)實現(xiàn)的可行性,筆者選擇使用基于OpenCV計算機視覺庫[1],結(jié)合MediaPipe機器學(xué)習(xí)中Pose的姿態(tài)估計[2-4],以及PyQt5的GUI界面設(shè)計的技術(shù),綜合運用實現(xiàn)體育運動AI訓(xùn)練系統(tǒng)V1.0軟件的設(shè)計和開發(fā)。系統(tǒng)通過視頻獲取的實時動作姿態(tài)參數(shù)與參考動作參數(shù)對比,達(dá)到輔助訓(xùn)練的目的,經(jīng)過測試,使用情況良好,有一定的推廣價值。以下介紹OpenCV、MediaPipe和PyQt5的基本情況。
1.1? OpenCV——開源的計算機視覺庫
開源計算機視覺庫(Open Source Computer Vision Library,OpenCV)是一個基于Apache2.0許可(開源)發(fā)行的跨平臺計算機視覺和機器學(xué)習(xí)軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統(tǒng)上,其中包含數(shù)百種圖像處理和計算機視覺算法,已經(jīng)成為計算機視覺領(lǐng)域最有力的研究工具之一 。它輕量級而且高效,由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時提供了Python、Ruby、MATLAB等語言的接口,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法,使得開發(fā)者可以在不同的平臺下使用OpenCV計算機設(shè)計算法處理問題。應(yīng)用領(lǐng)域包括:人機互動、物體識別、圖像分割、人臉識別、動作識別、運動跟蹤、機器人、運動分析、機器視覺和結(jié)構(gòu)分析。
1.2? MediaPipe——開源的多媒體處理框架
MediaPipe 為直播和流媒體提供跨平臺、可定制的 ML 解決方案。MediaPipe的Pose解決方案中的人體姿態(tài)估計在量化的體育運動、手語識別和全身手勢控制等各種應(yīng)用中發(fā)揮著極為重要的作用。它可以構(gòu)成運動、健身、瑜伽和舞蹈應(yīng)用的基礎(chǔ),甚至還可以在增強現(xiàn)實中將計算機中數(shù)字的內(nèi)容和信息與在現(xiàn)實世界進行實時的交互,Pose是一種用于身體姿態(tài)實時跟蹤的ML解決方案,BlazePose通過從RGB視頻幀中獲得身體上的33個3D特征點(landmark)和背景分割掩碼,如圖1 所示。這些特征點會隨著動作的動態(tài)變化,實時跟蹤身體的位置,坐標(biāo)也實時變化。BlazePose的應(yīng)用之一是健身運動方面,主要在姿態(tài)分類和重復(fù)計數(shù),在 Colabs 的幫助下構(gòu)建自定義姿態(tài)分類器。常見健身的兩種練習(xí)是俯臥撐和深蹲,選擇了k-最近鄰算法(k-NN)作為分類器,為建立一個較為準(zhǔn)確的分類器,訓(xùn)練集需要收集約幾百個,適當(dāng)涵蓋不同的相機角度、環(huán)境條件、體型和運動變化的樣本(俯臥撐的“向上”和“向下”位置)。重復(fù)計數(shù),以俯臥撐的“向上”和“向下”終端狀態(tài)為例:會分別計算“向下”和“向上”姿態(tài)類的概率首次超過某個閾值時,認(rèn)為是“向上”和“向下”2個動作,并計為1次。
1.3? PyQt5——UI設(shè)計工具
PyQt5是基于Qt5的Python GUI(圖形用戶界面)框架,能夠利用Python語言所提供的便捷性和靈活性,在跨平臺的程序設(shè)計和開發(fā)過程中提供高效、可靠和易用的工具和資源。PyQt5可以在Windows、Mac OS X、Linux、Android等多個主流操作系統(tǒng)平臺上進行編程開發(fā),同時也支持多種編程語言,例如C++、Python、Java等。PyQt5具有友好易用的API和完整的類庫,提供了豐富的圖形、網(wǎng)絡(luò)、數(shù)據(jù)庫、多媒體等核心功能組件,同時也涵蓋了多種常用控件和界面元素,例如窗口、按鈕、文本框、列表框、菜單、工具欄、表格等等。PyQt5在 GUI編程方面使用已經(jīng)越來越普遍,被廣泛應(yīng)用于各種應(yīng)用程序的開發(fā)、測試和發(fā)布,具有豐富的社區(qū)支持和資料資源庫,為Python開發(fā)者提供了強有力的工具和框架。
2? 體育運動AI訓(xùn)練系統(tǒng)V1.0的設(shè)計與實現(xiàn)
系統(tǒng)開發(fā)IDE為PyCharm和QT designer,開發(fā)語言為Python,以及OpenCV、MediaPipe、PyQt5等第三方庫。系統(tǒng)的4大功能:自定義運動姿態(tài)、AI輔助訓(xùn)練、實時姿態(tài)數(shù)據(jù)可視化和視頻圖像的任意縮放[5]。
本系統(tǒng)可以將運動員自定義的示范動作(主要是四肢與身體的夾角,肘部、膝蓋和腳踝的夾角)的數(shù)據(jù)存儲起來,任何需要訓(xùn)練的時候可以選擇某個動作數(shù)據(jù),點擊開始訓(xùn)練,就可以參照示范動作進行訓(xùn)練,左上角的標(biāo)記,在開始做動作在示范動作的上下15°的范圍內(nèi)時候呈現(xiàn)一種顏色,動作介紹在示范的動作的上下15°的范圍內(nèi)呈現(xiàn)另外一種顏色。兩種顏色按順序變化,則表示動作正確,會有相應(yīng)的提示。通過反復(fù)地在起始位置做動作,顏色相繼變化,動作的范圍越來越接近參考值,意味著動作越來越接近示范動作,就是接近正確的動作。
實現(xiàn)該系統(tǒng)的主要方法為poseDetector類的findPose()、findPostion()和findAngle()方法,findPostion()可以獲得運動姿態(tài)的33個特征值,findAngle()輸入3個相鄰點的特征值,通過計算獲得中間點和兩邊點的夾角,也就是關(guān)節(jié)間的夾角。
獲取運動姿態(tài)特征值需要使用的是mediapipe.solutions.pose.Pose()方法中的findPosition()方法,獲取運動姿態(tài)的關(guān)節(jié)角度需要使用findAngle()方法,Pose()方法中傳遞的5個重要參數(shù),具體使用如下:
class poseDetector():
self.pose=self.mpPose.Pose(self.mode, self.upBody, 1,self.smooth,self.detectionCon, self.trackCon)
2.1? 實現(xiàn)方法
2.1.1? 獲取姿態(tài)——findPose()
findPose()方法實現(xiàn)獲得并標(biāo)記特征值的點。
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: #標(biāo)記出運動姿態(tài)圖像特征值
self.mpDraw.draw_landmarks(img, self.results.pose_landmarks,self.mpPose.POSE_CONNECTIONS)
return img? #返回標(biāo)記特征值的運動姿態(tài)圖像
2.1.2? 獲取特征值——findPosition()
使用findPosition方法,能夠?qū)⑦\動姿態(tài)的33個特征值,每個特征值包括序號、x坐標(biāo)和y坐標(biāo)3項,x和y坐標(biāo)根據(jù)圖像通過換算轉(zhuǎn)換為實際窗口上的坐標(biāo),在每個點上畫出圓形進行標(biāo)注。
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? 獲取關(guān)節(jié)角度——findAngle()
findAngle()獲得以p2為頂點的以p1p2、p2p3為邊的夾角,也是姿態(tài)關(guān)節(jié)的夾角,筆者就是通過與參考夾角范圍對比,來判斷某個動作是否符合要求的。
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? 自定義運動姿態(tài)
以乒乓球正手攻球動作為例,如圖2所示,示范者先做好開始動作后由操作人員點擊“開始動作”按鈕,記錄開始動作的四肢動作夾角值,然后再做“結(jié)束動作”并點擊結(jié)束按鈕。這兩步操作之后,系統(tǒng)會分別記錄動作開始和結(jié)束數(shù)據(jù),點擊確定“記錄按鈕”,會在excel表中新增加一個工作簿。并且操作人員可以自定義命名動作的名稱,如果名稱重復(fù),則需要重新錄入。然后確定存入excel表中新建的工作表,并可以通過選擇下拉列表選擇當(dāng)前的數(shù)據(jù),便可以在實時顯示界面上顯示剛剛記錄的數(shù)據(jù)集,如果要開始訓(xùn)練,點擊開始訓(xùn)練按鈕進行訓(xùn)練。
2.3? AI輔助訓(xùn)練
當(dāng)運動員選擇了要訓(xùn)練的參考動作數(shù)據(jù)集之后[6],就可以開始訓(xùn)練,其原理為通過視頻抓取每一幀的姿態(tài)動作與系統(tǒng)參考動作數(shù)據(jù)進行對比,動作范圍可以自定義,本系統(tǒng)默認(rèn)是15°的范圍,比如:開始動作參考數(shù)據(jù)里的連接前臂和上臂的肘關(guān)節(jié)夾角度數(shù)為120°,那么參考標(biāo)準(zhǔn)度數(shù)為120°,訓(xùn)練者的動作可以在105°~135°,如此則認(rèn)為符合標(biāo)準(zhǔn)的開始動作,結(jié)束動作情況一樣。比如收小臂之后,參考數(shù)據(jù)是80°,訓(xùn)練者的動作在65°~95°,筆者認(rèn)為是符合標(biāo)準(zhǔn)的結(jié)束動作,如圖3所示。標(biāo)準(zhǔn)的開始和結(jié)束動作,兩種狀態(tài)數(shù)據(jù)都符合標(biāo)準(zhǔn),認(rèn)為這是一個標(biāo)準(zhǔn)的動作。筆者特意設(shè)計開始和結(jié)束使用兩種不同的顏色加以區(qū)分,開始和結(jié)束動作的狀態(tài)提示。
2.4? 實時姿態(tài)數(shù)據(jù)可視化
使用者將從視頻中獲得的每一幀動作數(shù)據(jù),存在一個數(shù)組里面,將數(shù)據(jù)賦值進度條控件,隨著每一幀數(shù)據(jù)變化的不同,進度條的數(shù)據(jù)也發(fā)生變化,這樣就有了數(shù)據(jù)動態(tài)變化的數(shù)據(jù)可視化效果。隨著動作的不同,實時數(shù)據(jù)的變化體現(xiàn)在圖形變化上,表現(xiàn)出動作的連續(xù)性。
2.5? 視頻圖像的任意縮放功能
使用者通過操作界面拉動滑桿獲取比例數(shù)據(jù)后,賦值給控制視頻放大倍數(shù)的參數(shù),從而實現(xiàn)視頻圖像的任意變大或是縮小。
3? 未來研究方向
本系統(tǒng)實現(xiàn)最核心的AI輔助訓(xùn)練功能,未來工作方向在如何將收集來的數(shù)據(jù)進行進一步分析,為訓(xùn)練者提供更多有價值的指導(dǎo),主要有以下幾點。
(1)增加分析功能:訓(xùn)練過程中,將訓(xùn)練數(shù)據(jù)記錄存儲。比如規(guī)定時間內(nèi)的標(biāo)準(zhǔn)動作的次數(shù),統(tǒng)計正確率。
(2)增加糾正動作功能:從智能輔助訓(xùn)練到智能糾正動作過渡,能夠通過數(shù)據(jù)指出哪個動作有問題,問題出在哪里,可以考慮語音播報提示。
(3)增加輔助教練:可以根據(jù)參考數(shù)據(jù),自動產(chǎn)生示范動作的虛擬教練,在屏幕上做動作,起到示范作用。
(4)增加數(shù)據(jù)可視化:從更多維度來展示,訓(xùn)練動作與參考動作數(shù)據(jù)的可視化對比效果。
4? 結(jié)語
本文較為深入地探討了基于OpenCV、MediaPipe的運動姿態(tài)檢測在體育輔助訓(xùn)練中的應(yīng)用,通過設(shè)計和開發(fā)軟件來整合輔助訓(xùn)練的功能,并給出了實現(xiàn)代碼,詳細(xì)闡述了主要功能實現(xiàn)的過程,展示采集數(shù)據(jù)和訓(xùn)練數(shù)據(jù)的過程,不同運動員做同一動作均可識別,提高運動者的動作輔助訓(xùn)練效果顯著。對OpenCV、MediaPipe的運動姿態(tài)檢測的研究方向,也進行了一定的討論,今后會在更為廣泛的體育運動或是其他與工作姿態(tài)相關(guān)的領(lǐng)域得到一定的應(yīng)用。
參考文獻
[1]朱文偉,李建英.OpenCV 4.5計算機視覺開發(fā)實戰(zhàn):基于Python[M].北京:清華大學(xué)出版社,2022.
[2]王萬良.人工智能應(yīng)用教程[M].北京:清華大學(xué)出版社,2023.
[3]張宇,溫光照,米思婭,等.基于深度學(xué)習(xí)的二維人體姿態(tài)估計綜述[J].軟件學(xué)報,2022(11):4173-4191.
[4]張國平.深度學(xué)習(xí)方法在二維人體姿態(tài)估計的研究進展[J].計算機科學(xué),2022(12):219-228.
[5]朝樂門.數(shù)據(jù)科學(xué)理論與實踐[M].北京:清華大學(xué)出版社,2017.
[6]朝樂門.Python編程:從數(shù)據(jù)分析到數(shù)據(jù)科學(xué)[M].北京:電子工業(yè)出版社,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;