使用Kinect多点触摸
Kinect入手一个多月了,刚入手那天用AlexP的驱动试了下,在windows平台上能够拿到摄像头和深度数据,然后就放到朋友的XBox上玩了几天,确实很强大啊。本来想为它写个多点触摸的软件,准确的说应该是隔空操作吧,像少数派报告那种的。要写起来也很简单:
1)深度数据做个阈值;
2)blob tracking;
3)TUIO发出去,然后就可以享用各种多点触摸的上层软件了。
但考虑到它这么强大,如果只是这么做就太浪费了,应该搞点高级的,比如手势识别啊、骨骼化之类的。无奈心有余而力不足啊,高级的自己搞起来还是挺费劲,本来这个就是拿来娱乐的,搞得费劲就没劲了,考虑到国际友人们对Kinect如火如荼的破解热情加上开源分享精神,决定坐等好的开源软件放出来。可惜等到现在似乎还没有什么好东西,openkinect不错,但好像windows上跑不起来。openNI似乎更强大,但配置繁琐,现在我还没配置好。。。上周老板又催我做点东西出来,毕竟花了实验室1000多大洋,不能每次演示的时候就采个图像。所以这周就花两三天弄了下,还是按照之前的想法,做个隔空触摸的软件。以前做多点触摸的时候对CCV还是有一定研究的,所以改起来也很快,用下来效果还算可以吧,但隔空触摸的感觉总是有点怪,看来要发挥Kinect的作用,还是要搞高级的啊。
p.s.想搞高级东西的同学可以去http://www.openni.org/downloadfiles看看,如果配置好了的话我们一起探讨下~
刚刚为明天的实验室例会准备了个PPT,把其中的一些东西贴这里分享下。
Kinect是微软给XBOX360游戏机开发的一个体感传感器,配有彩色摄像头,深度传感器,加速度传感器,麦克风阵列,但由于Kinect强大的功能和相对低廉的价格,geeks们纷纷表示希望能在电脑上用它。于是就有多位大牛开发了驱动,目前我了解到的有三个:
1)CL NUI Platform
由NUI的大牛AlexP开发(他开发的其他著名产品包括PS3的windows驱动),可以到这里下载,目标平台是windows7,但我试下来XP上也可以使用,能够获取彩色摄像头,深度传感器以及加速度传感器数据,使用简单方便。我在前面的帖子里提供了一个简单的VS2008工程文件,将读入的图像转成opencv的iplImage
2)OpenKinect/libfreenect
由号称第一个破解Kinect的Hector Martin发起,可以到这里下载,目标平台是Linux and Mac,据说有人成功移植到了windows上,鄙人不才,没试成功。。。因为很多geek都是Mac的拥趸,所以开发参与者众多,不仅仅是个可以获得数据的driver,geek们还写了其他高级的东西,比如我前面提到的骨骼化,将彩色摄像头作为纹理贴在深度数据上等等,很吸引人啊。但我在windows上配置不起来,只能干流口水啊。。。
3)openNI
全称是open natural interface,可以到这里下载。从名字判断其终极目标大约是实现少数派报告的效果,从目前放出来的一些demo,恐怕已经超越了这个终极目标。它不是专为Kinect开发,但有Kinect的生产商PrimeSense的支持。非常眼馋啊,但配置比较繁琐,目前还没有在windows上配置成功,唉,郁闷呐。。。
以上是我了解到的几个driver,欢迎补充。
结合上述优缺点,作为不懂linux,没钱买Mac的悲剧geek,只能选择CL NUI Platform了。下面简单谈谈使用这个driver改写CCV
对CCV就不做过多介绍了,多点触摸的利器,几乎所有做多点触摸的公司都是直接使用或是间接借鉴了CCV,作为开发者之一鄙人相当自豪啊。所以现在改起来轻车熟路。读入深度数据,做个阈值化,距离小于阈值的置一,其余置零,就把深度图像转成了二值图像,然后把这个图像赋给CCV里的processedImg就好了,接下来CCV照常findContours,track, send TUIO。为了拍录像时好看,还读入了彩色摄像头的数据,显示在Source Image那里,纯粹为了显示,不做任何处理。
下面看视频吧,电脑比较破,同时开CCV,上层游戏,+屏幕录像比较卡,其实kinect CCV在mini mode下还是可以跑到30帧的。
因为代码是从CCV改的,秉承CCV的开源精神,我也把自己改的部分放上来吧,到这里下载。里面包含代码也包含了编译好的可执行文件。对于不懂怎样编译的同学,可以直接去http://nuicode.com/ 下载CCV-1.2-bin.zip,解压后用我提供的Community Core Vision.exe覆盖原文件,用我提供的config.xml覆盖data下的config.xml,再将ofxKinectCLNUI\dll下的CLNUIDevice.dll拷贝到与Community Core Vision.exe同层目录下应该就可以直接运行了。当然还是需要先安装kinect的驱动。(因为我在博客园上传文件的空间有限,所以只能让大家麻烦点啦)
以下是简单的说明。
1) install kinect\’s driver
请注意,目前该软件仅支持CL-NUI-Platform-1.0.0.1121,可以到这里下载
i\’m using AlexP\’s CL NUI Platform(version: CL-NUI-Platform-1.0.0.1121).
2) check out CCV from http://nuicode.svnrepository.com/svn/tbeta/trunk/tbeta/Windows
i\’m using revision 210.
3) modify CCV following steps below:
3.1) put ofxKinectCLNUI under addons
3.2) put CLNUIDevice.dll under other\dlls
3.3) substitute ofxNCoreVision.h and ofxNCoreVision.cpp under addons\ofxNCore\src\Modules
3.4) substitute config.xml under apps\addonsExamples\VS2008\bin\data
3.5) substitute calibration.xml under apps\addonsExamples\VS2008\bin\data
3.6) substitute Community Core Vision.vcproj under apps\addonsExamples\VS2008
另外请注意,VS2008必须打SP1补丁!
/*==============********==============*/
在这篇博文里更新了用openni的驱动玩多点触摸,不想用CLNUIPlatform的同学们可以试试。