【一步步开发AI运动APP】十二、自定义扩展新运动项目2

简介: 本文介绍如何基于uni-app运动识别插件实现“双手并举”自定义扩展运动,涵盖动作拆解、姿态检测规则构建及运动分析器代码实现,助力开发者打造个性化AI运动APP。

之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运动领域市场,今天开始我们将为您分享新系列【一步步开发AI运动APP】的博文,带您开发性能更强、体验更好的AI运动APP。

上一篇为您介绍了uni-app版运动识别插件的自定义扩展运动的基本架构、与小程序版运动识别插件的运动扩展差异,本篇我们就以双手并举为例带你来实现一个扩展运动。

一、动作姿态拆解

image.png

如上图所示,这个运动主要为手部摆动动,包含2个分动作姿态,起始动作姿态1为双手垂放于左右两侧站立,结束动作姿态2双手举过头顶撑直为结束动作,完成动作2时计数加一,如此反复运动。

二、定义运动检测规则

接下来我们为这两个拆解姿态分别构建检测规则,检测规则及自定义姿态的检测可以参考本系列博文的前面章节及插件的pose-calc指南文档。

  • 先构建动作姿态1手垂于两侧并站立的动作的检测规则:

    {
         
       name: '双手下垂',
       calc: '$and',
           rules: [{
         
               name: '站立姿态',
               calc: 'stand',
               offset: 25
           }, {
         
               name: '左腋夹角',
               calc: 'match-angle',
               angleKey: 'left_shoulder',
               secondKey: 'left_hip',
               thirdKey: 'left_wrist',
               angle: 30,
               offset: 30
           }, {
         
               name: '左手下垂',
               calc: 'vertical',
               upperKey: 'left_shoulder',
               centerKey: 'left_elbow',
               lowerKey: 'left_wrist',
               offset: 25
           }, {
         
               name: '右腋夹角',
               calc: 'match-angle',
               angleKey: 'right_shoulder',
               secondKey: 'right_hip',
               thirdKey: 'right_wrist',
               angle: 30,
               offset: 30
           }, {
         
               name: '右手下垂',
               calc: 'vertical',
               upperKey: 'right_shoulder',
               centerKey: 'right_elbow',
               lowerKey: 'right_wrist',
               offset: 25
           }]
    }
    
  • 再构建动作姿态2双手举过头顶伸直站立的检测规则:

    {
         
      name: '双手上举',
      calc: '$and',
      rules: [{
         
          name: '左手上举',
          calc: 'position',
          referenceKey: 'left_eye',
          positionKey: 'left_wrist',
          position: 'top',
          relaxed: true
      }, {
         
          name: '右手上举',
          calc: 'position',
          referenceKey: 'right_eye',
          positionKey: 'right_wrist',
          position: 'top',
          relaxed: true
      }]
    }
    

三、实现运动分析器

定义好动作姿态检测规则后,我们便可以实现此扩展运动的运动分析器了,完整代码如下:

/**
 * 双手并举运动分析器
 */
export class BothHandsUpSport {
   

    context = null;
    calculator = null; //ICalculator
    stateTran = -1;

    /**
     * 初始化运动分析器
     */
    constructor() {
   
        this.calculator = createCalculator();

        this.buildRules();
        const that = this;
        this.context = createExtendSportContext({
   
            key: 'both-hands-up',
            name: '自定义-双手并举',
            tickMode: true,
            view: 'front_back',
            start: () => that.start(),
            // reset: this.reset,
            // stop: this.stop,
            pushing: human => that.pushing(human)
        });
    }

    buildRules() {
   
        this.rules = {
   };
        this.rules.ups = {
   
            name: '双手上举',
            calc: '$and',
            rules: [{
   
                name: '左手上举',
                calc: 'position',
                referenceKey: 'left_eye',
                positionKey: 'left_wrist',
                position: 'top',
                relaxed: true
            }, {
   
                name: '右手上举',
                calc: 'position',
                referenceKey: 'right_eye',
                positionKey: 'right_wrist',
                position: 'top',
                relaxed: true
            }]
        };

        this.rules.downs = {
   
            name: '双手下垂',
            calc: '$and',
            rules: [{
   
                name: '站立姿态',
                calc: 'stand',
                offset: 25
            }, {
   
                name: '左腋夹角',
                calc: 'match-angle',
                angleKey: 'left_shoulder',
                secondKey: 'left_hip',
                thirdKey: 'left_wrist',
                angle: 30,
                offset: 30
            }, {
   
                name: '左手下垂',
                calc: 'vertical',
                upperKey: 'left_shoulder',
                centerKey: 'left_elbow',
                lowerKey: 'left_wrist',
                offset: 25
            }, {
   
                name: '右腋夹角',
                calc: 'match-angle',
                angleKey: 'right_shoulder',
                secondKey: 'right_hip',
                thirdKey: 'right_wrist',
                angle: 30,
                offset: 30
            }, {
   
                name: '右手下垂',
                calc: 'vertical',
                upperKey: 'right_shoulder',
                centerKey: 'right_elbow',
                lowerKey: 'right_wrist',
                offset: 25
            }]
        };
    }

