Howdy,
First I would like to thank the community for all of the information that they have provided me in regards to getting my screen built. Now, a little about me, and my project. My name is Carmen, and my colleague’s name is Jon. We are working on a Mac specific version of an FTIR driver for our senior project. The project has been dubbed the iTouch. We chose the project because we were really interested in Jeff Han’s research, and are both very keen on the idea of natural user interfaces. The design process started almost a year ago around the beginning of May. We decided that the idea of a cross platform application would be nice, but we realized that the task at hand was more of a driver and less of a traditional application. When a hardware company produces a driver they make OS dependent drivers in order to leverage native performance. We wanted to produce a driver that would be extremely powerful and yet utilize minimal system resources.
After researching, we felt that OS X provided the best solutions to help us accomplish our goals. Our driver is unique from current solutions because it utilize native OS X tablet events instead of utilizing a 3rd party event system. Image processing API’s was another benefit OS X offered that was a key deciding factor. Apple provides two methods for handling images, vImage and their Core Framework. vImage is an extremely powerful wrapper around low-level C and assembly instructions, SSE and the PPC equivalent, that allows for quick calculations using image kernels. The Core Framework is in a way similar to the OpenCV framework. It allows for easy processing of images with prepackaged functions. When you boil down the CF you will end up back at vImage and a few other low level libraries. Now to answer a few important questions.
What technologies are behind the iTouch?
Programming Language: Currently it is written in C/C++, but that will change very soon over to Obj. C. It is not OO. I am just using Vectors from C++.
Video Capture: We are currently using the Sequence Grabber API. I intend to move this over to the QTkit API that arrived with Leopard as soon as it becomes stable.
Image Processing: This is currently a toss up between the Core Framework and vImage. I would be using vImage because of the immense performance difference, but I have not figured out all of the kernels. Currently we are using the Core Framework.
Blob Detection: Another colleague and I have written our own blob detection algorithm. It is the only part of the project that is platform independent.
Events: We are utilizing the Quartz Event Services API, Event Taps, to send our events. Apple provides two types of system tablet events: Point and Proximity. A proximity event occurs when a pen is hovering over the surface, and when the pen leaves the surface. The point event represents a touch. When a new finger touches the screen we fire a proximity event followed by a point event. While that finger is still on the screen we send point events.
When can I get my hands on it?
Our project is due on April 24th. I currently do not plan on releasing that version to the public. Mostly because it will be a little clumsy on the UI side. If the community will be a little forgiving I will consider releasing it. I plan on taking the summer to convert the project over to Cocoa and Obj C, so I can make a pretty UI with all of the fancy Cocoa widgets.
When it is release, how will it be release?
I am not 100% sure on this one yet. If I release the first version, I will only be releasing the application. When I release the first official version, it will be released under some version of the GPL.
I think I have pretty much covered all of the bases. I have a bunch of data as far as results go to share with community, but I have yet to have a chance to compile them. As I mentioned before, our project is due the 24th of April, so this is I crunch time for us to get all of the kinks worked out and some demo apps written. I will post more information as it arises. Please feel free to ask any questions. I will do my best to answer them as quickly as possible.
