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

一、什么是姿态相似度比较

上一篇为您介绍了通过配置检测规则,来实现自定义姿态动作的检测分析,基于规则配置的姿态动作检测,需要开发者仔细分析动作再编写规则,工作量相对较大。为减轻开发者的工作量,插件姿态识别引擎body-calc还提供了一个姿态相似度比较器,能对两个人体结构的相似度比较,给出两上姿态的整体和分部相似度评分。

二、姿态比较能力调用示例

姿态比较器实例的创建在uni-app和uni-app x框架下略有不同,请注意API文档。

import {Human, PoseComparer} from "@/uni_modules/yz-ai-sport";

//样本动作人体关键点
let json =
`{
width: 480,
height: 640,
score: 0.7404499650001526,
keypoints: [{ y: 66.0156295428602, x: 196.24999974976453, score: 0.3974609375, name: "nose" },
{ y: 56.99219681226278, x: 204.68749974880043, score: 0.395263671875, name: "left_eye" },
{ y: 56.48437477557764, x: 188.12499975069284, score: 0.353759765625, name: "right_eye" },
{ y: 63.867192043105675, x: 217.18751882085854, score: 0.6533203125, name: "left_ear" },
{ y: 60.78125454345827, x: 174.99999975219248, score: 0.49560546875, name: "right_ear" },
{ y: 117.10937476865072, x: 243.12499974440865, score: 0.51220703125, name: "left_shoulder" },
{ y: 124.92188430450126, x: 140.62501882960643, score: 0.5078125, name: "right_shoulder" },
{ y: 196.40624975959042, x: 251.2499997434803, score: 0.45068359375, name: "left_elbow" },
{ y: 207.65624975830502, x: 136.8749997565486, score: 0.4960937798023224, name: "right_elbow" },
{ y: 276.5624997504319, x: 260.31249974244486, score: 0.60498046875, name: "left_wrist" },
{ y: 279.99999975003914, x: 132.34374975706632, score: 0.4870605766773224, name: "right_wrist" },
{ y: 265.3125188252036, x: 224.68751882000163, score: 0.5830078125, name: "left_hip" },
{ y: 266.2499997516102, x: 167.81249975301373, score: 0.634765625, name: "right_hip" },
{ y: 416.24999973447143, x: 221.24999974690806, score: 0.67919921875, name: "left_knee" },
{ y: 418.43749973422155, x: 170.93749975265666, score: 0.55908203125, name: "right_knee" },
{ y: 549.6874997192251, x: 223.43751882014448, score: 0.51123046875, name: "left_ankle" },
{ y: 553.1249997188324, x: 178.59374975178187, score: 0.5869140625, name: "right_ankle" }
],
rangeHeight: 481.5357666015625,
rangeWidth: 127.82829284667969,
rangeX: 108.83674621582031,
rangeY: 72.2041015625
}`;
let sample = JSON.parse<Human>(json)!; //当前帧动作
json =
`{
width: 480,
height: 640,
score: 0.7404499650001526,
keypoints: [{y:154.06250001297832,x:258.7499999883252,score:0.728515625,name:"nose"},
{y:143.12500001305142,x:254.37499998835446,score:0.56298828125,name:"left_eye"},
{y:143.75001908653357,x:255.937499988344,score:0.69482421875,name:"right_eye"},
{y:143.984394086532,x:229.99999998851743,score:0.43115234375,name:"left_ear"}
,{y:146.17187501303107,x:236.09374998847667,score:0.4919433891773224,name:"right_ear"},
{y:201.4062690861481,x:205.9375190621646,score:0.51416015625,name:"left_shoulder"},
{y:202.03125001265758,x:227.96874998853102,score:0.66259765625,name:"right_shoulder"},
{y:281.25001908561427,x:234.6874999884861,score:0.26416015625,name:"left_elbow"},
{y:270.6250190856853,x:254.06249998835656,score:0.278076171875,name:"right_elbow"},
{y:246.09376908584932,x:289.06249998812257,score:0.1997070610523224,name:"left_wrist"},
{y:238.43750001241418,x:300.62499998804526,score:0.50927734375,name:"right_wrist"},
{y:321.5624618648858,x:218.59376906208004,score:0.58154296875,name:"left_hip"},
{y:323.43750001184594,x:224.06249998855716,score:0.5615234375,name:"right_hip"},
{y:453.43750001097675,x:217.34376906208837,score:0.6103515625,name:"left_knee"},
{y:455.6250000109622,x:214.06249998862396,score:0.51416015625,name:"right_knee"},
{y:572.5000000101808,x:215.31249998861563,score:0.403564453125,name:"left_ankle"},
{y:593.1250000100429,x:216.0937499886104,score:0.52294921875,name:"right_ankle"}
],
rangeHeight: 481.5357666015625,
rangeWidth: 127.82829284667969,
rangeX: 108.83674621582031,
rangeY: 72.2041015625
}`
let frame = JSON.parse<Human>(json)!; //这里实际使用中取从相机或图片识别的结果
//新建比较器,比较
const poseComparer = new PoseComparer();
const result = poseComparer.compare(sample, frame);
console.log(result);
//输出结果
//{items:
// [{key:"head",score:0.4327263684686711,summary:"头部相似度"},
// {key:"trunk",score:0.8407704975917485,summary:"躯干形态相似度"},
// {key:"left_hand",score:0.2155245751055277,summary:"左手相似度"},
// {key:"right_hand",score:0.21361728579451628,summary:"左手相似度"},
// {key:"left_foot",score:0.5147016736506456,summary:"左脚相似度"},
// {key:"right_foot",score:0.5190758118853293,summary:"右脚相似度"}],
// score:0.5110266728697409
//}

