Yes, the FOVE Research API (included as part of the FOVE SDK) exposes the capability to get full access to the eye images.
The following is in reference to the C/C++ API, but bindings to C#/Python work fundamentally the same way:
- First you need to create a headset object using createHeadset. If you are using a game engine plugin, you simply need to access the headset object already created by the plugin code. From Unity this is exposed in the FoveInterface.
- From the Headset object, you can call Headset::getResearchHeadset to receive a research headset object. This is the interface to the research API.
- Keep in mind that we do not maintain backwards compatibility with the Research API, so if you are using v0.16.X SDK, you should run it with the v0.16.X FOVE software release, for example. Please do not distribute general purpose software using the Research API.
- Register for eye image support by passing ResearchCapabilities::EyeImage to ResearchHeadset::registerCapabilities. This can also be done directly in the getResearchHeadset call from step #2 to avoid this extra step. Enabling the capability will enable any additional software and hardware as needed and prepare for image transmission over IPC to your application from the FOVE service.
- Each frame, call ResearchHeadset::getImage with ImageType::StereoEye to receive the eye images. This includes both the left and right eye image combined into a single bitmap. There is also a timestamp in the output struct.
- Please see the documentation about the lifecycle of the data returned. The data returned is currently invalidated upon the next call to the same function, and could potentially crash if you access it after invalidation.
- Keep in mind that the image returned contains the standard bitmap header, and the pixel data is not at the first byte. Furthermore, the height in the header may or may not be negative to indicate a top-down bitmap as opposed to a bottom-up bitmap.
It is highly recommended that you run image collection on a dedicated thread. The eye tracker runs at a different frame rate from the display for FOVE0.
To fetch the full framerate of the camera, you can use Headset::waitForNextEyeFrame to sleep your thread until the next frame. This ensures that you wake each time a new frame is available. For FOVE0, this means your thread will wake up 120 times each second, as long as the computer is keeping up. The latency between individual frames will vary based on various conditions such as USB data transfer speed, and the OS's scheduling system.