找回密码
 立即注册
首页 业界区 安全 【一步步开发AI运动APP】七、自定义姿态动作识别检测— ...

【一步步开发AI运动APP】七、自定义姿态动作识别检测——之规则配置检测

痕厄 2025-6-1 00:04:17
之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运动领域市场,今天开始我们将为您分享新系列【一步步开发AI运动APP】的博文,带您开发性能更强、体验更好的AI运动APP。
一、什么是自定义姿态识别检测

您在开发AI运动小程序或APP时,可能会面这样的需求场景,比如:人像必须全部入镜、站立远近要求检查、用户做某个动作开始/停止运动识别、内置运动不满足场景需求需要扩展新运动项目等等,这些都需要用到自定义姿态动作识别检测,插件提供了基于规则配置姿态相似度比较两种姿态识别检测方案,本章将先为您介绍基于规则配置方案,姿态相似度比较方案和自定义运动扩展将在后续章节为您介绍。
1.png

二、Pose-Calc引擎介绍

插件姿态识别引擎pose-calc(原body-calc)实现了诸如⻆度匹配、垂直、⽔平、逻辑运算、姿态相似度⽐较、姿态旋转等常⽤的⼈体分析计算器;插件的内置运动分析器都基于此计算层实现,通过pose-calc只要配置好计算规则(⽆代码或代少量代码)即可实现自定义姿态动作检测或运动分析,也⽅便实现运动分析可配置化。
姿态计算引擎中的检测规则分为姿态计算逻辑计算两种类型,姿态计算类型主要包含全身入镜、视角检测、相对位置、站立、卧躺、角度匹配等人体姿态计算规则;逻辑计算包含或、与、非三个逻辑运算,用于实现姿态计算规则的组合运算,详情可以参考pose-calc指南文档。
三、编写姿态检测规则

姿态计算规则为方便持久化,采用类js匿名类型和JSON对象语法配置,定义语法如下:
  1. let rule = {
  2.         calc: 'stand',  //必填,要调用的计算规则
  3.         name: '保持站立姿态' //必填,自定义规则名称
  4.         ... //该计算规则所需的其它参数,具体参考文档
  5. };
复制代码
四、执行自定义姿态规则检测

定义好计算规则、检测出人体结构后,便可以调用计算规则执行对象Calculator进行检测了,代码如下:
  1. import { createCalculator } from "@/uni_modules/yz-ai-sport";
  2. const calculator = createCalculator();
  3. let rule = {
  4.         name: 'test',
  5.         calc: '$and',
  6.         rules: [{
  7.                 name: '正⾯视图',
  8.                 calc: 'camera-view',
  9.                 position: 'front'
  10.                 }, {
  11.                 name: '全身需⼊镜',
  12.                 calc: 'whole',
  13.                 relaxed: true
  14.         }]
  15. };
  16. let human = ... //调用人体检测接口,得到实时人体结构
  17. let pass = calculator.calculating(human, rule);
  18. console.log(pass);
  19. //Calculator还有calculatingAnd、calculatingOr、calculatingNot⽅法供快捷调⽤,详⻅API参考⽂档
复制代码
五、完整示例

下面以左右手平举姿态检测的示例,为您演示插件的基于计算规则配置的自定义姿态动作检测能力:
  1. import { createCalculator, createHumanDetector } from "@/uni_modules/yz-ai-sport";
  2. let rules={
  3.         name: '基本姿态',
  4.         calc: '$and',
  5.         rules: [{
  6.                 name: '全身需入镜',
  7.                 calc: 'whole'
  8.         }, {
  9.                 name: '站立姿态',
  10.                 calc: 'stand'
  11.         }, {
  12.                 name: '任一手平直',
  13.                 calc: '$or',
  14.                 rules: [{
  15.                         name: '左平直状态',
  16.                         calc: 'match-angle',
  17.                         angleKey: 'left_shoulder',
  18.                         secondKey: 'left_hip',
  19.                         thirdKey: 'left_wrist',
  20.                         angle: 90,
  21.                         offset: 20
  22.                 }, {
  23.                         name: '右平直状态',
  24.                         calc: 'match-angle',
  25.                         angleKey: 'right_shoulder',
  26.                         secondKey: 'right_hip',
  27.                         thirdKey: 'right_wrist',
  28.                         angle: 90,
  29.                         offset: 20
  30.                 }]
  31.         }]
  32. };
  33. const calculator = createCalculator();
  34. let options = {
  35.         multiple: false,
  36.         enabledGPU: true,
  37.         highPerformance: false
  38. };
  39. const humanDetector = createHumanDetector(options);
  40. humanDetector.startExtractAndDetect({
  41.         onDetected(result){
  42.                 let humans = result.humans;
  43.                 let pass = calculator.calculating(humans[0], rule);
  44.         }
  45. });
  46.                
复制代码
2.png


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册