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

一、为什么要对内置运动进行微调优化

uni-APP版插件与小程序AI运动识别插件一样,当前都内置了跳绳、开合跳、俯卧撑、仰卧起坐、卷腹、深蹲(深蹲起)、平板支撑、马步蹲、坐位体前屈等丰富的运动项目,所有运动项目都按相应的运动规范标准进行适配,足够应付AI键身、线上运动赛事活动、团建打卡、AI体测等多种应用场景。

但是不同的应用场景对运动检测的要求并不一致,比如云上运动赛事场景主要是提升全民的运动热情,并不是以竞技为目标,如果以标准动作规范进行检测,则动作通过率太低,会挫伤用户参赛热情;而像学生体测这种考评类的应用场景,需要更标准规范的动作检测要求,则可能要适度增加规范检测要求,满足考评要求;而用户自由AI健身,则用户自身的运动水平和偏好有很大的关系,运动素质较好的用可能喜欢标准模式,初级用户开始可能喜欢选择宽松,更具有成就感,后期又可能以标准模式发起挑战等等。

如前文所述,不同应用场景对检测规则的需求存在差异,插件若列举出典型场景进行适配,即难于满足无法预知的小众场景,更无法满足有微调需求开发者。鉴于此,我们为内置的运动分析器提供了统一的微调优化机制,以便开发者能除了开箱即用的使用标准模式进行运动检测外,还能对内置运动分析器的各项参数进行微调优化,灵活适应各种应用场景。

二、APP与小程序在运动微调上的差异

不同于小程序,页面层使用的是JS引擎,且插件也是工作在JS引擎层面的,利用javascript的弱类型特性,开发者可直接修改运动分析器Sport实例的属性;而APP则不同,插件为原生程序包,工作在页面渲染引擎之外,在uni-app下虽然渲染引擎为webview渲染引擎,但是得到的运动分析器是经过序列化的对象,并非原生对象的内存引用,无法直接操作实例对象的参数;且在uni-app x下则更为复杂,在android平台为原生引擎,在iOS仍为优化的webview引擎。

针对uni平台下APP的框架的差异,经过分析研究,我们为uni-app插件提供了一个统一的微调优化机制。

三、内置优化器ISportOptimizer

ISportOptimizer为插件统一的内置运动微调优化器,抹平了两个APP框架的微调优化调用差异,不管是uni-app还是uni-app x,统一使用此对象对内置运动分析器进行微调优化。ISportOptimizer对象可以获取更新内置运动的检测规则、动作样本、个性参数,以进行深度的优化定制。

四、微调优化示例代码


import { ISportOptimizer, ISport, createSport } from "../uni_modules/yz-ai-sport"; function optimizeing(){
//创建仰卧起坐动分析器
const sport = createSport('high-knee');
//创建运动的微调优化器
const optimizer = sport.buildOptimizer();
//获取运动的检测规则集
const rules = optimizer.getRules();
//获取运动可微调检测参数
const options = optimizer.getOptions(); //执行优化
optimizer.setOption('liftLowest', 0.05);
rules.leftPose.rules[0].offset = 55;
rules.leftPose.rules[1].offset = 55;
optimizer.setRule('leftPose', rules.leftPose);
}

五、微调优化的局限性

对内置运动分析器微调优化,只适合对标准动作进行适当的增减、放宽或收紧,如果动作变化太大,微调优化可能无法满足,比如花式跳绳,无法直接通过现有内置的跳绳微调优化适配。

当然,若微调优化无法满足应用场景需求,也无需担心,插件还支持自定义扩展新的运动项目,我们将在后续章节中介绍,敬请期待...

