> 隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓**雲上運動會、線上運動會、健身打卡、AI體育指導**等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本 ...
隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓雲上運動會、線上運動會、健身打卡、AI體育指導等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本系列文章將使用“雲智AI運動識別小程式插件”,請先行在微信服務市場或官網瞭解詳情。
一、運動分析
如圖所示,俯卧撐
有卧和撐兩個動作姿態組成,從卧到撐或者撐到卧,為一個動作,即計數加1;因此我們分別構建這兩個姿態的識別規則,查測到卧撐
或撐卧
的組合計數加1,便可以完成俯卧撐
的檢測數。
二、檢測規則構建
【撐】:
如上圖所示的動作1“撐”姿態,我們看到整個身體軀幹綳直,雙手綳直撐起,手臂與腰部夾角大約80度左右,所以我們構建出以下幾個檢測規則進行檢測:
{
name: '撐狀態檢查',
calc: '$and',
rules: [{
name: '手臂垂直撐起',
calc: '$or',
rules: [{
name: '左手臂垂直',
calc: 'vertical',
upperKey: 'left_shoulder',
centerKey: 'left_elbow',
lowerKey: 'left_wrist',
offset: 20
}, {
name: '右手臂垂直',
calc: 'vertical',
upperKey: 'right_shoulder',
centerKey: 'right_elbow',
lowerKey: 'right_wrist',
offset: 20
}]
}, {
name: '手臂與腰部垂直',
calc: '$or',
rules: [{
name: '左手臂與腰齊垂直',
calc: 'match-angle',
angleKey: 'left_shoulder',
secondKey: 'left_elbow',
thirdKey: 'left_hip',
angle: 90,
offset: 25
}, {
name: '右手臂與腰齊垂直',
calc: 'match-angle',
angleKey: 'right_shoulder',
secondKey: 'right_elbow',
thirdKey: 'right_hip',
angle: 90,
offset: 25
}]
}, {
name: '腿部綳直',
calc: '$or',
rules: [{
name: '左腿綳直',
calc: 'match-angle',
angleKey: 'left_knee',
secondKey: 'left_ankle',
thirdKey: 'left_hip',
angle: 160,
offset: 20
}, {
name: '右腿綳直',
calc: 'match-angle',
angleKey: 'right_knee',
secondKey: 'right_ankle',
thirdKey: 'rgight_hip',
angle: 160,
offset: 20
}]
}]
};
【卧】:
接下來我們繼續看第二個分解動作卧,如上圖所示的動作2“卧”姿態,我們看到整個身體軀幹也是綳直的,手臂彎曲成約90度,胳膊與腰部齊平,所以我們構建出以下檢測規則進行識別:
{
name: '卧動作檢查',
calc: '$and',
rules: [{
name: '軀幹卧倒狀態',
calc: 'lie',
offset: 30
}, {
name: '手臂彎曲檢查',
calc: '$or',
rules: [{
name: '左手臂彎曲狀態',
calc: 'match-angle',
angleKey: 'left_elbow',
secondKey: 'left_shoulder',
thirdKey: 'left_wrist',
angle: 115,
offset: 15
}, {
name: '右手臂彎曲狀態',
calc: 'match-angle',
angleKey: 'right_elbow',
secondKey: 'right_shoulder',
thirdKey: 'right_wrist',
angle: 115,
offset: 15
}]
}, {
name: '手臂與腰齊平查',
calc: '$or',
rules: [{
name: '左手臂與腰齊平查',
calc: 'match-angle',
angleKey: 'left_shoulder',
secondKey: 'left_elbow',
thirdKey: 'left_hip',
angle: 35,
offset: 15
}, {
name: '右手臂與腰齊平查',
calc: 'match-angle',
angleKey: 'right_shoulder',
secondKey: 'right_elbow',
thirdKey: 'right_hip',
angle: 35,
offset: 15
}]
}]
}
到這,我們就把運動檢測規則編寫好了,規則同時考慮了左、右側入鏡的問題。
三、執行檢測
實現運動分析器,我們需要繼承擴展sports.SportBase
抽象類,該類已經為您實現了基本的計時、計數能力,您只要重寫pushing
方法,在此方法調用calc.Calculator
計算器進行規則計算,通過則調用計時計數即可,代碼如下:
pushing(body) {
if (utils.isNone(body))
return;
//卧
if (this._calculator.calculating(body, this.rules.liePose)) {
this.stateTran = 1;
return;
}
//撐
if (!this._calculator.calculating(body, this.rules.upPose) || this.stateTran !== 1)
return;
this.stateTran = -1;
this.countTimes();
this.emitTick(); //觸發計數
}
四、後計
以上便是俯卧撐
運動的分析器的適配過程,當然還可以使用姿態相似度
能力進行動作識別,效率相對會更高些,詳情請參考前面的相似度使用章節及API文檔。
提供信息系統、公眾號、小程式、APP訂製開發服務
QQ:316455841
歡迎通過各種渠道咨詢瞭解,免費提供信息系統建設咨詢服務。