一、Unity和Kinect交互的环境配置
我所使用的Unity3D的版本是Unity3.5,使用的Kinect SDK版本是SDK1.6,令Kinect和Unity交互的方法是使用CMU的封装,但是这个方法支持的Kinect SDK版本是SDK1.0,要想使用1.5或1.6版本的kinect SDK,就要做一些相应的修改。完整的方案如下:
1、安装Uinty3D
我使用的Unity3D版本是3.5,也可以在Unity3D官网上下载free版本的Unity。
2、安装Kinect SDK
我使用的SDK版本是1.6,可以在Kinect for Windows官方网站上下载。
3、安装Kinect Wrapper Package for Unity3D
这个就是CMU封装的用于Kinect开发的Unity3D导入包了。以后在Unity3D工程中,如果需要使用和kinect交互,那么就需要在这个工程中导入这个包。点击这里下载KinectWrapperPackage。
4、运行示例工程
在CMU提供的KinectWrapperPackage包中,已经包含了一个叫做KinectExample.untiy的Unity示例工程。在工程中导入KinectWrapperPackage包之后,在Unity的project面板上找到Scences->KinectExample,双击就可以打开这个示例工程。
CPU占用率高的几种原因1、系统感染病毒或恶意代码
通常病毒和木马程序会占用 CPU 很多资源,如果你的机器感染了病毒或木马程序,CPU 甚至瞬间会被占用 100%。对于这种情况,建议大家用杀病毒软件清理病毒和木马程序,如果杀毒软件不能清除病毒,大家只能重装系统了。
2、IE浏览器插件或网页代码运行错误
打开过多的flash网页、网络电视页面会占用大量 CPU 资源,如果打开的页面有错误代码,也可能直接导致IE浏览器崩溃,出现CPU 100%运行,甚至死机。建议大家尽量关闭已经不再使用的网页,不要同时打开太多flash网页;如果IE浏览器崩溃,重新启动IE就可以了。
3、错误 *** 作导致的应用软件崩溃
在我们平时使用迅雷、BT、office、大型的绘图软件、视频播放器 *** 作不当会使应用软件崩溃,比如:下载软件和防火墙冲突、用office打开错误的文件、用视频播放已损坏的视频文件等等。这些情况都会使应用软件崩溃,CPU被占用100%。即使我们在桌面已经关掉应用程序时候,电脑还是很慢,CPU还是被占用100%。这个时候我们可以打开“任务管理器”找到占用CPU 100%的那个进程,然后结束这个进程就可以了。
4、杀毒和防火墙软件
部分杀毒和防火墙软件由于其实时监控的特性,导致高度占用 CPU 资源。其实你可以仔细观察,它们还占用了更多的内存资源。我不建议停止甚至删除它们,但是最好计划好让它们工作的时间,尽量减少它们占用 CPU 的时间。另外,尽量选择使用那些占用 CPU 和 内存少的杀毒和防火墙软件。
5、不正当驱动程序
安装了不正当的硬件驱动程序,也是导致高度占用 CPU 资源的可能之一。建议尽量安装通过微软认证的驱动程序,或者安装笔记本官方提供的驱动程序。
1.Kinect原理:kinect1:Prime Sense公司的Light Coding技术作为原理,给不可见光打码,然后检测打码后的光束,判断物体的方位。
kinect2:TOF原理(精度、灵敏度和分辨率都更高),根据光反射回来的时间判断物体的方位,当然检测光的飞行速度是几乎不能实现的,所以发射一道强弱随时间变化的正弦光束,然后计算其回来的相位差值,所以使用场景尽量避免反射物以及不要移动Kinect,不然会有问题。
2.可供研究开源库:Openni,KinectSDK,手势库NITE,Kinect-ms-sdk。由于我是新手,而且比较熟悉的Kinect的SDK,所以就从这个开始总结,其他的有机会再来详细分析。
3.首先你用Kinect,首先要了解它能干什么,能获得哪些数据
其实看他的SDK就知道它能获取的数据包括:语音,彩色图像,深度图像,骨骼数据(这个是根据深度和彩色通过算法识别提供给开发者使用的)。而又这几种数据又能扩展出什么新的数据,开发出什么有趣的功能完全是由开发者们的能力和对世界的好奇。(官方SDK已提供了表情,脸部建模,语音识别,手势判断等,其他的估计不会那么快提供出来)
4.Kinect的使用程序流程:
开始程序-获取kinect摄像机-打开读取器-打开Kinect-获取读取器的相关帧数据-使用帧数据-关闭帧-关闭读取器-关闭Kinect-关闭程序
这就是Kinect的一个完整的工作流程,无论是彩色,深度,骨骼的数据获取都需要这个流程的,而我们主要 *** 作是在使用帧数据的这个阶段。其他基本是不变的。
4.1 kinect的开启很简单:在程序开始时,也就是unity的Start函数里写下
_Sensor = KinectSensor.GetDefault()
if (_Sensor != null)
{
_Reader = _Sensor.ColorFrameSource.OpenReader()
if (!_Sensor.IsOpen)
{
_Sensor.Open()
}
}
这样就能成功开启Kinect传感器和读取器了。
4.2 程序的关闭
要注意的是没获取完数据不要随意进行Kinect的关闭 *** 作,不然数据会不准确,一般kinect的关闭是在你准备要关闭程序的时候进行的,在unity上的mono类里有专门的OnApplicationQuit(),在这里进行关闭kinect的 *** 作。
代码如下:
void OnApplicationQuit()
{
if (_Reader != null)
{
_Reader.Dispose()
_Reader = null
}
if (_Sensor != null)
{
if (_Sensor.IsOpen)
{
_Sensor.Close()
}
_Sensor = null
}
}
中间的数据获取和数据的使用会占很大的篇幅,会在后续的博客里一个个分析
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)