> 隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓**雲上運動會、線上運動會、健身打卡、AI體育指導**等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本 ...
隨著人工智慧技術的不斷發展,阿裡體育等IT大廠,推出的“樂動力”、“天天跳繩”AI運動APP,讓雲上運動會、線上運動會、健身打卡、AI體育指導等概念空前火熱。那麼,能否將這些在APP成功應用的場景搬上小程式,分享這些概念的紅利呢?本系列文章就帶您一步一步從零開始開發一個AI運動小程式,本系列文章將使用“雲智AI運動識別小程式插件”,請先行在微信服務市場或官網瞭解詳情。
一、支持的檢測規則
人體姿態檢測能力是插件的核心功能之一,插件為您封裝好了基本的人體檢測及邏輯運算檢測規則。
1.1、基本人體檢測規則
插件提供了:肢体角度匹配
、平行檢測
、垂直檢測
、視角檢查
、站立檢查
、卧躺檢查
、人體範圍檢查
、點位碰撞
等檢測規則,詳情參考api-docs
文檔。
1.1、邏輯運算規則
插件提供了:$or
、$and
兩個邏輯運算器,詳情參考api-docs
文檔。
二、規則編寫語法
每條檢測規則都是一個Object
對象,其中name
和calc
屬性為必填,其它參數參考具體的檢測規則,如:
//這是一個檢查人體是否的檢測
const rule = {
name: '人體站立狀態要求', //必填,本規則自定義名稱
calc: 'stand', //必填,要執行的規則計算器名稱
offset : 15 //選填,規則的允許偏差範圍
};
//規則嵌套,利用$or和$and邏輯規則進行多規嵌套
const rules = {
name: '右側站立檢查',
calc: '$and',
rules: [{
name: '側面視角',
calc: 'camera-view',
position: 'right'
}, rule]
};
三、執行檢測規則運算
所有的人體檢測規則,有calc.Calculator
負責執行。
const AiSport = requirePlugin("aiSport");
const humanDetection = AiSport.humanDetection;
const calculator = AiSport.calc.Calculator;
const rule = {
name: '人體站立狀態要求',
calc: 'stand',
offset : 15
};
const calculator = new Calculator();
//抽幀
const context = wx.createCameraContext();
const listener = context.onCameraFrame((frame) => {
const iamge = {
width: Number(frame.width),
height: Number(frame.height),
rawData: frame.data
};
//人體識別
humanDetection.detectionAsync(image).then(human=>{
//對人體識別結果,進行單規則姿態檢測
console.log(calculator.calculating(human, rule));
//返回值:true-通過;false-不通過
});
});
listener.start();
四、姿態檢測實戰
下麵帶您來做一個馬步蹲的姿態檢查實戰,如下圖所示:
const AiSport = requirePlugin("aiSport");
const humanDetection = AiSport.humanDetection;
const Calculator = AiSport.calc.Calculator;
//下肢要求
const foot = {
name: '腳90度檢測',
calc: '$or',
rules: [{
name: '左腳90度彎曲',
calc: 'match-angle',
angleKey: 'left_knee',
secondKey: 'left_hip',
thirdKey: 'left_ankle',
angle: 90,
offset: 25
}, {
name: '右腳90度彎曲',
calc: 'match-angle',
angleKey: 'right_knee',
secondKey: 'right_hip',
thirdKey: 'right_ankle',
angle: 90,
offset: 25
}]
};
const arm = {
name: '手臂180度檢測',
calc: '$or',
rules: [{
name: '左手180度伸直',
calc: 'match-angle',
angleKey: 'left_elbow',
secondKey: 'left_shoulder',
thirdKey: 'left_wrist',
angle: 180,
offset: 25
}, {
name: '右手180度伸直',
calc: 'match-angle',
angleKey: 'right_elbow',
secondKey: 'right_shoulder',
thirdKey: 'right_wrist',
angle: 180,
offset: 25
}]
};
const shoulder = {
name: '腋下夾角90度檢測',
calc: '$or',
rules: [{
name: '左腋90度',
calc: 'match-angle',
angleKey: 'left_shoulder',
secondKey: 'left_elbow',
thirdKey: 'left_hip',
angle: 90,
offset: 25
}, {
name: '右腋90度',
calc: 'match-angle',
angleKey: 'right_shoulder',
secondKey: 'right_elbow',
thirdKey: 'right_hip',
angle: 90,
offset: 25
}]
};
const rule = {
name: '馬步蹲姿勢檢查',
calc: '$and',
rules: [{
name: '全身進入圖像範圍內檢查',
calc: 'whole'
}, foot, arm, shoulder]
};
const calculator = new Calculator();
//抽幀
const context = wx.createCameraContext();
const listener = context.onCameraFrame((frame) => {
const iamge = {
width: Number(frame.width),
height: Number(frame.height),
rawData: frame.data
};
//人體識別
humanDetection.detectionAsync(image).then(human=>{
//執行檢測
console.log(calculator.calculating(human, rule));
});
});
listener.start();
五、後記
body-calc
的檢測規則都是對象化,所以開發者實際應用中可以考慮採用JSON方式持久化,放置在後端,便於運動、姿態的檢測更新、配置化等。
下篇將為您介運動調試分析工具的使用,敬請期待...
提供信息系統、公眾號、小程式、APP訂製開發服務
QQ:316455841
歡迎通過各種渠道咨詢瞭解,免費提供信息系統建設咨詢服務。