We’ve made great process to improve the use of bright eye/glint to detect the eye and where it’s looking. For a bit of background, see our last post.
Here’s the latest circuitry for detecting “bright eye” and tracking glints! “Bright eye” occurs when the eye is flooded with concentrated infrared light (we’ve placed these right by the camera lens) causing the pupil to turn white and making it easy for us to know where the eye is within the camera frame. By alternating between turning on/off circuit A (LEDs around the camera) and circuit B (two hexagonal-shaped clumps of 10 infrared LEDs, one to the left and one to the right of the camera), we alternate between seeing the bright eye pupil and then the glint created from the left and right set of LEDs. Using subtraction between these two frames we can clearly find the pupil and detect where it’s looking.
Subtraction between Bright Eye and Glint (video)
A few notes/issues about the overall circuit/testing:
- We need to test this out under different lighting conditions. Most testing has been done in a low lit room at night. We need to test at different times of day with varying amounts of sunlight.
- We’d like to try to design the circuit without an Arduino to bring down the costs. Next step is to try making a Hackduino (instructable can be found via hackduino.org courtesy of Joe Saavedra).
- An issue we’ve working around but would like to fix is that the bright eye/glint detection is most precise when the eye is not in the top of the frame. The top of the frame are at risk of not lighting up the eye properly because the CMOS camera’s scrolling shutter interferes. The top 1/5th of frame is at risk of not lighting up the eye properly because the camera’s scrolling shutter interferes. If anyone has ideas for how to better account for the camera’s shutter and give us more real estate with which to detect the pupil, please let us know by commenting on this post.
DETAILS OF THE CIRCUITRY
Programmed using Arduino: For the code, see the bottom of our last post. Bottom left of this schematic shows how the parts of the circuit hook up to Arduino
Circuit A (top left): We’ve changed our camera lens to a narrower 25mm lens with a IR filter. Surrounding the lens are 16 IR LEDs, which are soldered together and wired (with resistors) to the circuit board.
Circuit B (right): Two sets of 10 IR LEDs. Each set of LEDs are soldered together and wired (with resistors) to the circuit board.
In order to control/ensure that the brightness of the face is the same in all frames (so that we can do a clean subtraction and not get any noise from the face) we’ve attached a potentiometer dial to the LED circuits so we can match the overall brightness of circuit A’s LEDs with the overall brightness of circuit B’s LEDs.
As mentioned in a previous post, we’re setting the VSYNC signal from the PS3 Eye Camera at 60 frames per sec (60 fps) and alternating between circuit A and circuit B every other frame. We’ve used openFrameworks to save 300 consecutive camera images. Stepping through the 3oo frames we see, for example, that the odd frames show the bright eye and the even frames show the glint from the right/left LED clusters. (Note: it’s not quite exact but very close. Out of 300 frames, about two did not have the right light source showing. However, we believe for our purposes that this is fine.)










