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

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

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

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

姿态比较器实例的创建在uni-appuni-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. 关于galaxy戒色的通知

    明天开始--一小段时间内辅以半退网 如果想打胶 就做100个卷腹 睡不着就吃褪黑素 恁还是多写写诗吧,恁现在这个精虫上脑的脑子连意识流都扛不住 恁还想写<阑山><莲天>< ...

  2. Alink漫谈(二十一) :回归评估之源码分析

    Alink漫谈(二十一) :回归评估之源码分析 0x00 摘要 Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台,是业界首个同时支持批式算法.流式算法的机器学习平台.本 ...

  3. 图解MySQL【日志】——Binlog

    Binlog(Binary Log,归档日志) 为什么需要 Binlog? Binlog 是 MySQL 中的二进制日志,用于记录数据库的所有写操作(INSERT.UPDATE.DELETE 等) 1 ...

  4. openlayers 在地图上绘制矩形框,非鼠标框选

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title d ...

  5. 记录WPS接入AI大模型

    进入官网下载海鹦OfficeAI:https://www.office-ai.cn/ 安装OfficeAI 勾选打开一个测试表格看看是否已经安装成功 打开有些人的会弹出这个提示,点击进行管理,然后点击 ...

  6. P5356 [Ynoi Easy Round 2017] 由乃打扑克

    分块典题 左转数列分块入门2 一样的想法 排序+二分 但是发现我们只能求排名 于是二分答案然后分块+二分即可

  7. Win10打开IE自动跳转至Edge解决办法

    WIN + R输入inetcpl.cpl弹出Internet属性对话窗口 点击上面菜单中的[高级]选项 滑动右侧滚动条,找到[浏览]项下面的[启用第三方浏览器拓展*]并取消勾选 双击IE浏览器图标测试 ...

  8. 【ABAQUS 二次开发笔记】使用keyword 、python和matlab一起处理Odb数据

    用conversion shell element (S4R单元)建模层合板,有6层ply,每个lamina(ply)有3个 integration point,共计18个integration po ...

  9. python excel 读取:如何读取符合多个条件的记录【出差、外出、调休、年假】

    if 语句结合or 实现:读取所有出差.外出.调休.年假的记录 if '出差' in str(c_cell) or '外出' in str(c_cell) or'调休' in str(c_cell) ...

  10. 错误修正记录: [Vivado 12-8300] Launch HLS failed! Please see vitis_hls.log for details.

    起因 使用了Vivado Video Frame Buffer Read和Vivado Video Frame Buffer Write,按out of context模式综合失败.vivado版本2 ...