By making arrays of the horizontal and vertical projections of the difference images, I could make a representation of the images posted last week. Using the proportions of my face, and approximating the distance between a typical pair of eyes, I found where the first peak in the array was, checked to make sure the approximate distance between the eyes had a difference value of zero (no movement), and checked to see if there was a second peak after the space. If all this was true, I checked to see if the vertical projection only had one peak.
I was able to get the program to detect my blinks this way. There are still some problems though. Right now, the detection is very sensitive. Sometimes it detects a blink when opening the eyes a little wider, or detects two blinks when I only blink once. Also, when trying to point the cursor at the margins of the screen, specifically the lower corners, I often have to blink several times to get it detected. Another lesser issue is that the blink detection works best when tracking a feature very close to the eyes, like the edge of an eyebrow. However, when blinking, the feature moves, which causes the cursor to move as well, which, when trying to click on a smaller object, would make accuracy very difficult.
To further test my code, I decided to ask some other people in the lab to try using the Camera Mouse with my blink detection. My worry was that the proportions and difference values I used to implement my blink detection are specific to my face. So I asked another member of my project team, Caitlin Conner (BU '09) to try it out too. With her, the blink detection still worked, but she ran into many of the same problems as I did.
Using the eyebrow is the best feature to track in terms of responsiveness, but unfortunately, the cursor moves a large amount when the user blinks. Also, the bottom of the screen is very hard to reach. We speculated that it was because the camera was located on the top of the computer monitor, so when aiming towards the bottom of the screen, the eyes are much harder to detect.
By lowering the difference value cutoff for the brightness from 100 to 85, blinks at the bottom of the screen seemed to get detected more easily, but at the same time, the detection became more sensitive in all other areas, too, making the frequency of the detection of two blinks instead of one greater.
On Tuesday, July 15th, around 20 high school girls came to visit our lab through the Pathways program. I took this opportunity to test out my blink detection to see how it worked with a larger, more diverse crowd. I found that the detector worked decently, but oddly enough was not sensitive enough to pick up the blinking of some of the students. Also, I found that by restricting the area that image searched for a blink complicated the process because accessing all parts of the screen became difficult when the user could not move their eyes out of the restricted box. However, in a more recent version that I made to get rid of this box, I found that movement in the background caused the program to not be able to pick up blinks at all. Other suggestions that I got from this visit were to experiment more with users with glasses and to adjust it to adapt to each specific person's blinking speed.
In the next week or so I plan on trying to combine the blink detection method I am currently using with another method that uses matching templates in order to make the accuracy of the detection better.