本發(fā)明涉及一種基于深度圖像的非接觸式體能測試系統(tǒng),是一種用于無穿戴的體感交互體能測試系統(tǒng),屬于計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域。
背景技術(shù):
隨著生活品質(zhì)的提高,人們越來越注重對身體素質(zhì)的改善練習(xí)。其中,力量訓(xùn)練類運(yùn)動對于人體的減脂塑形有著極其重要的作用。目前,力量訓(xùn)練絕大部分是以穿戴設(shè)備為基礎(chǔ)進(jìn)行測量。這類器材中包括:電磁感應(yīng)類型、gps測量類型等。電磁感應(yīng)器材是在測試者身上穿戴接收或發(fā)射裝置,利用電腦等測量儀器發(fā)射或接收信號并通過信號的有無來進(jìn)行計(jì)數(shù)。此類器材存在信號易受干擾、發(fā)射功率受限、測量范圍過大不精確等弊端。gps測量類型是以全球定位系統(tǒng)為基礎(chǔ),通過人體位移軌跡記錄運(yùn)動軌跡,只適合長跑類項(xiàng)目的低精確度測量,無法測量原地運(yùn)動以及需要精確值的項(xiàng)目。
隨著體感交互技術(shù)與計(jì)算機(jī)視覺技術(shù)的發(fā)展,含有深度信息的圖像能夠在極大的程度上區(qū)分所監(jiān)測區(qū)域的前景與背景信息,從而提高了身份識別、體感交互的精度。硬件方面,由于kinect體感交互設(shè)備能夠提供深度圖像數(shù)據(jù),就為通過兩者信息融合的方法來檢測運(yùn)動人體提供了前提條件。軟件方面,opencv等視覺信息處理算法庫也為圖像的處理提供了極大的方便。
目前國內(nèi)對于力量訓(xùn)練類非接觸式系統(tǒng)研究較少,已有的一些監(jiān)測系統(tǒng)通常會對被測者所處的環(huán)境有所限制,如需要在顏色單一的環(huán)境中穿著特定顏色的衣服才能進(jìn)行檢測。這些限制使得體能檢測不能隨時隨地為普通人所服務(wù)。kinect體感交互設(shè)備能夠通過紅外攝像頭獲取被測圖像中的深度信息,使得體能檢測擺脫了已有方法對環(huán)境的限制。目前,基于kinect體感交互設(shè)備的體能測試系統(tǒng),通常直接使用kinect體感交互設(shè)備自帶的sdk對人體進(jìn)行檢測與識別,對站姿運(yùn)動檢測效果較好,而無法識別臥姿等非站立姿勢。
本發(fā)明可提供非接觸式體能訓(xùn)練的自動監(jiān)測,可為進(jìn)行體能測試的團(tuán)體或個人提供更科學(xué)、精確的測試數(shù)據(jù),減少了人眼主觀判定帶來的誤差,節(jié)省了人力資源,為體育訓(xùn)練提供了新的測量手段,為全民健身運(yùn)動在科學(xué)指導(dǎo)與運(yùn)動檢測方面提供了新思路。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明技術(shù)解決問題:克服現(xiàn)有技術(shù)的不足,提供一種基于深度圖像的非接觸式體能測試系統(tǒng)及測試方法,能夠讓用戶通過不在身上捆綁各種儀器而進(jìn)行的體能測試,提高測試的準(zhǔn)確度。
本發(fā)明技術(shù)解決方案:一種基于深度圖像的非接觸式體能測試系統(tǒng),包括:體能測試控制模塊、仰臥起坐測試模塊、俯臥撐測試模塊、語音識別模塊和測試反饋模塊;
體能測試控制模塊:啟動kinect體感交互設(shè)備的紅外攝像頭并通過kinect體感交互設(shè)備自帶sdk捕捉現(xiàn)實(shí)場景中的深度圖像;根據(jù)設(shè)定的閾值將獲取到的深度圖像進(jìn)行二值化處理,得到黑白二值圖像;調(diào)用opencv自帶輪廓檢測算子提取黑白二值圖像的邊緣輪廓,獲得被測人體輪廓;將被測人體輪廓區(qū)域儲存起來作為仰臥起坐測試模塊、俯臥撐測試模塊判定區(qū)域;當(dāng)體能測試控制模塊中選擇待測試項(xiàng)目為仰臥起坐時,調(diào)用仰臥起坐測試模塊;當(dāng)體能測試模塊中選測待測試項(xiàng)目為跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐時,調(diào)用俯臥撐測試模塊;同時開啟語音識別模塊,等待語音指令;
仰臥起坐測試模塊:當(dāng)體能測試控制模塊中選擇待測試的項(xiàng)目為仰臥起坐時,仰臥起坐測試模塊啟動;將有限狀態(tài)機(jī)作為判定仰臥起坐的計(jì)算模型,定義仰臥起坐中被測人體的狀態(tài)為有限狀態(tài),將被測人體在完成仰臥起坐過程中可能出現(xiàn)的狀態(tài)定義為四種:“準(zhǔn)備狀態(tài)”、“中間狀態(tài)”、“完成狀態(tài)”以及“其他狀態(tài)”,其中“準(zhǔn)備狀態(tài)”為被測人體屈膝仰臥于地面,雙手扶于耳部;“中間狀態(tài)”為被測人體完成一個仰臥起坐動作時,上半身從仰臥到坐起的前屈過程;“完成狀態(tài)”為被測人體完成一個仰臥起坐動作時,前屈過程中雙肘碰及膝蓋瞬間;“其他狀態(tài)”為以上“準(zhǔn)備狀態(tài)”、“中間狀態(tài)”、“完成狀態(tài)”三種狀態(tài)以外的所有其他非仰臥起坐過程中出現(xiàn)的干擾動作,并且定義一個完整仰臥起坐動作的狀態(tài)序列為一個連續(xù)且有序的狀態(tài)轉(zhuǎn)換過程:“準(zhǔn)備狀態(tài)”至“中間狀態(tài)”再至“完成狀態(tài)”,期間不出現(xiàn)“其他狀態(tài)”;獲取人體輪廓凹點(diǎn)和凸點(diǎn),凹點(diǎn)為人體上半身與大腿之間的夾角的頂點(diǎn),凸點(diǎn)為人體頭頂點(diǎn);計(jì)算凹點(diǎn)和凸點(diǎn)之間連線與水平方向的夾角,也稱為起身角度;當(dāng)起身角度小于預(yù)設(shè)閾值時,認(rèn)為被測人體處于“準(zhǔn)備狀態(tài)”,即屈膝平躺姿勢;當(dāng)被測人體已處于“準(zhǔn)備狀態(tài)”時,循環(huán)檢測被測人體輪廓的凸包和凸缺陷狀態(tài),以判定被測人體是否處于“中間狀態(tài)”或“完成狀態(tài)”,所述凸缺陷是指輪廓與凸包之間的部分;當(dāng)狀態(tài)轉(zhuǎn)換完成了一個完整的狀態(tài)轉(zhuǎn)移序列時,認(rèn)為被測人體完成了一個完整的仰臥起坐,仰臥起坐測試模塊計(jì)數(shù)加一;當(dāng)仰臥起坐測試模塊收到語音識別模塊的傳來的啟動計(jì)數(shù)指令后,仰臥起坐測試模塊開始檢測被測人體所處的狀態(tài),并開始計(jì)數(shù);當(dāng)仰臥起坐測試模塊收到語音識別模塊傳來的結(jié)束計(jì)數(shù)指令后,仰臥起坐測試模塊結(jié)束計(jì)數(shù),并將計(jì)數(shù)信息傳遞給測試反饋模塊;
俯臥撐測試模塊:當(dāng)體能測試控制模塊中選擇待測試的項(xiàng)目為跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐時,俯臥撐測試模塊被調(diào)用;將有限狀態(tài)機(jī)作為判定俯臥撐的計(jì)算模型,定義俯臥撐中被測人體的狀態(tài)為有限狀態(tài);將被測人體在完成跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐中可能出現(xiàn)的狀態(tài)定義為四種:“準(zhǔn)備狀態(tài)”、“中間狀態(tài)”、“完成狀態(tài)”以及“其他狀態(tài)”,其中,“準(zhǔn)備狀態(tài)”為雙臂位于胸前,兩手支撐地面,兩手間距較肩膀稍寬,肘關(guān)節(jié)伸直,軀干成直線,兩腿并攏,跪姿俯臥撐以雙膝著地支撐,標(biāo)準(zhǔn)俯臥撐以腳趾點(diǎn)地支撐;“中間狀態(tài)”為用戶完成一個俯臥撐動作時,肩關(guān)節(jié)伸肘關(guān)節(jié)屈,軀干逐漸接近地面,以及還原過程中肩關(guān)節(jié)屈肘關(guān)節(jié)伸軀干遠(yuǎn)離地面的過程;“完成狀態(tài)”為用戶完成一個俯臥撐動作,還原到初始準(zhǔn)備狀態(tài)的瞬間;“其他狀態(tài)”為以上“準(zhǔn)備狀態(tài)”、“中間狀態(tài)”、“完成狀態(tài)”三種狀態(tài)以外的所有其他非俯臥撐過程中出現(xiàn)的干擾動作;并且定義一個完整俯臥撐動作的狀態(tài)序列為一個連續(xù)且有序的狀態(tài)轉(zhuǎn)換過程:“準(zhǔn)備狀態(tài)”至“中間狀態(tài)”再至“完成狀態(tài)”,期間不出現(xiàn)“其他狀態(tài)”;根據(jù)體能測試控制模塊中所獲取的被測人體輪廓構(gòu)建人體輪廓外接矩形,不同的矩形長寬比匹配不同的狀態(tài),計(jì)算當(dāng)前被測人體外接矩陣的長寬比,將此比值與預(yù)先設(shè)定的閾值進(jìn)行匹配;當(dāng)狀態(tài)轉(zhuǎn)換完成了一個完整的狀態(tài)轉(zhuǎn)移序列時,認(rèn)為被測人體完成了一個完整的跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐,俯臥撐測試模塊計(jì)數(shù)加一;當(dāng)俯臥撐測試模塊收到語音識別模塊的傳來的啟動計(jì)數(shù)指令后,俯臥撐測試模塊檢測被測人體所處的狀態(tài),并開始計(jì)數(shù);當(dāng)俯臥撐測試模塊收到語音識別模塊的傳來的結(jié)束計(jì)數(shù)指令后,俯臥撐測試模塊結(jié)束計(jì)數(shù),并將計(jì)數(shù)信息傳遞給測試反饋模塊;
語音識別模塊:用戶第一次使用時,會提示用戶記錄下開始和結(jié)束的指令語音信息,用戶發(fā)出語音指令后,利用kinect體感交互設(shè)備的sdk語音包進(jìn)行錄音,并生成該錄音音頻的波形圖,從而對語音信號進(jìn)行預(yù)處理和特征提取,將提取到的音頻信息存入語音識別模塊中,實(shí)現(xiàn)對用戶語音特征的學(xué)習(xí),建立用戶命令模型,作為該用戶語音指令待匹配模板;當(dāng)用戶再次使用并發(fā)出指令時,首先采集用戶的指令語音信號并提取語音信號中的相應(yīng)特征,然后在之前存放的語音指令中尋找待匹配模版,如果找到,則認(rèn)為匹配成功;如果用戶發(fā)出語音指令與語音識別模塊中的開始指令相匹配,則向仰臥起坐測試模塊或俯臥撐測試模塊傳遞啟動計(jì)數(shù)指令,開始計(jì)數(shù)同時調(diào)用測試反饋模塊開始計(jì)時;如果用戶發(fā)出指令與語音識別模塊中的結(jié)束指令相匹配,則向仰臥起坐測試模塊或俯臥撐測試模塊傳遞結(jié)束計(jì)數(shù)指令同時測試反饋模塊停止計(jì)時;
測試反饋模塊:接受到語音識別模塊傳遞的啟動計(jì)數(shù)指令后,開始計(jì)時;測試反饋模塊收到語音識別模塊傳遞的結(jié)束計(jì)數(shù)指令后,測試反饋模塊停止計(jì)時,讀取仰臥起坐測試或俯臥撐測試模塊傳遞過來的計(jì)數(shù)信息,同時計(jì)算用戶發(fā)出開始指令到發(fā)出結(jié)束指令之間的時間間隔作為用戶該次運(yùn)動的耗時,再根據(jù)設(shè)定的計(jì)算公式,以圖形化界面向用戶反饋該次測試完成動作個數(shù),耗時,耗能以及體能測試分?jǐn)?shù)。
所述仰臥起坐測試模塊中,設(shè)定起身角度預(yù)設(shè)閾值為20。
所述仰臥起坐測試模塊中,當(dāng)被測人體已處于“準(zhǔn)備狀態(tài)”后,根據(jù)被測人體輪廓獲得當(dāng)前幀凸包,檢測凸包中所有的凸缺陷;當(dāng)單個凸缺陷的距離特征量大于設(shè)定閾值5.0時,將該凸缺陷視為待檢測凸缺陷區(qū)域d。
所述仰臥起坐測試模塊中,對凸缺陷狀態(tài)的檢測方法為,計(jì)算待檢測凸缺陷區(qū)域d中,計(jì)算缺陷結(jié)束點(diǎn)與起始點(diǎn)連線的斜率,當(dāng)斜率處于20-70之間時,當(dāng)前狀態(tài)置為“中間狀態(tài)”,并匹配當(dāng)前幀中的凸缺陷與上一幀中的凸缺陷集合,當(dāng)兩個凸缺陷匹配,并且該凸缺陷的深度特征小于之前深度特征三分之一時,當(dāng)前狀態(tài)置為“完成狀態(tài)”,若無匹配或凸缺陷深度特征差值均大于三分之一時,狀態(tài)置為“其他狀態(tài)”。
所述俯臥撐測試模塊中,閾值根據(jù)人體俯臥時所構(gòu)成的外接矩形的寬高比通過實(shí)驗(yàn)測試數(shù)據(jù)經(jīng)驗(yàn)設(shè)定給出;所述跪姿俯臥撐狀態(tài)下人體外接矩形寬高比大于1.2,標(biāo)準(zhǔn)俯臥撐狀態(tài)下人體外接矩形寬高比大于1.5,認(rèn)為被測人體俯臥于地面。
所述俯臥撐測試模塊中,當(dāng)被測人體輪廓外接矩形寬高比在設(shè)定的閾值1.9-2.5時,設(shè)置當(dāng)前狀態(tài)為“準(zhǔn)備狀態(tài)”,在2.5-3.31范圍時,設(shè)置當(dāng)前狀態(tài)為“中間狀態(tài)”;當(dāng)寬高比大于3.31時,設(shè)置當(dāng)前狀態(tài)為“完成狀態(tài)”,當(dāng)寬高比不處于以上任意區(qū)間時,設(shè)置當(dāng)前狀態(tài)為“其他狀態(tài)”。
所述語音識別模塊實(shí)現(xiàn)如下:
(1)第一次使用時,會提示用戶記錄下開始和結(jié)束的指令語音信息,在此使用時,根據(jù)體能測試控制模塊控制,用戶分別發(fā)出“開始”和“結(jié)束”語音指令后,利用kinect體感交互設(shè)備的sdk語音包進(jìn)行錄音,并生成該錄音音頻的波形圖,并進(jìn)行以下處理:
(1.1)使用短時能量參數(shù)來進(jìn)行語音端點(diǎn)檢測,定義n時刻語音信號的短時平均能量為:
n為分幀語音窗長,m為幀序號。
求出所有幀中最大短時能量en_max,將0.03×en_max作為端點(diǎn)檢測的閾值,同時,將0.01×en_max認(rèn)為環(huán)境噪聲作為在命令段內(nèi)不計(jì)入運(yùn)算的幀的閾值,這樣將短時能量大于端點(diǎn)閾值的數(shù)據(jù)幀進(jìn)行編號后計(jì)算出每幀的平均幅差函數(shù);
(1.2)將計(jì)算得到的語音指令信號的平均幅差特征作為語音特征參數(shù)存儲于模板中,進(jìn)而建立用戶命令模型,作為該用戶語音指令待匹配模板;
(2)用戶在體能測試控制模塊中選擇了需要測試的項(xiàng)目,包括仰臥起坐、跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐后,語音識別模塊進(jìn)入等待狀態(tài),調(diào)用kinect體感交互設(shè)備的sdk打開內(nèi)置麥克風(fēng)采集語音信號;
(3)對用戶發(fā)出的語音信號提取完成后,將語音信號的特征參數(shù)與語音識別模塊中的待匹配模板中的兩個指令進(jìn)行匹配,若與開始指令匹配,則仰臥起坐測試模塊或俯臥撐測試模塊開始檢測計(jì)數(shù)同時測試反饋模塊開始計(jì)時,若與結(jié)束指令匹配,則停止計(jì)數(shù)同時測試反饋模塊結(jié)束計(jì)時,并將計(jì)數(shù)數(shù)據(jù)傳遞給運(yùn)動測試反饋模塊;若與開始指令和結(jié)束指令均不匹配,則不執(zhí)行任何操作。
所述測試反饋模塊中:
(1)對于仰臥起坐運(yùn)動檢測,運(yùn)動所消耗的能量=10*(m/60)*動作個數(shù),其中m為被測人體體重,單位kg,計(jì)算運(yùn)動強(qiáng)度系數(shù)=完成仰臥起坐個數(shù)/耗時,單位為秒,根據(jù)運(yùn)動強(qiáng)度系數(shù)將被測人體的運(yùn)動狀態(tài)進(jìn)行分級,以幫助客觀評估本次測試中的體能情況,以便后續(xù)進(jìn)行針對性的訓(xùn)練,強(qiáng)度系數(shù)大于1為s級,0.7-1為a級,0.5-0.7為b級,0.3-0.5為c級,0.3以下為d級;
(2)對于俯臥撐運(yùn)動檢測,標(biāo)準(zhǔn)俯臥撐所消耗的能量=g*m*h,其中g(shù)為10n/kg,m為被測人體體重,單位kg,h為被測人體前臂的長度,單位為m,跪姿俯臥撐所消耗的能量=(2/3)*g*m*h,計(jì)算運(yùn)動強(qiáng)度系數(shù)=完成俯臥撐個數(shù)/耗時,單位為秒;根據(jù)運(yùn)動強(qiáng)度系數(shù)將該次被測人體的運(yùn)動狀態(tài)進(jìn)行分級,以幫助客觀評估本次測試中的體能情況,以便后續(xù)進(jìn)行針對性的訓(xùn)練,強(qiáng)度系數(shù)大于0.8為s級,0.7-0.8為a級,0.4-0.7為b級,0.2-0.4為c級,0.2以下為d級。
一種基于深度圖像的非接觸式體能測試方法,所述實(shí)現(xiàn)步驟如下:
(1)當(dāng)用戶第一次使用時,引導(dǎo)用戶對指令聲音進(jìn)行提取錄入,用戶錄入指令包含兩種:開始指令和結(jié)束指令;利用kinect體感交互設(shè)備自帶sdk打開內(nèi)置麥克風(fēng)進(jìn)行錄音,生成wave文件,并生成其波形圖,從而對語音信號進(jìn)行預(yù)處理和特征提取,生成用戶指令模板;當(dāng)用戶再次使用系統(tǒng)時,會采集用戶指令語音信號并提取信號中的特征參數(shù),與預(yù)存用戶指令模板;
(2)用戶在運(yùn)動測試控制模塊中選擇需要進(jìn)行測試的動作后,初始化攝像機(jī)參數(shù),啟動kinect體感交互設(shè)備的紅外攝像頭捕捉現(xiàn)實(shí)場景中的深度信息,對深度圖像進(jìn)行二值化處理,轉(zhuǎn)化為黑白二值圖像;根據(jù)黑白二值圖像,獲取被測人體輪廓;同時,kinect體感交互設(shè)備內(nèi)置麥克風(fēng)打開等待獲取語音信號;
(3)被測人體位于kinect體感交互設(shè)備前1-2米處,做好仰臥起坐或俯臥撐測試準(zhǔn)備,并發(fā)出語音指令,當(dāng)獲取到的語音信號與開始指令匹配時,根據(jù)步驟(2)中選擇的項(xiàng)目,進(jìn)行仰臥起坐或俯臥撐計(jì)數(shù),同時進(jìn)行測試反饋計(jì)時;在仰臥起坐測試中對人體輪廓凸包進(jìn)行檢測,在俯臥撐測試中對人體輪廓外接矩形進(jìn)行長寬比判定,循環(huán)檢測每一幀中被測人體所處的狀態(tài),當(dāng)被測人體完成一次完整且有序的有限狀態(tài)轉(zhuǎn)換序列“準(zhǔn)備狀態(tài)”至“中間狀態(tài)”再至“完成狀態(tài)”時,被測人體動作計(jì)數(shù)加一;
(4)當(dāng)用戶希望結(jié)束當(dāng)前運(yùn)動時,發(fā)出結(jié)束語音指令,獲取語音信號并與所存儲的匹配模板進(jìn)行匹配,當(dāng)獲取到的語音信號與結(jié)束指令匹配時,則結(jié)束計(jì)數(shù);
(5)測試反饋過程停止計(jì)時后,從仰臥起坐測試或俯臥撐測試過程中讀取計(jì)數(shù)信息,并計(jì)算用戶發(fā)出開始指令和結(jié)束指令的時間間隔作為完成該次測試所消耗的時間,以圖形化界面展示該次測試過程中完成動作個數(shù),消耗的時間,運(yùn)動過程中所消耗的能量以及該被測人體運(yùn)動能力強(qiáng)度評價。
本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點(diǎn)在于:
(1)用戶無需穿戴任何儀器即可獲得體能訓(xùn)練的相關(guān)數(shù)據(jù),減少了穿戴儀器對用戶體能訓(xùn)練帶來的干擾;基于圖像的處理方式可獲取用戶信息更為全面和豐富,為進(jìn)一步的挖掘提供了更好的數(shù)據(jù)基礎(chǔ)。
(2)相較于現(xiàn)有的非穿戴式體能測試系統(tǒng)對于環(huán)境背景的限制,本發(fā)明通過使用kinect體感交互設(shè)備對于深度圖像進(jìn)行判讀,能夠在極大程度上減少訓(xùn)練過程中對于環(huán)境的依賴。
(3)通過使用有限狀態(tài)機(jī)算法模型,運(yùn)動檢測過程中對于運(yùn)動數(shù)據(jù)的測量準(zhǔn)確,對于所測試動作以外的其他干擾動作具有較好的容錯性。
(4)由于該系統(tǒng)提供了體能測試控制與測試反饋圖形化界面,一方面把平臺的可維護(hù)性和可移植性提高了;另外一方面為產(chǎn)品的批量生產(chǎn)提供了便利。
附圖說明
圖1為本發(fā)明系統(tǒng)的結(jié)構(gòu)組成框圖;
圖2為本發(fā)明中的有限狀態(tài)機(jī)狀態(tài)轉(zhuǎn)換示意圖。
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)說明
如圖1所示,本發(fā)明基于深度圖像的非接觸式體能測試系統(tǒng)由體能測試控制模塊、仰臥起坐測試模塊、俯臥撐測試模塊、語音識別模塊和測試反饋模塊構(gòu)成。
整個實(shí)現(xiàn)過程如下:
(1)當(dāng)用戶第一次使用時,引導(dǎo)用戶對指令聲音進(jìn)行提取錄入,用戶錄入指令包含兩種:開始指令和結(jié)束指令;利用kinect體感交互設(shè)備自帶sdk打開內(nèi)置麥克風(fēng)進(jìn)行錄音,生成wave文件,并生成其波形圖,從而對語音信號進(jìn)行預(yù)處理和特征提取,生成用戶指令模板;當(dāng)用戶再次使用系統(tǒng)時,會采集用戶指令語音信號并提取信號中的特征參數(shù),與預(yù)存用戶指令模板;
(2)用戶在運(yùn)動測試控制模塊中選擇需要進(jìn)行測試的動作后,初始化攝像機(jī)參數(shù),啟動kinect體感交互設(shè)備的紅外攝像頭捕捉現(xiàn)實(shí)場景中的深度信息,對深度圖像進(jìn)行二值化處理,轉(zhuǎn)化為黑白二值圖像;根據(jù)黑白二值圖像,獲取被測人體輪廓;同時,kinect體感交互設(shè)備內(nèi)置麥克風(fēng)打開等待獲取語音信號;
(3)被測人體位于kinect體感交互設(shè)備前1-2米處,做好仰臥起坐或俯臥撐測試準(zhǔn)備,并發(fā)出語音指令,當(dāng)獲取到的語音信號與開始指令匹配時,根據(jù)步驟(2)中選擇的項(xiàng)目,進(jìn)行仰臥起坐或俯臥撐計(jì)數(shù),同時進(jìn)行測試反饋計(jì)時;在仰臥起坐測試中對人體輪廓凸包進(jìn)行檢測,在俯臥撐測試中對人體輪廓外接矩形進(jìn)行長寬比判定,循環(huán)檢測每一幀中被測人體所處的狀態(tài),當(dāng)被測人體完成一次完整且有序的有限狀態(tài)轉(zhuǎn)換序列“準(zhǔn)備狀態(tài)”至“中間狀態(tài)”再至“完成狀態(tài)”時,被測人體動作計(jì)數(shù)加一;
(4)當(dāng)用戶希望結(jié)束當(dāng)前運(yùn)動時,發(fā)出結(jié)束語音指令,獲取語音信號并與所存儲的匹配模板進(jìn)行匹配,當(dāng)獲取到的語音信號與結(jié)束指令匹配時,則結(jié)束計(jì)數(shù);
(5)測試反饋過程停止計(jì)時后,從仰臥起坐測試或俯臥撐測試過程中讀取計(jì)數(shù)信息,并計(jì)算用戶發(fā)出開始指令和結(jié)束指令的時間間隔作為完成該次測試所消耗的時間,以圖形化界面展示該次測試過程中完成動作個數(shù),消耗的時間,運(yùn)動過程中所消耗的能量以及該被測人體運(yùn)動能力強(qiáng)度評價。
各模塊的具體實(shí)現(xiàn)過程如下:
1.體能測試控制模塊
(1)程序打開kinect體感交互設(shè)備,并將其深度圖像流儲存在opencv的庫包含的一個數(shù)據(jù)結(jié)構(gòu)mat中,通過顯示圖像函數(shù)(imshow)生成一個二值圖像流。
(2)當(dāng)kinect體感交互設(shè)備的sdk檢測到被測人體時,檢測二值圖像流中的被測人體輪廓。
(3)將被測人體輪廓區(qū)域儲存起來作為仰臥起坐測試模塊、俯臥撐測試模塊判定區(qū)域。
(4)當(dāng)體能測試控制模塊中選擇待測試項(xiàng)目為仰臥起坐時,調(diào)用仰臥起坐測試模塊。
(5)當(dāng)體能測試模塊中選擇待測試項(xiàng)目為跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐時,調(diào)用俯臥撐測試模塊。
(6)開啟語音識別模塊,等待語音指令。
2.仰臥起坐測試模塊
(1)根據(jù)體能測試控制模塊中獲取到的被測圖像輪廓,確定被測人體的凹點(diǎn)和被測人體凸點(diǎn)位置。計(jì)算當(dāng)凹點(diǎn)與凸點(diǎn)間連線與水平軸正方向的夾角小于設(shè)定閾值(20)時,認(rèn)定被測人體上身處于“準(zhǔn)備狀態(tài)”,即屈膝平躺姿勢。
(2)循環(huán)對kinect捕獲到的視頻幀進(jìn)行檢測,調(diào)用opencv函數(shù)檢測凸包中的凸缺陷,并用cvpoint結(jié)構(gòu)體記錄這些凸缺陷的特征量(起始點(diǎn),結(jié)束點(diǎn),距離和最遠(yuǎn)點(diǎn))根據(jù)被測圖像的輪廓獲得當(dāng)前幀凸包,檢測凸包中所有的凸缺陷。當(dāng)單個凸缺陷的距離特征量大于設(shè)定閾值5.0時,將該凸缺視為待檢測凸缺陷區(qū)域d。
(3)計(jì)算待檢測凸缺陷區(qū)域d中,計(jì)算缺陷結(jié)束點(diǎn)與起始點(diǎn)連線的斜率。當(dāng)斜率處于[20-70]之間時,當(dāng)前狀態(tài)置為“中間狀態(tài)”并匹配當(dāng)前幀中的凸缺陷與上一幀中的凸缺陷集合。當(dāng)兩個凸缺陷匹配,并且該凸缺陷的深度特征小于之前深度特征三分之一時,當(dāng)前狀態(tài)置為“完成狀態(tài)”。若無匹配或凸缺陷深度特征差值均大于三分之一時,狀態(tài)置為“其他狀態(tài)”。
(4)狀態(tài)轉(zhuǎn)移條件如圖2所示:q0為起始狀態(tài),q3狀態(tài)出現(xiàn)視為一次完整的仰臥起坐動作,計(jì)數(shù)加1。當(dāng)使用者動作滿足該動作“準(zhǔn)備狀態(tài)”時,狀態(tài)置為q1;當(dāng)使用者的動作處于“中間狀態(tài)”時,狀態(tài)置為q2;當(dāng)使用者動作處于“完成狀態(tài)”時,狀態(tài)置為q3,計(jì)數(shù)+1;若使用者完成后保持狀態(tài),狀態(tài)置為q4,直到被測人體回到起始準(zhǔn)備狀態(tài)時狀態(tài)置為q1。若被測人體中途的動作使圖像不滿足以上4中判斷,狀態(tài)置為q0,處于“其他狀態(tài)”,直到被測人體達(dá)成“準(zhǔn)備狀態(tài)”,狀態(tài)置為q1。如果被測人體直接從“準(zhǔn)備狀態(tài)”變?yōu)椤巴瓿蔂顟B(tài)”,狀態(tài)置為q3,但是計(jì)數(shù)不會增加。
3.俯臥撐測試模塊
(1)根據(jù)模塊1中獲取到的被測人體輪廓,構(gòu)建被測人體外接矩形。默認(rèn)當(dāng)前狀態(tài)為“其他狀態(tài)”。計(jì)算矩形的寬度與高度的比值,若大于預(yù)設(shè)閾值(跪姿俯臥撐為1.2,標(biāo)準(zhǔn)俯臥撐為1.5),則認(rèn)為被測人體處于俯臥狀態(tài)。
(2)在確認(rèn)俯臥狀態(tài)后,進(jìn)一步判斷外接矩形的寬高比,當(dāng)其落與閾值范圍[1.9-2.5]之間設(shè)置當(dāng)前狀態(tài)值為“準(zhǔn)備狀態(tài)”;落與[2.5-3.31]區(qū)間時設(shè)置當(dāng)前狀態(tài)為“中間狀態(tài)”;當(dāng)寬高比大于3.31時,設(shè)置當(dāng)前狀態(tài)為“完成狀態(tài)”。當(dāng)寬高比不處于以上任意區(qū)間時,設(shè)置當(dāng)前狀態(tài)為“其他狀態(tài)”。
(3)狀態(tài)轉(zhuǎn)移條件如圖2所示:q0為起始狀態(tài),q3狀態(tài)出現(xiàn)視為一次完整的俯臥撐動作,計(jì)數(shù)加1。當(dāng)被測人體動作滿足該動作“準(zhǔn)備狀態(tài)”時,狀態(tài)置為q1;當(dāng)被測人體的動作處于“中間狀態(tài)”時,狀態(tài)置為q2;當(dāng)使用者動作處于“完成狀態(tài)”時,狀態(tài)置為q3,計(jì)數(shù)+1;若被測人體完成后保持狀態(tài),狀態(tài)置為q4,直到被測人體回到起始準(zhǔn)備狀態(tài)時狀態(tài)置為q1。若被測人體中途的動作使圖像不滿足以上4中判斷,狀態(tài)置為q0,處于“其他狀態(tài)”,直到被測人體達(dá)成“準(zhǔn)備狀態(tài)”,狀態(tài)置為q1。如果被測人體直接從“準(zhǔn)備狀態(tài)”變?yōu)椤巴瓿蔂顟B(tài)”,狀態(tài)置為q3,但是計(jì)數(shù)不會增加。
4.語音識別模塊
(1)用戶第一次使用時,會提示用戶記錄下開始和結(jié)束的指令語音信息,在此使用時,根據(jù)體能測試控制模塊控制,用戶分別發(fā)出“開始”和“結(jié)束”語音指令后,利用kinect的sdk語音包進(jìn)行錄音,并生成該錄音音頻的波形圖。
(2)對錄制的音頻使用短時能量參數(shù)來進(jìn)行語音端點(diǎn)檢測,求出所有幀中最大短時能量en_max,將0.03×en_max作為端點(diǎn)檢測的閾值,同時,將0.01×en_max認(rèn)為環(huán)境噪聲作為在命令段內(nèi)不計(jì)入運(yùn)算的幀的閾值,這樣將短時能量大于端點(diǎn)閾值的數(shù)據(jù)幀進(jìn)行編號后計(jì)算出每幀的平均幅差函數(shù);
(3)將計(jì)算得到的語音指令信號的平均幅差特征作為語音特征參數(shù)存儲于模板中,進(jìn)而建立用戶命令模型,作為該用戶語音指令待匹配模板;
(4)用戶在體能測試控制模塊中選擇了需要測試的項(xiàng)目,包括仰臥起坐、跪姿俯臥撐或標(biāo)準(zhǔn)俯臥撐后,語音識別模塊進(jìn)入等待狀態(tài),調(diào)用kinect體感交互設(shè)備的sdk打開內(nèi)置麥克風(fēng)采集語音信號;
(5)對用戶發(fā)出的語音信號提取完成后,將語音信號的特征參數(shù)與語音識別模塊中的待匹配模板中的兩個指令進(jìn)行匹配,若與開始指令匹配,則仰臥起坐測試模塊或俯臥撐測試模塊開始檢測計(jì)數(shù)同時測試反饋模塊開始計(jì)時,若與結(jié)束指令匹配,則停止計(jì)數(shù)同時測試反饋模塊結(jié)束計(jì)時,并將計(jì)數(shù)數(shù)據(jù)傳遞給運(yùn)動測試反饋模塊;若與開始指令和結(jié)束指令均不匹配,則不執(zhí)行任何操作。
5.測試反饋模塊
(1)當(dāng)用戶發(fā)出開始指令時,測試反饋模塊開始計(jì)時;當(dāng)用戶發(fā)出結(jié)束指令時,測試反饋模塊停止計(jì)時,計(jì)算用戶發(fā)出指令和結(jié)束指令的時間間隔,計(jì)算該次測試所消耗的時間。讀取運(yùn)動測試模塊中所記錄的用戶完成動作個數(shù)。測試反饋模塊以圖形化界面展示該次測試過程中完成動作個數(shù),消耗的時間,運(yùn)動過程中所消耗的能量以及該被測人體運(yùn)動能力強(qiáng)度評價。
(2)對于仰臥起坐運(yùn)動檢測,該次運(yùn)動所消耗的能量=10*(m/60)*動作個數(shù),其中m為被測人體體重(單位kg)。計(jì)算運(yùn)動強(qiáng)度系數(shù)=完成仰臥起坐個數(shù)/耗時(單位:秒)。強(qiáng)度系數(shù)大于1為s級,0.7-1為a級,0.5-0.7為b級,0.3-0.5為c級,0.3以下為d級。
(3)對于俯臥撐運(yùn)動檢測,標(biāo)準(zhǔn)俯臥撐所消耗的能量=g*m*h。其中g(shù)為10n/kg,m為被測人體體重(單位為kg),h為被測人體前臂的長度(單位為m)。跪姿俯臥撐所消耗的能量=(2/3)*g*m*h。計(jì)算運(yùn)動強(qiáng)度系數(shù)=完成俯臥撐個數(shù)/耗時(單位:秒)。強(qiáng)度系數(shù)大于0.8為s級,0.7-0.8為a級,0.4-0.7為b級,0.2-0.4為c級,0.2以下為d級。
測試方法:
(1)本系統(tǒng)測試硬件環(huán)境為kinect1.0以及硬件配置為內(nèi)存容量為2g以上,硬盤容量為256g,軟件環(huán)境為opencv3.0,windows10,kinect1.0,visualstudio2010以上版本。
(2)仰臥起坐測試方法為:被測人體仰臥于距離kinect攝像頭1-2米處。屈膝仰臥于地面,雙手扶于耳部時即進(jìn)入準(zhǔn)備狀態(tài)。用戶根據(jù)自己預(yù)先存入系統(tǒng)中的語音指令,向系統(tǒng)發(fā)出語音提示信號,語音匹配成功后系統(tǒng)進(jìn)入體能記錄狀態(tài)。
(3)俯臥撐測試方法為:被測人體俯臥于距離kinect攝像頭1-2米處。選擇跪姿俯臥撐時,被測人體在雙膝著地小腿抬起,髖關(guān)節(jié)與大腿呈一條直線,頭部抬起,雙手撐地時即進(jìn)入準(zhǔn)備狀態(tài)。選擇標(biāo)準(zhǔn)俯臥撐時,被測人體在雙腳著地,背部與腿部呈一條直線,頭部抬起,雙手撐地時即進(jìn)入準(zhǔn)備狀態(tài)。用戶根據(jù)自己預(yù)先存入系統(tǒng)中的語音指令,向系統(tǒng)發(fā)出語音提示信號,語音匹配成功后系統(tǒng)進(jìn)入體能記錄狀態(tài)。
(4)當(dāng)用戶希望結(jié)束本次訓(xùn)練或測試時,根據(jù)預(yù)先存入系統(tǒng)中的語音指令,向系統(tǒng)發(fā)出語音提示信號,語音匹配成功后系統(tǒng)結(jié)束體能記錄,并向用戶反饋體能測試結(jié)果。
本發(fā)明未詳細(xì)描述的部分屬于本領(lǐng)域公知技術(shù)。
以上所述,僅為本發(fā)明部分具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本領(lǐng)域的人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。