Project Information

This is where you'll find some of the programming projects i'm currently working on or have worked on in the past. Some of the work is academic, other stuff is just for fun.

Hair Sketching
Modeling detailed hairstyles for virtual 3D characters is a difficult and time-consuming process with existing 3D modeling tools. This project aims to simplify the process by presenting an intuitive sketching interface to model 3D hairstyles using a pressure-sensitive tablet.
PDF (1.51 MB) | Win32/GLUT Demo (Coming Soon)
Visual Touchpad
The Visual Touchpad is a low-cost alternative to more expensive multi-finger touch-sensitive hardware. Using two off-the-shelf web cameras and simple computer vision algorithms, the Visual Touchpad allows multiple fingertip positions to be detected for all five fingers of each hand, allowing for rich two-handed and multi-finger interactions.
PDF (1.5 MB) | Visual Touchpad Information
Real-time Hand Tracking for Interaction
This is a course project for CSC2503H Computational Vision at UofT. The system can track a user's hands and fingers in real-time (without the use of any special markers or gloves) in order to interact with a graphical user interface in either 2D or 3D.
PDF (522 KB) | Win32 Demo
Digital Face Replacement in Photographs
This is a course project I worked on for CSC2530H Visual Modeling at UofT. The basic idea is to be able to replace a person's face in a single photograph, under some arbitrary illumination, with that of another person. More information (paper, screenshots) can be found on my Digital Face Replacement page.
PDF (443 KB) | PowerPoint Slides (1.9 MB)
Robust Registration of Virtual Objects for Real-time Augmented Reality
This is my MCS thesis work, which involves robustly combining virtual 2D and 3D objects with real-time video sequences. More information (papers, videos, screenshots) can be found on the NRC's Augmented Reality Research Page.
PDF (2.3 MB) | JPEG Images | Win32 Demo
Face Tracking for Perceptual User Interfaces
This was work done during the summer of 2001 with the Computational Video Group at the National Research Council of Canada. We first developed a stereo (two-camera) face tracking system using standard USB web cameras (Eye-UI). This allowed us to reconstruct 3D position and orientation information of a user's face and head, which could be used to control the movement of a virtual object in 3D space. We then used the same tracking technology to develop a single-camera nose tracking system (Nouse). While the single-camera system only gives us 2D control of a virtual object, it is enough to manipulate the mouse cursor and simple 2D video games (such as Bubble Frenzy) hands-free!
PowerPoint Slides (12.7 MB) | Nouse | Eye-UI
Level-of-detail Terrain Engine
This was a project I did for CSC2504H Computer Graphics at UofT. It implements a dynamic level-of-detail 3D terrain that can be fully navigated at real-time frame rates. The OpenGL-based demo runs under Windows, and includes a simple physics-based truck that can be controlled using the mouse. The report was written as my undergrad CS honours project, and describes the basic tesselation algorithm.
PDF (1.1 MB) | JPEG Images | Win32 Demo
Hand-Printed Character Recognizer Using Neural Networks
This was my 4th year AI project, which involved researching and implementing hand-printed character recognition technology using neural networks. The implementation turned out pretty good; even with a small training set it could recognize hand-written digits about 70% of the time. I'm almost certain that with a training set of around 1000 examples, the performance of the character recognizer could be increased to the 90% accuracy range.

One extra twist I added to this project was a general face recognizer. Thus I was able to train a network with people's faces and an associated name, and the network could then recall a person's name after feeding in a facial image. I'm currently using this technology to develop my own Terminator...
PDF (137 KB) | JPEG Images | Win32 Demo
Fullscreen OpenGL Code
After working with OpenGL I realized that it was lacking any sort of fullscreen mode-switching code, which is important when creating a game engine. Playing a 3D game in a window just isn't very immersive. So I whipped up some code which makes some mode-switching calls to perform a video mode switch right before initializing an OpenGL context. If you're interested in some fullscreen code for your OpenGL project, feel free to incorporate this into your engine. There are two versions; one using standard Windows system calls, the other using DirectDraw to perform the video mode change.
Win32 ZIP (17 KB) - Standard | Win32 ZIP (19 KB) - DirectDraw

Research Links

CiteSeer
This is the NEC Research Institute's CiteSeer page, which is a scientific literature digital library where you can find papers and technical reports on almost any Computer Science related topic. The great thing about this site is that its free (unlike the IEEE or ACM digital libraries).

IEEEXplore (IEEE Digital Library)
This is the IEEE's Digital Library, where you can access conference proceedings and journal publications on almost any computer science or engineering topic. Requires membership, but most universities have access.

IEEE Computer Society Digital Library
This is the IEEE Computer Society's Digital Library, which contains lots of technical papers on Computer Science or Engineering related topics. Membership isn't free, but its a decent investment if you're doing some funky research.

ACM Digital Library
This is the ACM's Digital Library, which is similar to the IEEE Computer Society's Digital Library. Again, membership isn't free, but what else are student loans for?
 

"Satisfaction lies in the effort, not in the attainment. Full effort is full victory."
- Mahatma Gandhi