如何在unity 3d中引用kinect的类库

如何在unity 3d中引用kinect的类库,第1张

目前呢在Unity中使用Kinect有3种办法。

第一种使用卡耐基梅隆的插件

第二种只用OpenNi官方的插件

第三种自己写中间件。

向比较来说使用第一种方案的人数较多。第二种因为官方后继支持和官方现在模糊的态度,使用的人也有,但不是很多。第三种其实也不难,也有一定的人数。

这里大概说一下第一种使用方法。

链接Kinect电源

安装驱动

下载Kinect的 SDk   地址:>

安装SDK,并打开Kinect Studio v20,同时链接设备。

在Kinect官网下载Unity_Pro插件,然后导入到Unity中。

最后嘛就是开始写你的Kinect程序咯。

使用 Azure Kinect 校准函数 | Microsoft Docs

使用校准函数可以转换 Azure Kinect 设备上每个传感器的坐标系之间的点。 需要转换整个图像的应用程序可以利用 转换函数 提供的加速 *** 作。

需要检索设备校准数据才能执行坐标系转换。 校准数据存储在 k4a_calibration_t 数据类型中。 该数据是通过 k4a_device_get_calibration() 函数从设备获取的。 校准数据不仅特定于每个设备,而且还特定于相机的工作模式。 因此, k4a_device_get_calibration() 需要使用 depth_mode 和 color_resolution 参数作为输入。

校准参数与 OpenCV 兼容。 有关各个相机校正参数的详细信息,另请参阅 OpenCV 文档 。 另请参阅 SDK 的 OpenCV 兼容性示例 ,其中演示了 k4a_calibration_t 类型与相应 OpenCV 数据结构之间的转换。

下图显示了 Azure Kinect 的不同坐标系,以及用于在这些坐标系之间转换的函数。 为了使插图显得简洁,我们省略了陀螺仪和加速度传感器的 3D 坐标系。

有关镜头失真的备注:2D 坐标始终引用 SDK 中失真的图像。 SDK 的 失真矫正示例 演示了图像失真矫正。 一般情况下,3D 点永远不会受到镜头失真的影响。

函数 k4a_calibration_3d_to_3d() 使用相机的外部校准将源坐标系的 3D 点转换为目标坐标系的 3D 点。 源和目标可设置为四个 3D 坐标系中的任何一个,即,彩色相机、深度相机、陀螺仪或加速度传感器。 如果源和目标相同,则返回未修改的输入 3D 点作为输出。

函数 k4a_calibration_3d_to_2d() 将源坐标系的 3D 点转换为目标相机的 2D 像素坐标。 此函数通常称为投影函数。 尽管源可以设置为四个 3D 坐标系中的任何一个,但目标必须是深度相机或彩色相机。 如果源和目标不同,则会使用 k4a_calibration_3d_to_3d() 将输入的 3D 点转换为目标相机的 3D 坐标系。 以目标相机坐标系表示 3D 点后,将使用目标相机的内部校准计算相应的 2D 像素坐标。 如果 3D 点超出了目标相机的可视区域,则有效值将设置为 0。

函数 k4a_calibration_2d_to_3d() 将源相机的 2D 像素坐标转换为目标相机坐标系的 3D 点。 源必须是彩色相机或深度相机。 目标可设置为四个 3D 坐标系中的任何一个。 除了 2D 像素坐标外,源相机图像中像素的深度值(以毫米为单位)也需要作为函数的输入,在彩色相机几何中推导出深度值的一种方法是使用函数 k4a_transformation_depth_image_to_color_camera() 。 该函数使用源相机的内部校准通过指定的像素坐标计算源相机焦点引出的 3D 射线。 然后,使用深度值查找此射线的确切 3D 点位置。 此 *** 作通常称为取消投影函数。 如果源和目标相机不同,该函数会通过 k4a_calibration_3d_to_3d() 将 3D 点转换为目标的坐标系。 如果 2D 像素坐标超出了源相机的可视区域,则有效值将设置为 0。

函数 k4a_calibration_2d_to_2d() 将源相机的 2D 像素坐标转换为目标相机的 2D 像素坐标。 源和目标必须设置为彩色相机或深度相机。 该函数需要将源相机图像中像素的深度值(以毫米为单位)作为输入,在彩色相机几何中推导出深度值的一种方法是使用函数 k4a_transformation_depth_image_to_color_camera() 。 它将调用 k4a_calibration_2d_to_3d() 转换为源相机系统的 3D 点。 然后,它将调用 k4a_calibration_3d_to_2d() 转换为目标相机图像的 2D 像素坐标。 如果 k4a_calibration_2d_to_3d() 或 k4a_calibration_3d_to_2d() 返回无效的结果,则有效值将设置为 0。

1 OpenKinect是人,而不是一个图书馆。该版本的libfreenect Kinect的驱动程序。 libfreenect和OpenNI +SensorKinect是开源库/驱动器。 libfreenect(使用Apache 20或GPLv2许可)从最初的派生,reverse-engineered/hacked Kinect的驱动程序,而OpenNI +SensorKinect从开源(LGPL)代码衍生的。 这两个项目在Windows,Linux(Ubuntu的),和Mac OS X的工作,这两个项目都可以访问从该项目颜色和深度图像 CodeGonet,以及它们不能 库之间的差异是电机控制(libfreenect有它,OpenNI +SensorKinect没有),并与NITE中间件集成更高级别的NUI支持(仅OpenNI +SensorKinect)。这些差异往往会带动项目对图书馆之一。

