【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
随着人工智能技术的不断发展,阿里体育等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文档。
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02的更多相关文章
- 微信小程序开发详解——小程序,大颠覆!
微信小程序开发 联系 苏念 188.1414.7927 微信小程序系统开发 微信新功能开发 小程序开发 小程序怎么开发 app小程序开发 简化小程序开发 微信小程序定制 小程序制作 开发微信小程序 ...
- 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 ...
- 《OD学微信开发》微信小程序入门示例
官网地址: https://mp.weixin.qq.com/debug/wxadoc/dev/ 一.文件结构 小程序包含一个描述整体程序的 app 和多个描述各自页面的 page. .js后缀的是脚 ...
- 有哪些适合个人开发的微信小程序
微信小程序提供了一个简单.高效的应用开发框架和丰富的组件及API,帮助开发者在微信中开发具有原生 APP 体验的服务. 微信小程序支持采用云开发模式,无需后台服务,十分的方便快捷,适合个人开发一些工具 ...
随机推荐
- Docker 导出容器 / 镜像
有时由于镜像大小.网络限制等原因,我们不能将本地制作的容器 / 镜像上传到公共容器注册表.此时我们可以选择将镜像以本地文件的形式导出. 导入 / 导出容器 docker export "CO ...
- LeetCode 验证二叉搜索树的两种不同题型
一.leetcode 98. 验证二叉搜索树 通过辅助函数增加参数进行判断. 虽然节点值在INT范围内,但要求其中序遍历序列严格单调递增,因此等于也不行,而且需要用LONG_MIN\LONG_MAX初 ...
- RxJS 系列 – Join Creation Operators
前言 我们一样从简单和常用的入手. 第一篇介绍了 Creation Operators 上一篇介绍了 Filter Operators 这一篇来到 Join Creation Operators. 参 ...
- face-api.js 学习笔记
参考 Build Real Time Face Detection With JavaScript (youtube get started) face-api.js - JavaScript API ...
- DOM & BOM – 大杂烩
Document.scrollingElement 参考: why to use 'html, body' for scrollTop instead of just 'html' MDN 使用doc ...
- word在原有的方框里打勾
按住键盘上的ALT键不放,然后在小键盘区输入"9745"这几个数字,最后松开 ALT 键,自动变成框框中带勾符号.
- 1Before You Install Flask...Watch This! Flask Fridays #1
flask官网: https://flask.github.net.cn/ git官网: https://git-scm.com/ 建立文件: 建立虚拟环境.激活: source virt/Scrip ...
- Linux安装miniforge
miniforge 安装 协议条款:bsd-3-clause 支持conda和mamba命令,两者效果一样,推荐使用mamba # Setup Miniforge wget "https:/ ...
- oh-my-zsh nvm command not found
oh-my-zsh nvm command not found 如果你在使用 oh-my-zsh 并且在终端输入 nvm 命令时提示 "command not found",这可能 ...
- ant-design-vue 登录表单校验
最近刚刚上手了 Vue3 的 antdv ui框架,来做个简单的登录校验练练手 安装 antdv 依赖 npm install ant-design-vue --save 在 main.ts/js 中 ...