65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Unity 中使用 Intel RealSense SDK 2014 的技巧和窍门

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2015年3月18日

CPOL

5分钟阅读

viewsIcon

19255

本博客旨在为使用Unity和Intel RealSense SDK 2014的开发者提供信息、建议和链接。

Intel®Developer Zone 提供跨平台应用开发工具和操作指南,平台和技术信息,代码示例,以及同行专业知识,帮助开发者创新和取得成功。加入我们的社区,了解物联网Android*Intel® RealSense™ 技术Windows*,下载工具,获取开发套件,与志同道合的开发者分享想法,并参与黑客马拉松、竞赛、巡展和本地活动。

关于Unity版本的重要说明

  • Unity 4.x是32位系统。您可以使用Unity Pro或免费版的Unity,只要您使用Intel RealSense SDK R2版本(v4.)中的签名库。
  • Unity 5是64位系统。您必须将64位库(libpxccpp2c.dlllibpxccpp2c.dll.signtaure)复制到您的项目中。

可能有帮助的文档

需要注意的是,可以在不使用Unity Toolkit的情况下使用Unity DLL。如果您发布问题或遇到问题,请区分这两种情况。

一些最低要求:

  • 仅支持Gold R1,且仅支持Windows 8.1。唯一支持的摄像头是Creative RealSense F200用户朝向摄像头,该摄像头必须连接到真正的(蓝色)USB 3.0直连端口(非集线器)。
  • 需要使用Unity Pro,因为免费版的Unity不支持C++插件。可能存在解决此问题的方法,但Intel不予认可。即使是比赛的一部分,Intel也不会提供任何Pro许可证。但请注意,RSSDK 2014可以使用C#,并且附带了许多用于将摄像头与Unity接口的预构建“扩展”。(感谢Marty!)
  • 注意:Gold R1是针对Unity Pro 4.1编译的,并且在v4.5上进行了测试。未在4.6 Beta版本上进行验证。

现在是一些技巧/窍门:

  • 全屏:让应用程序在窗口模式/非窗口模式下进入全屏,无论显示分辨率如何。
    • ​请注意,Intel建议的最低分辨率为1368x768
    • 编译前,在Player Settings中,请确保选中“Use Direct3D 11”框。
      • 如果Player Settings中只有D3D9可用,请取消选中“Default is Native Resolution”或“Default is Full Screen”,并将默认屏幕宽度和高度设置为1368x768
    • 设置为仅使用特定的宽高比:16:9和16:10
    • 结果:基于“Resolution Selection Screen”上的“Windowed”复选框设置
      • 如果选中,应用程序将以窗口模式启动,但可以调整大小/最大化
      • 如果未选中,应用程序将始终以全屏模式启动。
    • 请注意,您可以检查分辨率//限制屏幕分辨率,例如
      if ( Screen.currentResolution.width > 1366 || Screen.currentResolution.height > 768 ) Screen.SetResolution(1366, 768, true);
  • 性能:

    • Unity Update()函数中的AcquireFrame首选设置为(false,0),以避免影响性能。(在Unity中,这是一个阻塞调用,它将帧率锁定到RS,并用于等待直到任何帧数据可用)
      if (sm.AcquireFrame (false) != pxceStatus.PXCM_STATUS_NO_ERROR)

    • 虽然双手追踪可能在同一个线程中,但建议为面部和语音或任何多模态使用创建单独的线程。

  • Unity中的平滑处理:与SDK中一样,有4种平滑处理类型可用。以下是它们在Unity中使用的建议。前两种最受推荐。
    • Spring(弹簧):基于时间,但对平滑数据有线性影响(Marty建议平滑因子=1,并使用TrackingAction脚本。
    • Quadratic(二次):基于时间的平滑处理,可作为稳定器和更平滑的工具。
    • Weighted(加权):允许根据任何一组权重(高斯、均匀等)对数据进行平均。对处理手部效果很好。
    • Stabilize smoothing(稳定平滑):有利于用户体验,因为它会保持现有位置,直到检测到大的移动
  • Unity中的语音/语音识别。Unity可以处理命令和语音转文本(可以使用框架文件夹中的C#包装器示例)。语音合成可能可以通过相同的方式实现(使用C#中的示例)。
  • 3D分割 - 胡须。目前,长胡须可能会导致检测速度非常慢,因为胡须会吸收大量红外线,并可能使头部与身体分离,从而混淆检测。该问题正在处理中。
  • 面部识别注册。
    • 在Gold R1中,2D面部识别仅使用ID#100。
    • Gold在Beta版本后进行了更改,现在等待10个连续帧才确认识别(不可设置,因为用于减少误报)。
  • 手部追踪(如果超出视场):使用Unity Toolkit中的“HandLost”规则。(RSUnityToolkit/Internals/Rules)。检查检测到的手部数量(SenseToolkitManager.Instance.HandDataOutput.QueryNumberOfHands()

  • 如果您在使用UnityEngine.Texture2D PXCMImage.ImageData.ToTexture2D(Int32 plane, Int32 width, Int32 height))时遇到问题,
    请使用指定Texture2D作为参数的ToTexture2D

  • 来自Marty G:如果您发现您的物体移动不平稳、不可预测,或者从它们所附加的子对象上撕裂开,请在特定TrackingAction脚本的Inspector面板设置中,将所有“Virtual World Box”和“Real World Box”值设置为零。

  • 来自Marty G:如果您希望Unity在MovingObject以外的对象中运行脚本,请编辑TriggerObject中的脚本,在脚本开头(Start()Update()等)指定该对象名称、脚本名称和函数类型。有关更多信息,请参阅此论坛帖子

期待听到其他技巧和窍门!将尽力每周更新!

© . All rights reserved.