2 我要补充一点,OpenNI 2呈现OpenNI到别的Windows以外。 OpenNI 1x中使用Kinect的不是oficially支持其它平台,直到一个人avin2创建SensorKinect项目,该项目坐落在OpenNI的顶部,并公开了Kinect的界面OpenNI。 OpenNI 20是一个重大的重构,并且不oficially支持别的Windows以外的Kinect的。 。在撰写本文时,OpenKinect与最新的Kinect的(型号1473),这使得该设备,我不知道,如果一个修复正在进行的一个问题。 因此,总结一下: -如果与设备型号1473的问题解决了,那么OpenKinect是要走的路。而且,坦率地说,我就没有别的了它针对特定的平台。 -直到这个问题解决了,你唯一的选择是OpenNI 15 +SensorKinect,这是过时的,而且它已停止,但它是与Kinect的所有工作模式的唯一的事情,其实。

3 在写这篇文章的,OpenNi连Kinect对于Windows,libfreenect不是。

本文标题 :OpenNI和OpenKinect之间的区别是什么?

本文地址 :CodeGonet/304622

首先,Natal这个名字是微软的一项技术代号,在E3上正式宣布。Natal是一个拉丁名称,事实上是巴西东北部的一个城市,在拉丁语中意味“初生”(To be born)。 Natal技术是微软公司基于高端研究得出来的一个产品。根据《大众科学》的说法,微软在依靠人工智能解决复杂问题的过程中,产生了一个副产品,这就是Natal的来历。 说到Natal的工作原理,摄像头起到了很大的作用,它负责捕捉人肢 Kinect

体的动作,然后微软的工程师就可以设计程序教它如何去识别、记忆、分析处理这些动作。因此从技术上来说,Natal比Wii的体感高级很多。 Natal不只是一个摄像头。虽然它一秒可以捕捉30次,但是这只是整个系统的一部分。除此之外,还有一个传感器负责探测力度和深度、四个麦克风负责采集声音。 Natal也不只是一个控制器。虽然微软公司的宣传标语说:“你的身体就是控制器”。但是Natal要比那复杂,他会将你所处的房间形成一个3D影像,然后分析你身体的运动,因此整个系统是着眼于你所处的全部游戏环境,并形成一个综合的控制系统。 Natal更不是一台新的XBOX360。微软表示XBOX360的周期应该在10年左右。而Natal就是延长XBOX360生命周期的重要手段。也就是说,不管你手中的XBOX360是什么时候买的,是哪个版本,Natal都可以与之兼容。

 Natal中有一个功能强大的感觉阵列,对于新手来说,它拥有一个数字视频摄像头。能从事捕捉到识别颜色等多项工作。而Natal中的麦克风则可以在短时间内采集多次声音数据,以便把玩家和同处在一间房间中的其它人分开。 当然这些智能离不开软件的支持,而这方面是微软的强项。特制的软件已经把Natal训练得能成功识别人的脸部细节变化。而在识别人体动作的时候,精度可以达到4厘米。 09年微软收购了以色列公司3DV,让人们以为Natal的技术是源自3DV的ToF(time of flight)摄像头。3DV的感光芯片由于要测量光飞行时间,所以需要做到飞秒级的快门。据说他们在芯片中用到砷化镓,使其时钟频率提高到上百G。但这样做会使其成本升高,很难想象微软能把这样的技术做进游戏机这样的消费电子品里面。2010年1月,微软的开发人员明确表示:Natal并不是基于ToF的原理。2010年4月,另一家以色列公司(以色列人还真厉害)PrimeSense才确认为微软提供了其三维测量技术,并应用于Project Natal。 在PrimeSense公司的主页上提到其使用的是一种光编码(light coding)技术。不同于传统的ToF或者结构光测量技术,light coding使用的是连续的照明(而非脉冲),也不需要特制的感光芯片,而只需要普通的CMOS感光芯片,这让方案的成本大大降低。 Light coding,顾名思义就是用光源照明给需要测量的空间编上码,说到底还是结构光技术。但与传统的结构光方法不同的是,他的光源打出去的并不是一副周期性变化的二维的图像编码,而是一个具有三维纵深的“体编码”。这种光源叫做激光散斑(laser speckle),是当激光照射到粗糙物体或穿透毛玻璃后形成的随机衍射斑点。 这些散斑具有高度的随机性,而且会随着距离的不同变换图案。也 Kinect

就是说空间中任意两处的散斑图案都是不同的。只要在空间中打上这样的结构光,整个空间就都被做了标记,把一个物体放进这个空间,只要看看物体上面的散斑图案,就可以知道这个物体在什么位置了。当然,在这之前要把整个空间的散斑图案都记录下来,所以要先做一次光源的标定。在PrimeSense的专利上,标定的方法是这样的:每隔一段距离,取一个参考平面,把参考平面上的散斑图案记录下来。假设Natal规定的用户活动空间是距离电视机1米到4米的范围,每隔10cm取一个参考平面,那么标定下来我们就已经保存了30幅散斑图像。需要进行测量的时候,拍摄一副待测场景的散斑图像,将这幅图像和我们保存下来的30幅参考图像依次做互相关运算,这样我们会得到30幅相关度图像,而空间中有物体存在的位置,在相关度图像上就会显示出峰值。把这些峰值一层层叠在一起,再经过一些插值,就会得到整个场景的三维形状了

每个人都能享受到Natal带来的乐趣。从4、5岁的孩子到60岁的老人。小孩可以通过自己的蹦蹦跳跳玩一些体育健身的游戏,而年轻人可以通过自己灵活的动作来玩一些动作或者射击游戏。不要忘了,Milo(kinect宣传演示中的一个虚拟人物,一个小男孩儿)非常想和你交朋友,它的人工智能简直让人感觉在和一个真人在谈话

以上就是关于如何在unity 3d中引用kinect的类库全部的内容,包括:如何在unity 3d中引用kinect的类库、使用 Azure Kinect 校准函数、openni和openkinect之间的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9685085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存