    start() {
   
        this.stateTran = -1;
        console.log('运动启动', this);
    }

    pushing(fragment) {
   

        if (fragment.isNobody) {
   
            console.log('未识别到人体');
            return;
        }

        const human = fragment.human;
        if (this.stateTran != 1 && this.calculator.calculating(human, this.rules.downs)) {
   
            this.stateTran = 1;
            return;
        }

        if (this.stateTran == 1 && this.calculator.calculating(human, this.rules.ups)) {
   
            this.stateTran = 2;
            this.context.countTimes();
            this.context.emitTick(1);
        }
    }

    /**
     * 获取当前扩展运动的原生分析器实例
     * @returns 原生运动分析器实例
     */
    getSportInstance() {
   
        return this.context.getSport();
    }

    /**
     * 获取当前扩展运动描述
     * 
     * @returns  运动描述条目实例
     */
    static getDescriptor() {
   
        let item = {
   
            key: 'both-hands-up',
            name: '自定义-双手并举'
        };

        return item;
    }
}

好了,本节就为您介绍到这,下一节我们将为您介绍将实现的自定义扩展运动列表的维护,敬请期待...

image.png

相关文章
|
6月前
|
人工智能 安全 API
20 万奖金池就位!Higress AI 网关开发挑战赛参赛指南
本次赛事共设三大赛题方向,参赛者可以任选一个方向参赛。本文是对每个赛题方向的参赛指南。
555 57
|
6月前
|
人工智能 运维 安全
加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
在云计算与人工智能深度融合的背景下,Serverless 技术作为云原生架构的集大成者,正加速向 AI 原生架构演进。阿里云函数计算(FC)率先提出并实践“Serverless AI 运行时”概念,通过技术创新与生态联动,为智能体(Agent)开发提供高效、安全、低成本的基础设施支持。本文从技术演进路径、核心能力及未来展望三方面解析 Serverless AI 的突破性价值。
|
6月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
6941 89
|
人工智能 自然语言处理 前端开发
产品经理也能“开发”需求?淘宝信息流从需求到上线的AI端到端实践
淘宝推荐信息流业务,常年被“需求多、技术栈杂、协作慢”困扰,需求上线周期动辄一周。WaterFlow——一套 AI 驱动的端到端开发新实践,让部分需求两天内上线,甚至产品经理也能“自产自销”需求。短短数月,已落地 30+ 需求、自动生成 5.4 万行代码,大幅提升研发效率。接下来,我们将揭秘它是如何落地并改变协作模式的。
918 37
产品经理也能“开发”需求?淘宝信息流从需求到上线的AI端到端实践
|
6月前
|
人工智能 IDE 开发工具
从6人日到1人日:一次AI驱动的客户端需求开发实战
从6人日到1人日:一次AI驱动的客户端需求开发实战
从6人日到1人日:一次AI驱动的客户端需求开发实战
|
6月前
|
人工智能 小程序 开发者
【一步步开发AI运动APP】十二、自定义扩展新运动项目03
继【一步步开发AI运动小程序】后,我们推出新系列【一步步开发AI运动APP】,助开发者打造高性能、优体验的AI运动应用。本文详解自定义扩展运动分析器的统一管理实现,提升代码复用性与可维护性,涵盖APP与小程序插件差异及完整代码示例,助力AI运动场景深度拓展。
|
6月前
|
人工智能 Cloud Native 自然语言处理
拔俗AI智能体服务开发:你的7x24小时数字员工,让企业效率飙升的秘密武器
在“人效为王”时代,企业面临服务响应慢、成本高、协同难等痛点。阿里云AI智能体以自主决策、多模态交互、持续学习三大引擎,打造永不疲倦的“数字员工”,实现7×24小时高效服务,助力企业降本增效、驱动创新增长。(238字)
442 0
|
6月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1520 62
|
7月前
|
人工智能 安全 中间件
阿里云 AI 中间件重磅发布,打通 AI 应用落地“最后一公里”
9 月 26 日,2025 云栖大会 AI 中间件:AI 时代的中间件技术演进与创新实践论坛上,阿里云智能集团资深技术专家林清山发表主题演讲《未来已来:下一代 AI 中间件重磅发布,解锁 AI 应用架构新范式》,重磅发布阿里云 AI 中间件,提供面向分布式多 Agent 架构的基座,包括:AgentScope-Java(兼容 Spring AI Alibaba 生态),AI MQ(基于Apache RocketMQ 的 AI 能力升级),AI 网关 Higress,AI 注册与配置中心 Nacos,以及覆盖模型与算力的 AI 可观测体系。
1397 69
|
6月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
684 31

热门文章

最新文章