【一步步开发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 体验的服务. 微信小程序支持采用云开发模式,无需后台服务,十分的方便快捷,适合个人开发一些工具 ...
随机推荐
- 猜数游戏[USACO2008] Haybale Guessing G
$ Haybale \ Guessing \ G $ (猜数游戏) 解题报告 \(Diffculty:\) \(\color{purple}省选/NOI-\) 传送门1:(HZOIER) 传送门2:( ...
- C# 将一个DataTable分解成多个DataTable
今天在做项目时需要将一个DataTable分解成多个DataTable分批传入函数里面,于是在网上找寻了一番,修复了angle_greensky110 存在分表的缺陷的代码. 分表方法: /// & ...
- LaTeX 生成黑底白字的 PDF
最近需要深夜看论文,然而白底的 PDF 看久了眼睛很难受,想转换成黑底的.正好我有论文的 LaTeX 源码,因此可以直接编译黑底的 PDF 出来. 使用 darkmode 宏包 CTAN 上有一个 L ...
- LaTeX 编译警告:Script 'CJK' not explicitly supported within font 'FandolSong-Regular'. Check the typeset output, and if it is okay then ignore this warning. Otherwise a different font should be chosen.
在编译一篇中文文档时遇到如下警告: Package fontspec Warning: Script 'CJK' not explicitly supported within font 'Fando ...
- SpringBoot 引入 WebSocket
maven 添加websocket ,按照一篇博文引入 websocket https://www.cnblogs.com/likun10579/p/5450209.html 在浏览器控制台测试是否连 ...
- docker with GPU support
自己总结的: nvidia-docker, 不支持windows,2019.10, nvidia-docker过时了,从docker 1903开始,安装一个nvidia-container-runti ...
- Java 1.8 Stream流原理与用法总结
一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...
- 深入理解Argo CD工作原理
1. ArgoCD 的架构 ArgoCD 是一个 Kubernetes 原生的持续交付工具,它通过监控 Git 仓库中的应用定义来自动部署应用到 Kubernetes 集群.其核心架构由以下几个关键组 ...
- CSS & JS Effect – Hamburger Menu
效果 参考: Youtube – Responsive Navigation Menu Bar + Hamburger Menu Toggle - Only with CSS Youtube – Ma ...
- Angular 学习笔记 work with excel (导出 excel)
更新: 2020-04-15 补上 read excel 先用 file reader 把文件变成 buffer 然后调用 exceljs 就可以了, 它很聪明的哦, date number, boo ...