尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Kinect屏幕边缘检测不灵敏的解决方案

Kinect屏幕边缘检测不灵敏的解决方案
📅 发布时间:2026/6/20 5:13:41


在做体感项目时,在边缘部分的抓取动作识别非常差
于是我做出了优化,不采用原本的映射关系:
假设原本人物站在中间,保持位置不动,右手臂向右伸直,终点为屏幕的极限位置
此时我们并不将手臂伸直的位置映射到屏幕的极限位置,而是映射到屏幕的120%处,如此一来,原设备检测的区域就变为了20%——80%之间,保证了一定的精度

 

            Rect rectCanvas = LeftCursor.canvas.pixelRect;float xoffset = (rectCanvas.width) / 2;float yoffset = rectCanvas.height / 2;float multiple = 2f;Vector3 posSprite = new Vector2(Mathf.Clamp(multiple * (leftHandScreenPos.x * rectCanvas.width - xoffset) ,- xoffset,xoffset) , Mathf.Clamp(multiple*(leftHandScreenPos.y * rectCanvas.height - yoffset),-yoffset,yoffset) );Vector3 posSprite1 = new Vector2(Mathf.Clamp(multiple * (rightHandScreenPos.x * rectCanvas.width - xoffset), -xoffset, xoffset),Mathf.Clamp(multiple*(rightHandScreenPos.y * rectCanvas.height - yoffset),-yoffset,yoffset) );

此外,还可以使用List<Vector3>来存储历史数据,然后在每次更新时计算平均值,获得更稳定的位置更新。

 

    // 存储关节历史数据,用于平滑private readonly Queue<Vector3> LefthandData = new Queue<Vector3>();private readonly Queue<Vector3> RighthandData = new Queue<Vector3>();/// <summary>/// 设置空间坐标/// </summary>private void ScreenSetting(){if (interactionManager!=null){leftHandScreenPos = interactionManager.GetLeftHandScreenPos();rightHandScreenPos = interactionManager.GetRightHandScreenPos();Rect rectCanvas = LeftCursor.canvas.pixelRect;float xoffset = (rectCanvas.width) / 2;float yoffset = rectCanvas.height / 2;float multiple = 2f;Vector3 posSprite = new Vector2(Mathf.Clamp(multiple * (leftHandScreenPos.x * rectCanvas.width - xoffset) ,- xoffset,xoffset) , Mathf.Clamp(multiple*(leftHandScreenPos.y * rectCanvas.height - yoffset),-yoffset,yoffset) );Vector3 posSprite1 = new Vector2(Mathf.Clamp(multiple * (rightHandScreenPos.x * rectCanvas.width - xoffset), -xoffset, 
xoffset),Mathf.Clamp(multiple*(rightHandScreenPos.y * rectCanvas.height - yoffset),-yoffset,yoffset) );if (!isLerp){if (LefthandData.Count < 20){LefthandData.Enqueue(posSprite);}else{LefthandData.Dequeue();LefthandData.Enqueue(posSprite);}if (RighthandData.Count < 20){RighthandData.Enqueue(posSprite1);}else{RighthandData.Dequeue();RighthandData.Enqueue(posSprite1);}LeftCursor.transform.GetComponent<RectTransform>().anchoredPosition = new Vector3(LefthandData.Average(item => item.x), LefthandData.Average(item => item.y), LefthandData.Average(item => item.z));if (BothHand){RightCursor.transform.GetComponent<RectTransform>().anchoredPosition = new Vector3(RighthandData.Average(item => item.x), RighthandData.Average(item => item.y), RighthandData.Average(item => item.z));}}else{LeftCursor.transform.GetComponent<RectTransform>().anchoredPosition = Vector3.Lerp(LeftCursor.transform.GetComponent<RectTransform>().anchoredPosition, posSprite, Time.deltaTime * 10);if (BothHand){RightCursor.transform.GetComponent<RectTransform>().anchoredPosition = Vector3.Lerp(RightCursor.transform.GetComponent<RectTransform>().anchoredPosition, posSprite1, Time.deltaTime * 10); ;}}}}

 

相关新闻

  • RK3399:性能与能效的嵌入式先锋,解锁多场景应用潜力
  • Node.js后端学习笔记:Express+MySQL - 指南
  • TorchV知识库安全解决方案:基于智能环境感知的动态权限控制

最新新闻

  • JMeter接口测试实战:从环境搭建到多接口串联与结果分析
  • 【大模型应用开发-实战】(四)nvitop: 史上最强GPU性能实时监测工具
  • Selenium 4升级指南:解决executable_path报错与驱动管理最佳实践
  • Koodo Reader语音朗读:让眼睛休息,让耳朵工作的阅读新方式
  • 3个隐藏参数彻底释放DBeaver数据导入潜能
  • Chili3D:如何在浏览器中实现专业级3D CAD建模的完整技术解析

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号