一步步开发AI运动小程序八利用body-calc进行姿态识别

Posted Alphaair

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一步步开发AI运动小程序八利用body-calc进行姿态识别相关的知识,希望对你有一定的参考价值。

随着人工智能技术的不断发展,阿里体育等IT大厂,推出的“乐动力”、“天天跳绳”AI运动APP,让云上运动会、线上运动会、健身打卡、AI体育指导等概念空前火热。那么,能否将这些在APP成功应用的场景搬上小程序,分享这些概念的红利呢?本系列文章就带您一步一步从零开始开发一个AI运动小程序,本系列文章将使用“云智AI运动识别小程序插件”,请先行在微信服务市场官网了解详情。

一、支持的检测规则

人体姿态检测能力是插件的核心功能之一,插件为您封装好了基本的人体检测及逻辑运算检测规则。

1.1、基本人体检测规则

插件提供了:肢体角度匹配平行检测垂直检测视角检查站立检查卧躺检查人体范围检查点位碰撞等检测规则,详情参考api-docs文档。

1.1、逻辑运算规则

插件提供了:$or$and两个逻辑运算器,详情参考api-docs文档。

二、规则编写语法

每条检测规则都是一个Object对象,其中namecalc属性为必填,其它参数参考具体的检测规则,如:

//这是一个检查人体是否的检测
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运动(动作)检测识别解决方案

前几年受疫情影响,人员流动受限,反而让“AI运动”概念风靡一时、空前火爆。目前已经在AI运动锻炼、体育教学、线上运动主题活动等场景中,成功得到了应用,并获得了广大互联网用户的认可。

    一、AI运动锻炼

           足不出户,只需一部手机和家中几平方米的场地,也能确保锻炼达到可计数、计时、可纠正的效果,成了宅家一族的健康锻炼助理。

    二、体育教学辅导

       随着基础教育,对体育教学的重视程度越来越高,为了监督学生在家的锻炼情况,很多学校也利用AI运动识别技术,将学生的运动打卡搬上手机,进行云辅导。

    三、云上主题运动活动

      全民健步走,是前些年异常火热的线上主题活动,通过AI运动识别技术,现在可以开展如:跳绳、开合跳、平板撑、仰卧起坐、俯卧撑、深蹲、马步蹲等形式更多样的云上健身主动活动,还可以自动生成排行榜。适合单位开展“全民健身”、“团队健身”等主动活动。

      虽然AI运动概率异常火热,但是受小程序框架的制约,要想把AI运动识别搬上小程序,却难度不小。直接调用第三方运动识别API服务,成本高、即时性差;使用本地抽帧+后台识别的方案,成本稍低,但完整性、即时性较差。

      针对以上情况,经过我们的技术团队努力及不断偿试,我们把一套精简的人体识别深度学习模型搬上了微信小程序,并结合我们基于规则配置的运动识别计算引擎,可以轻松实现跳绳、开合跳、平板撑、俯卧撑、仰卧撑等多种运动的识别。方案具有以下特点:

     一、成本花费低

           经过我们的比对测试,大部分第三方运动识别、人体识别API服务,都是按秒数或图片帧数计费, 以时长5分钟左右的运动锻炼视频,识别大约要花费0.5元-1元之间,如此高昂的成本,对于一般应用难于承受。而我们的方案,每应 用只要一次性收取几千元的授权费即可,再无其它花费。

     二、易于集成

            本方案以微信小程序插件的形式发布,开箱即用;为了减少您开发团队的开发成本,我们还为您封装了摄像头取像、人体骨骼绘制等功能,您只要专注于UI开发即可。

     三、易于扩展

            我们的方案中,带有运动识别规则计算引擎,您只需按照文档说明,简单的配置规则即可实现一种新的运动识别,还可以将配置规则JSON化,放置于服务端,实现运动识别可配置化。

 

以上是关于一步步开发AI运动小程序八利用body-calc进行姿态识别的主要内容,如果未能解决你的问题,请参考以下文章

一步步开发AI运动小程序七进行运动计时计数

一步步开发AI运动小程序三运动识别处理流程

一步步开发AI运动小程序六人体骨骼图绘制

一步步开发AI运动小程序五帧图像人体识别

一步步开发AI运动小程序九姿态辅助调试桌面工具折使用

ai运动怎么接入到小程序