- 02/01/2015 at 00:08 #2300
I plan on using the EyeX to track eye movements on something other than a monitor. I was thinking that I could draw different colored dots on the surface, and then set a timer that tells the user when to move their eyes to the next dot. Is this doable, and if so, what recommendations do you have? I know that the built in calibration procedure uses animation, both from dot to dot and to shrink the dot down for focus. Are these steps neccessary, and if so, how can they be reproduced without using a monitor?02/01/2015 at 14:27 #2302Jenny [Tobii]Participant
This should be doable using the Tobii Gaze SDK. The key aspects of the calibration process that you will have to consider are that the person has to look at a precise point of the Active Display Area at a precise time, and that the length of the time the person has to look at each point is not fixed but dynamic. Each point is a single command to the eye tracker, and a callback is called when the eye tracker has collected enough eye-gaze data for that point.
The animations of the built in calibration is to help the person focus on the precise point which is the calibration point. In your case you would have to make sure the person will be able to focus on a small enough point so that the eye-gaze data collected by the eye tracker for the point is valid.
In the Tobii Gaze SDK C-API download you will find the documented calibration API in the tobiigaze_calibration.h header file. There are two C++ samples illustrating the use of the API: Samples/MinimalCalibration and Samples/wxWidgetsCalibrationSample (in the latter, take a look at CalibrationViewModel.cpp).09/01/2015 at 23:46 #2345
Thanks for your response. I’ve designed several different grids and updated the calibration points in the minimal calibration sample program accordingly. Instead of using a timer, my idea was just to have the system beep when the user should look at the next dot. However, whenever I add std::cout << ‘\a’; to my code, the eye tracker disconnects and the calibration freezes after the first beep. The program itself does not crash, and Visual Studio doesn’t show any errors. The only changes I’ve made to the program are including iostream, modifying the gaze points, and adding a beep to the following section:
printf("-------------ADD POINT %d (%.1f, %.1f) ------------\n", _next_calibration_point, _calibration_points[_next_calibration_point].x, _calibration_points[_next_calibration_point].y); std::cout << '\a'; XSLEEP(2000); // Give the user some time to move the gaze and focus on the object12/01/2015 at 11:03 #2352Robert [Tobii]Participant
In the MinimalCalibration example, the add_calibration_point_handler function is run on a background thread. A beep or other synchronous GUI calls need to go on the main thread.12/01/2015 at 15:49 #2358
I’m not familiar with threading in C and I couldn’t find anything definitive on Google. Could you explain how to accomplish this?18/01/2015 at 13:40 #2395AndersParticipant
it sounds weird that the tracker should disconnect and all just because you do a
std::cout << '\a';. We’ll have to look into this.20/01/2015 at 13:02 #2397AndersParticipant
I tried making the changes that you described, except changing the calibration points, and I don’t see any of the problems that you describe. So the question is why it doesn’t work on your machine.
When you say that the eye tracker disconnects and the calibration freezes, can you describe in more detail what you observe? Are there any messages printed to the Output window in Visual Studio?
Robert’s comment about the UI thread doesn’t really apply in this case since console apps don’t care about threads.21/01/2015 at 00:28 #2398
Let me try downloading the SDK again just to make sure nothing else was modified. I’ll test this and get back to you later tonight.
- You must be logged in to reply to this topic.