feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

OpenCV 与 Touchlib

Posted on 2009-01-02 14:55  feisky  阅读(802)  评论(0编辑  收藏  举报
最近对流行的MULTITOUCH技术很感兴趣,顺便在网络上搜寻了一下,与TOUCHSCREEN(触摸屏)相比,利用计算机视觉实现的MULTITOUCH,其应用前景似乎更加广阔。利用OPENCV里面的基本功能,结合TOUCHLIB,可以做很多有意思的事情。
下面是关于TOUCHLIB的一个简单介绍,偷懒,就直接帖过来了,没有翻译。
网址: http://www.whitenoiseaudio.com/touchlib/
========================================================
What is Touchlib?
Touchlib is our library for creating multi-touch interaction surfaces. It handles tracking blobs of infrared light for you and sends your programs multitouch events, such as 'finger down', 'finger moved', and 'finger released'. It includes configuration app and few demos to get you started. It interaces with most major types of webcams and video capture devices. It currently works only under windows but efforts are being made to port it to other platforms.
Who Should Use Touchlib?
Touchlib only comes with simple demo applications. If you want to use touchlib you must be prepared to make your own apps. There are few ways to do this. You can build applications in C++ and take advantage of touchlib's simple programming interface. Touchlib does not provide you with any graphical or front end abilities it simply passes you touch events. The graphics are up to you. If you like, take look at the example apps which use OpenGL GLUT.
If you don't want to have to compile touchlib, binaries are available.
As of the current version, touchlib now can broadcast events in the TUIO protocol (which uses OSC). This makes touchlib compatible with several other applications that support this protocol, such as vvvvProcessingPureDataetc.. This also makes it possible to use touchlib for blob detection tracking and something like vvvv or Processing to write appliactions. Of course the other option is to do all your blob detection and processing in vvvv or processing. It's up to you. Supporting the TUIO protocol also enables distributed architecture where one machine can be devoted to detection and tracking and another machine can handle the application.
If you don't like touchlib and want to program your own system, the latest version of OpenCV (1.0) now has support for blob detection and tracking. This might be good starting point.
My Mindmap
My mindmap for the touchscreen is available hereThis contains info on what parts you'll need for the construction of the screen, where to find them and some very basic instructions for how to build screen. It also includes some more links. hope it's useful for some of the people reading this who are interested in doing their own screens. You'll need Freemind (which is coincidentally, free), in order to view it. I'm big fan of freemind for planning out projects and getting ideas down. It's hierarchical nature allows you to organize and hide parts you are not interested in. It can also link to images, other mindmaps and web pages.
FAQ
Frequently asked questions about the construction of the screen can be found here.
Where to get the source to Touchlib, our multitouch table library:
All our source code is available on our Google Code site at http://code.google.com/p/touchlib/ You can acces the repsitory using Subversion. If you are using windows, get TortoiseSVN. Use Tortoise to access the repository and download all the files (much easier than going thru the web interface). If you are interested in porting touchlib to linux or the mac, please [email=email me]admin%20at%20whitenoiseaudio%20com[/email]. The system was written in such way that it should be easy to port and does not depend heavily on any windows specific api's.
Binaries are available here.
Touchlib is written in C++ (the BlobTracking Analysis is all written by yours truly) and has Visual Studio 2005 Solution ready to compile. No docs are available right now and it's windows only (though it should be possible to make everything compile under other OS's with little work). It currently depends on OpenCV, DirectShow (you'll need the Microsoft Platform SDK), VideoWrapper and the DSVideoLib. The source code includes our main library which you can link into your application to start capturing touch events. It has support for most major camera/webcam types. It also includes basic config app which will need to be run in order to calibrate your camera, and has couple example apps. Alternately, I've heard other people have used things like vvvvEyesWebprocessing and Max/MSP in order to do blob tracking processing and make applications. You can check out some of the demo apps if you want to see how it works. Pong or the config app should be fairly easy to follow. Setting up bare minimum multitouch app should only take dozen lines of code or less.
DL Links for dependencies:
  • OpenCV used Beta 5. Hopefully it is compatible with newer versions (RC is available now). 
  • DSVideoLib 
  • VideoWrapper 
  • Platform SDK 
  • Also GLUT was used for most of the applications. 
  • The DirectX SDK is also required 
  • OSCPack for the OSC application 
You'll need to configure few environment variables to get everything compiled. They are:
  • DSVL_HOME dsvideolib root directory 
  • VIDEOWRAPPER_HOME root directory of the video wrapper library 
  • OPENCV_HOME root directory of OpenCV 
  • OSCPACK_HOME root directory of oscpack 
The config app
In order to calibrate the touchlib library for your camera and projector, you'll need to run the config app. Here's how it works. You'll need to set up your computer so that the main monitor is the video projector so that the app comes up on that screen. Run the config app. Press 'b' at any time to recapture the background. Tweak the sliders until you get the desired results. The last step (rectify) should just have light coming from your finger tips (no background noise, etc). When you are satisfied press 'enter'. This will launch the app in full screen mode and you'll see grid of points (green pluses). Now you can press 'c' to start calibrating. The current point should turn red. Press on your FTIR screen where the point is. Hopefully press is detected (you can check by looking in the debug window). Press 'space' to calibrate the next point. You'll continue through until all points are calibrated. Note that the screen may not indicate where you are pressing.& ...
无觅相关文章插件,快速提升流量