【一步步开发AI运动APP】十、微调优化内置运动分析器,灵活适配不同的应用场景的更多相关文章

  1. SNF开发平台WinForm之十四-站内发送系统信息-SNF快速开发平台3.3-Spring.Net.Framework

    1运行效果: 2开发实现: .组装站内信息发送实体对象. SNFService SNFService = new SNFService(); if (this.ucUser.SelectedIds ! ...

  2. spark 源码分析之十二 -- Spark内置RPC机制剖析之八Spark RPC总结

    在spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv中,剖析了NettyRpcEnv的创建过程. Dispatcher.NettyStreamManager.T ...

  3. mysql学习(十二)内置函数

    常用的内置函数,常用select\ 字符串函数 contat('' , '', .....) //连接字符串 select concat(name, ' age is ', age) from per ...

  4. python3 第二十九章 - 内置函数之tuple相关

    Python元组包含了以下内置函数 序号 方法及描述 实例 1 len(tuple)计算元组元素个数. >>> tuple1 = ('Google', 'Baidu', 'Taoba ...

  5. python3 第二十六章 - 内置函数之Number相关

    数学函数 函数 返回值 ( 描述 ) 实例 abs(x) 返回数字的绝对值,如abs(-10) 返回 10 print(abs(-10)) =======输出:====== 10 ceil(x) 返回 ...

  6. python简说(十四)内置函数

    # sorted 排序# map  循环调用函数的,保存返回值# filter  循环调用函数,如果函数返回false,那么就过滤掉这个值,是指从你传入的这个list里面过虑. def abc(num ...

  7. 使用 VS2012 开发 IDA GUI 插件 WIN32 SDK 和 内置函数 AskUsingForm_c

    1. 执行菜单的File->New->Project… (Ctrl-Shift-N)打开新建工程窗口. 2. 展开左侧的Visual C++项目模板分支,然后选择右侧的Win32 Proj ...

  8. python学习笔记(十六)内置函数zip、map、filter的使用

    1.zip,就是把两个或者多个list,合并到一起,如果想同时循环2个list的时候,就使用zip.示例如下: l1 = ['a','b','c','e','f','g'] l2 = [,,] l3= ...

  9. 学习python的第十天(内置算法:列表数据类型,元祖数据类型,字典数据类型)

    5.8自我总结 1.列表类型内置算法 1.必须掌握 1.按索引取值(正向取值+反向取值),即可存也可以取 #用于取其中一个值 name = ['yang','wen','yi'] ##正方向取wen, ...

  10. python 之 前端开发( JavaScript变量、数据类型、内置对象、运算符、流程控制、函数)

    11.4 JavaScript 11.41 变量 1.声明变量的语法 // 1. 先声明后定义 var name; // 声明变量时无需指定类型,变量name可以接受任意类型 name= " ...

随机推荐

  1. windows本地认证

    windows本地认证 本地认证概述 本地认证最简单的例子就是我们的电脑上存储着自己的账号密码,无论电脑是否联网,只要能开机,就可以输入账号密码登录到电脑中,工作组就是采用本地认证. 那认证流程是什么 ...

  2. python3 报错ModuleNotFoundError: No module named 'apt_pkg'

    前言 apt update无法执行,python3 报错 ModuleNotFoundError: No module named 'apt_pkg' 这是因为将 python 版本升级后的问题 正确 ...

  3. mac zsh: command not found: python

    前言 在 mac 上安装 python 后,会自动在 .zprofile 文件中,加入: # Setting PATH for Python 3.12 # The original version i ...

  4. MySQL 是否可以用 Docker 容器化?

    容器 容器是为了解决 "在切换运行环境时,如何保证软件能够正常运行",容器是轻量级应用代码包,它包含在任何环境中运行所需的所有元素的软件包.容器可以虚拟化操作系统,包含依赖项,例如 ...

  5. Java24你发任你发,我用Java8

    大家好,我是晓凡. 各位 Java 开发者们!是不是还在为 Java 23 的新特性忙得焦头烂额? 别急,Java 24 已经悄咪咪地发布了! 这可是自 Java 21 以来的第三个非长期支持版本,而 ...

  6. [源码系列:手写spring] IOC第九节:应用上下文ApplicationContext

    内容介绍 在Spring中应用上下文ApplicationContext是相较于BeanFacotry更为先进的IOC容器,BeanFacotry是Spring实现IOC最基础最核心的接口,使得Spr ...

  7. 【Linux】5.1 Shell简介

    Shell简介 1. Shell基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这 ...

  8. 详细介绍Mybatis的缓存机制

    一.缓存机制 1.缓存概述 缓存:缓存就是一块内存空间,保存临时数据 作用:将数据源(数据库或者文件)中的数据读取出来存放到缓存中,再次获取时直接从缓存中获取,可以减少和数据库交互的次数,提升程序的性 ...

  9. LinkedBlockingQueue的poll方法底层原理

    一.LinkedBlockingQueue的poll方法底层原理 LinkedBlockingQueue 的 poll 方法用于从队列头部移除并返回元素.如果队列为空,poll 方法会立即返回 nul ...

  10. 理解tomcat中的BIO、NIO、AIO、ARP

    理解tomcat中的BIO.NIO.AIO.ARP tomcat作为springboot中默认的web容器,了解tomcat的运转可以帮助我们更好的去调整tomcat的参数达到更好的性能 前置知识 I ...