【一步步开发AI运动小程序】八、利用body-calc进行姿态识别
随着人工智能技术的不断发展,阿里体育等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方式持久化,放置在后端,便于运动、姿态的检测更新、配置化等。
下篇将为您介绍运动调试分析工具的使用,敬请期待...
【一步步开发AI运动小程序】八、利用body-calc进行姿态识别的更多相关文章
- 开发一个微信小程序教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...
- 开发一个微信小程序项目教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 如何快速地开发一个微信小程序
如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...
- Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序
Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...
- 全栈开发工程师微信小程序-中(下)
全栈开发工程师微信小程序-中(下) 微信小程序视图层 wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元. // 绑定数据 index.wxml <view> ...
- 全栈开发工程师微信小程序-中(中)
全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...
- 全栈开发工程师微信小程序-中
全栈开发工程师微信小程序-中 多媒体及其他的组件 navigator 页面链接 target 在哪个目标上发生跳转,默认当前小程序,可选值self/miniProgram url 当前小程序内的跳转链 ...
- 全栈开发工程师微信小程序-上(下)
全栈开发工程师微信小程序-上(下) icon 图标 success, success_no_circle, info, warn, waiting, cancel, download, search, ...
- 全栈开发工程师微信小程序-上(中)
全栈开发工程师微信小程序-上(中) width: 750rpx; 750rpx代表与屏幕等宽,rpx的缩写responsive pixel,这个单位是可以根据屏幕大小进行自适应调整的像素单位. 小程序 ...
- 全栈开发工程师微信小程序 - 上
全栈开发工程师微信小程序-上 实现swiper组件 swiper 滑块视图容器. indicator-dots 是否显示面板指示点 false indicator-color 指示点颜色 indica ...
随机推荐
- Windows 新建用户帐户
Windows 近年来大力推广使用 Microsoft 帐户登录 Windows.然而,如果你这么做了,Windows 会取你登录帐户的前 5 个字母作为你的本地用户名,非常的丑陋.更难受的是本地用户 ...
- Android 国际化:新增越南语语系(Java)
前提: 1. 在res文件夹中,新增values-vi文件夹(越南语文件夹) 2. 在步骤1的文件夹中,新增strings.xml 背景: 1. targetSdkVersion 29 2. Jdk ...
- FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24
在许多实际应用中,相对于反映类别之间微妙差异的细粒度标签,我们更容易获取粗粒度标签.然而,现有方法无法利用粗标签以无监督的方式推断细粒度标签.为了填补这个空白,论文提出了FALCON,一种从粗粒度标记 ...
- verilog vscode 与AI 插件
Verilog 轻量化开发环境 背景 笔者常用的开发环境 VIAVDO, 体积巨大,自带编辑器除了linting 能用,编辑器几乎不能用,仿真界面很友好,但是速度比较慢. Sublime Text, ...
- 画流程图、状态图、时序图、甘特图的JS库-mermaid-js
参考地址:https://github.com/mermaid-js/mermaid 原生使用方式: <!DOCTYPE html> <html> <head> & ...
- JavaScript – Symbol
前言 Symbol 是 es6 的特性. 如果只是写业务逻辑代码, 其实是不太会用到的. 如果是做架构, 封装, UI 组件才有需要. 但学它的概念是好的. es6 有需要内置的 Symbol 链接者 ...
- OpenSSL证书通过Subject Alternative Name扩展字段扩展证书支持的域名
1.概述 1.1 什么是Subject Alternative Name(证书主体别名) SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展.它允 ...
- 使用 Flutter 3.19 更高效地开发
我们已隆重推出全新的 Flutter 版本--Flutter 3.19.此版本引入了专为 Gemini 设计的新 Dart SDK.一个能让开发者对 Widget 动画实现精细化控制的全新 Widge ...
- [Tkey] CodeForces 1267G Game Relics
太神了这题,膜拜出题人 orz. 思考一 首先是大家都提到的一点,先抽卡再买.这里来做个数学分析. 假设我们还剩 \(k\) 种没有买,其实我们是有式子来算出它的花费期望的.WIKI 上提到,假设一个 ...
- 获取form提交的返回值
获取form提交的返回值 HTML代码如下: <form action="" method="post" enctype="multipart/ ...