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

简介: 本文介绍了如何通过姿态相似度比较技术简化AI运动应用开发。相比手动配置规则,插件`pose-calc`提供的姿态相似度比较器可快速评估两组人体关键点的整体与局部相似度,降低开发者工作量。文章还展示了在`uni-app`框架下调用姿态比较器的示例代码,并提供了桌面辅助工具以帮助提取标准动作样本,助力开发者打造性能更优、体验更好的AI运动APP。

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

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

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

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

姿态比较器实例的创建在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
//}

三、标准动作取样辅助

为了方便开发者分析姿态动作,插件工具包内还提供了一个桌面辅助工具,可以辅助标准动作样本提取。
115969-20250424091408550-1071357584.png

相关文章
|
26天前
|
人工智能 JSON 小程序
【一步步开发AI运动APP】七、自定义姿态动作识别检测——之规则配置检测
本文介绍了如何通过【一步步开发AI运动APP】系列博文,利用自定义姿态识别检测技术开发高性能的AI运动应用。核心内容包括:1) 自定义姿态识别检测,满足人像入镜、动作开始/停止等需求;2) Pose-Calc引擎详解,支持角度匹配、逻辑运算等多种人体分析规则;3) 姿态检测规则编写与执行方法;4) 完整示例展示左右手平举姿态检测。通过这些技术,开发者可轻松实现定制化运动分析功能。
|
25天前
|
存储 人工智能 安全
AI驱动的幼儿跌倒检测——视频安全系统的技术解析
幼儿跌倒检测系统基于AI视频技术,融合人体姿态识别与实时报警功能,为幼儿园安全管理提供智能化解决方案。系统通过YOLOv9、OpenPose等算法实现高精度跌倒检测(准确率达98%),结合LSTM时间序列分析减少误报,支持目标分类区分幼儿与成人,并具备事件存储、实时通知及开源部署优势。其高效、灵活、隐私合规的特点显著提升安全管理效率,助力优化园所运营。
65 0
AI驱动的幼儿跌倒检测——视频安全系统的技术解析
|
10天前
|
存储 人工智能 移动开发
uni-app+vue3接入deepseek-v3搭建跨端ai流式(小程序+app+h5)
基于Uniapp+Vue3+Markdown接入DeepSeek-V3聊天大模型,支持编译到H5+小程序+App端。实现流式输出、支持亮色/暗黑主题、代码高亮、会话本地存储等功能。
110 12
|
17天前
|
SQL 数据采集 人工智能
“服务器老被黑?那是你没上AI哨兵!”——聊聊基于AI的网络攻击检测那些事儿
“服务器老被黑?那是你没上AI哨兵!”——聊聊基于AI的网络攻击检测那些事儿
79 12
|
25天前
|
安全 前端开发 Android开发
拥抱国产化:转转APP的鸿蒙NEXT端开发尝鲜之旅
本文将要分享的是转转APP在开发全新鸿蒙NEXT端所遇到的一些问题,对比了鸿蒙开发和 Android、iOS 的不同,总结了这次开发过程中的一些经验等等。希望能带给你启发。
41 0
|
10天前
|
人工智能 数据挖掘 大数据
“龟速”到“光速”?算力如何加速 AI 应用进入“快车道”
阿里云将联合英特尔、蚂蚁数字科技专家,带来“云端进化论”特别直播。
49 11
|
24天前
|
开发框架 人工智能 Java
破茧成蝶:传统J2EE应用无缝升级AI原生
本文探讨了技术挑战和解决方案,还提供了具体的实施步骤,旨在帮助企业顺利实现从传统应用到智能应用的过渡。
破茧成蝶:传统J2EE应用无缝升级AI原生
|
10天前
|
开发框架 人工智能 Java
破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代
本文详细介绍了阿里云应用服务器如何助力传统J2EE应用实现智能化升级。文章分为三部分:第一部分阐述了传统J2EE应用在智能化转型中的痛点,如协议鸿沟、资源冲突和观测失明;第二部分展示了阿里云应用服务器的解决方案,包括兼容传统EJB容器与微服务架构、支持大模型即插即用及全景可观测性;第三部分则通过具体步骤说明如何基于EDAS开启J2EE应用的智能化进程,确保十年代码无需重写,轻松实现智能化跃迁。
|
1月前
|
人工智能 开发框架 安全
Serverless MCP 运行时业界首发,函数计算让 AI 应用最后一公里提速
作为云上托管 MCP 服务的最佳运行时,函数计算 FC 为阿里云百炼 MCP 提供弹性调用能力,用户只需提交 npx 命令即可“零改造”将开源 MCP Server 部署到云上,函数计算 FC 会准备好计算资源,并以弹性、可靠的方式运行 MCP 服务,按实际调用时长和次数计费,欢迎你在阿里云百炼和函数计算 FC 上体验 MCP 服务。
233 29