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

本文涉及的产品
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
简介: 随着AI技术的发展,各大厂商推出的如“乐动力”、“天天跳绳”等AI运动APP,使得云上运动会、线上健身等概念风靡一时。本文将引导读者从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”,介绍人体姿态检测规则、规则编写语法、执行检测规则运算及姿态检测实战等内容,助力开发者轻松实现AI运动小程序的开发。

随着人工智能技术的不断发展,各大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]
};
AI 代码解读

三、执行检测规则运算

所有的人体检测规则,有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();
AI 代码解读

四、姿态检测实战

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

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();
AI 代码解读

五、后记

body-calc的检测规则都是对象化,所以开发者实际应用中可以考虑采用JSON方式持久化,放置在后端,便于运动、姿态的检测更新、配置化等。

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

目录
打赏
0
3
3
0
105
分享
相关文章
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
7875 68
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
技术小白如何利用DeepSeek半小时开发微信小程序?
阿里开源AI视频生成大模型 Wan2.1:14B性能超越Sora、Luma等模型,一键生成复杂运动视频
Wan2.1是阿里云开源的一款AI视频生成大模型,支持文生视频和图生视频任务,具备强大的视觉生成能力,性能超越Sora、Luma等国内外模型。
435 2
阿里开源AI视频生成大模型 Wan2.1:14B性能超越Sora、Luma等模型,一键生成复杂运动视频
用通义灵码开发一个Python时钟:手把手体验AI程序员加持下的智能编码
通义灵码是基于通义大模型的AI研发辅助工具,提供代码智能生成、研发问答、多文件修改等功能,帮助开发者提高编码效率。本文通过手把手教程,使用通义灵码开发一个简单的Python时钟程序,展示其高效、智能的编码体验。从环境准备到代码优化,通义灵码显著降低了开发门槛,提升了开发效率,适合新手和资深开发者。最终,你将体验到AI加持下的便捷与强大功能。
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
微信小程序组件封装与复用:提升开发效率
本文深入探讨了微信小程序的组件封装与复用,涵盖组件的意义、创建步骤、属性与事件处理,并通过自定义弹窗组件的案例详细说明。组件封装能提高代码复用性、开发效率和可维护性,确保UI一致性。掌握这些技能有助于构建更高质量的小程序。
【活动报名】​AI应用启航workshop:瓴羊+通义助力企业迈入AI驱动的数智营销时代
【活动报名】​AI应用启航workshop:瓴羊+通义助力企业迈入AI驱动的数智营销时代
从零开始即刻拥有 DeepSeek-R1 满血版并使用 Dify 部署 AI 应用
本文介绍了如何使用阿里云提供的DeepSeek-R1大模型解决方案,通过Chatbox和Dify平台调用百炼API,实现稳定且高效的模型应用。首先,文章详细描述了如何通过Chatbox配置API并开始对话,适合普通用户快速上手。接着,深入探讨了使用Dify部署AI应用的过程,包括选购云服务器、安装Dify、配置对接DeepSeek-R1模型及创建工作流,展示了更复杂场景下的应用潜力。最后,对比了Chatbox与Dify的输出效果,证明Dify能提供更详尽、精准的回复。总结指出,阿里云的解决方案不仅操作简便,还为专业用户提供了强大的功能支持,极大提升了用户体验和应用效率。
448 18
从零开始即刻拥有 DeepSeek-R1 满血版并使用 Dify 部署 AI 应用

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等