三、标准动作取样辅助

为了方便开发分析姿态动作,插件工具包内还提供供了一个桌面辅助工具,可以辅助进行标准动作样本。

【一步步开发AI运动APP】八、自定义姿态动作识别检测——之姿态相似度比较的更多相关文章

  1. 用鸿蒙开发AI应用(八)JS框架访问内核层

    目录:前言JS应用开发框架原理内置模块实现ace模块开发界面程序 前言上回说到,用C++来写UI界面的开发效率不如JS+HTML来的高,但设备开发又免不了要通过内核态来操作硬件,这里我们就要先打通从J ...

  2. 使用Java语言开发微信公众平台(八)——自定义菜单功能

    随着上一篇文章的结束,我们已经实现了所有消息的类型的回复功能.今天,我们来学习更加高大上,也更加重要的自定义菜单功能. 一.了解自定义菜单 自定义菜单是微信公众平台最常用也是最重要的功能之一.根据微信 ...

  3. 一步步开发自己的博客 .NET版 剧终篇(6、响应式布局 和 自定义样式)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  4. ionic3+angular4开发混合app 之自定义组件

    这里主要是记录ionic3+angular4开发混合app时自定义组件,我想自定义组件的方法和angular4应该类似,具体在纯angular4中自定义组件,暂时没有实践,个人觉得差别不大,之后实践了 ...

  5. 从0开始,手把手教你用Vue开发一个答题App

    项目演示 项目演示 项目源码 项目源码 教程说明 本教程适合对Vue基础知识有一点了解,但不懂得综合运用,还未曾使用Vue从头开发过一个小型App的读者.本教程不对所有的Vue知识点进行讲解,而是手把 ...

  6. 一步步开发自己的博客 .NET版(1、基本显示)

    前言 我们每个猿都有一个搭建自己独立博客的梦,我也不例外.以前想 现在想 以后也想.之所以一直迟迟没有着手,是因为难以跨出第一步.每次心里想着,等我以后技术好了再说,然后就没有然后了.以前用过word ...

  7. 一步步开发自己的博客 .NET版(4、文章发布功能)百度编辑器

    前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做个插件,任何网站上的技术 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能

    在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...

  9. 闲暇时间开发的个人app

    最近一段时间公司不是很忙,晚上基本没怎么加班.所以自己利用晚上在家的时间开发了一个app(奇趣营),其实自从转android开发以来,就有想过要自己开发一个app.一方面可以提升自己的经验:另一方面可 ...

  10. 《ArcGIS Engine+C#实例开发教程》第八讲 属性数据表的查询显示

    原文:<ArcGIS Engine+C#实例开发教程>第八讲 属性数据表的查询显示 第一讲 桌面GIS应用程序框架的建立 第二讲 菜单的添加及其实现 第三讲 MapControl与Page ...

随机推荐

  1. 构建强大算力基础,奠定AI时代基石!

    7月6日,2023世界人工智能大会在上海拉开序幕.由中国电信主办的"算网一体 融创未来"主题论坛也于当日在上海世博中心举行.上海市经济和信息化委员会副主任戎之勤.上海市金山区人民政 ...

  2. C# 深度学习:对抗生成网络(GAN)训练头像生成模型

    通过生成对抗网络(GAN)训练和生成头像 目录 通过生成对抗网络(GAN)训练和生成头像 说明 简介 什么是 GAN 什么是 DCGAN 参数说明 数据集处理 权重初始化 生成器 判别器 损失函数和优 ...

  3. 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链

    在上一篇文章中,我介绍了 Sdcb Chats 如何集成 DeepSeek-R1 模型,并利用其思维链(Chain of Thought, CoT)功能增强 AI 推理的透明度.DeepSeek-R1 ...

  4. mybatis之配置优化

    属性优化 properties 外部配置文件[db.properties] driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/m ...

  5. 奥特曼框架autMan对接微信公众号的详细教程

    1.简介 微信公众号分为订阅号(个人)和服务号(公司),个人是可以申请的哈.具体怎么申请参见官方文档:https://kf.qq.com/faq/120911VrYVrA151009eIrYvy.ht ...

  6. docker - [04] 常用命令

    官方文档:https://docs.docker.com/reference/ 一.帮助命令 1.1.docker version 查看docker的版本信息 1.2.docker info 显示do ...

  7. 多机器的键鼠互通——Synergy/Deskflow配置记录

    Synergy (1.14.6) 情况一样,那么感觉就是机器之间TCP连接有问题,测试不同 一些测试命令 ss -tlnp | grep 24800 # 查看端口情况 sudo lsof -i :24 ...

  8. 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异

    从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异 引言 在开发 Web 应用时,处理 HTTP 错误响应是常见的任务,尤其是在客户端代码中捕获并向用户展示错误信息.然而,当使用 HTTP ...

  9. 关闭 ReportCrash 进程防止CPU占用率过高 [MacBook]

    关闭 ReportCrash 的原因 自己 MacBook Pro 总是过载,机器很热.结果通过看进程 top 命令,看到 ReportCrash 占用了了过高的 CPU,而且好像我用不上.于是乎,得 ...

  10. DBeaver连接mysql时,报错Public Key Retrieval is not allowed

    解决 在新建连接的时候,驱动属性里设置 allowPublicKeyRetrieval 的值为 true.