Code Samples - corycorvus/Eye-Tracking-Wiki GitHub Wiki

Code Samples

Eye Tracker Gaze

Snippets

  • main functions
  • get data 120hz
  • log data
  • heat maps

Calibration

int calibrationResult= ViveSR.anipal.Eye.SRanipal_Eye_API.LaunchEyeCalibration(System.IntPtr.Zero); // Ptr not implemented so using Zero

Needs Calibration Check

bool needsCalibration = false;
ViveSR.anipal.Eye.SRanipal_Eye_API.IsUserNeedCalibration(ref needsCalibration);

Is Pro Eye Check

bool isProEye = ViveSR.anipal.Eye.SRanipal_Eye_API.IsViveProEye();

Set Filtering

void SetFiltering(double filteringLevel) 
{
    EyeParameter parameter = new EyeParameter
    {
        gaze_ray_parameter = new GazeRayParameter(),
    };

    parameter.gaze_ray_parameter.sensitive_factor = filteringLevel;
    Error error = SRanipal_Eye_API.SetEyeParameter(parameter);
}

Focus

Note: Focus() wraps the unity API Physic.Raycast()

Filtering

Filtering is added to prevent gaze tremble (ex. when looking at distant objects). Use SetEyeParameter to set the filtering level with "sensitive_factor". You can adjust the variable to effect the cutoff slope in the filter.

1 is raw gaze vector without adding a filter post-processing for gaze tremble.

0 is post processed with strongest filter to remove gaze tremble.`

The default value is 0.007 and you can multiply or divide the variable by 10 until you notice the effect on the gaze data.

Note: SetEyeParameter filtering only works on gaze rays.

EyeData_v2

EyeData_v2 has "expression_data", which supports more facial expression blendshapes.

Convergence Distance

Note: "convergence_distance_mm" is currently not implemented.

Main SDK Functions

//via verboseData    
    pupil_diameter_mm                       // pupil diameter in millimeters (~2.5)
    pupil_position_in_sensor_area           // pupil position relative to lenses (0.5,0.5 is center)
    eye_openness                            // eye openness (0 closed, 1 open)
    gaze_origin_mm                          // millimeter position of cornea center relative to each lens center (~ 30,-1,-25/-30,1,-25)
    gaze_direction_normalized               // gaze direction vector
    convergence_distance_mm                 // currently not implemented

SRanipal_Eye.Focus                                      // check current object collider in focus
GetValidity                                             // data validity bitmask
SRanipal_Eye.LaunchEyeCalibration();                    // eye calibration
SetEyeParameter / GetEyeParameter                       // filtering level

SRanipal_Eye_Framework.Instance.EnableEyeVersion        // framework version
SRanipal_Eye_Framework.Instance.StartFramework();       // start framework
SRanipal_Eye_Framework.Instance.StopFramework();        // stop framework
SRanipal_Eye_Framework.Status                           // framework status

    Vector2 vector2;
    float eyeOpenLeft;
    SRanipal_Eye.GetPupilPosition(EyeIndex.LEFT, out vector2);
    SRanipal_Eye.GetEyeOpenness(EyeIndex.LEFT, out eyeOpenLeft);