


基金項目: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;