前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >八、利用body-calc进行姿态识别

八、利用body-calc进行姿态识别

原创
作者头像
alphaair
发布2024-05-23 09:03:11
630
发布2024-05-23 09:03:11
举报

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

一、支持的检测规则

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

1.1、基本人体检测规则

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

1.1、逻辑运算规则

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

二、规则编写语法

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

代码语言:javascript
复制
//这是一个检查人体是否的检测
const rule = {
    name: '人体站立状态要求', //必填,本规则自定义名称
    calc: 'stand', //必填,要执行的规则计算器名称
    offset : 15 //选填,规则的允许偏差范围
};

//规则嵌套,利用$or和$and逻辑规则进行多规嵌套
const rules = {
  name: '右侧站立检查',
  calc: '$and',
  rules: [{
  	name: '侧面视角',
	calc: 'camera-view',
	position: 'right'
  }, rule]
};

三、执行检测规则运算

所有的人体检测规则,有calc.Calculator负责执行。

代码语言:javascript
复制
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();

四、姿态检测实战

下面带您来做一个马步蹲的姿态检查实战,如下图所示:

image
image
代码语言:javascript
复制
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方式持久化,放置在后端,便于运动、姿态的检测更新、配置化等。

下篇将为您介绍运动调试分析工具的使用,敬请期待...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、支持的检测规则
    • 1.1、基本人体检测规则
      • 1.1、逻辑运算规则
      • 二、规则编写语法
      • 三、执行检测规则运算
      • 四、姿态检测实战
      • 五、后记
      相关产品与服务
      人体分析
      腾讯云神图·人体分析(Body Analysis)基于腾讯优图领先的人体分析算法,提供人体检测、行人重识别(ReID)等服务。支持识别图片或视频中的半身人体轮廓;支持通过人体检测,识别行人的穿着、体态等属性信息。可应用于人像抠图、背景特效、人群密度检测等场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档