Thanks Jenny, I will look into the EyeX SDK then, I had assumed that the Gaze SDK would give me more detail about the actual eye position, but honestly I would rather go with EyeX since it ‘just works’ out of the box.
I did find it fascinating to see that I could get a reasonably accurate calculation for my own IPD just by looking at the difference between the two eye positions. I was expecting that value to vary quite a bit with my head position due to accuracy errors, but it seems to do a great job! It gave me some confidence that this may work.
I noticed that fast movement (well not really slow movement) of your head in the horizontal plane causes the eye tracker to drop an eye, and/or causes some lag in the position of only one of the eyes. It seems like position of each eye is read out in separate passes instead of at the same time. I don’t know the details but presumably that is why the red lights are blinking all the time? I was wondering if you could not add in some prediction code that moves the eye position based on previous frames of motion. I know that head tracking is secondary to accurate eye tracking, but I would think that it would help improve the eye tracking as well. And since the eyes are always placed a fixed distance from each other (mechanically so to speak) prediction code should work well in this case. We use tricks like this in our own game to estimate where a car will be in the future, it is easy enough to look at the previous velocity and interpolate a new position. We take it a lot farther than that but it should be enough for your needs.