Forum Discussion

🚨 This forum is archived and read-only. To submit a forum post, please visit our new Developer Forum. 🚨
virtualHCG's avatar
virtualHCG
Expert Protege
2 years ago

Quest Pro and blinking detection in Unreal Engine

Has anyone being able to detect eyes closed/open state using Meta XR and Quest Pro? We are able to get tracking data but the eye closed variable never changes. Looking at the Meta XR code it seems eye blinking is not being returned (see screenshot). The confidence value is always at 0.998047 regardless of if the eyes are closed or not. Gaze Direction and Gaze Origin are returning data but for some reason when the eyes are closed Gaze Direction keeps outputting changing data, so not sure what can be used to detect eyes closed/open.

 

4 Replies

Replies have been turned off for this discussion
  • Also interested in this, I'll be trying to read the FaceExpression.EyesClosed value in the meantime. 

  • WoodyLoks's avatar
    WoodyLoks
    Honored Guest

    EyeClosed Value is always zero when I tried 😞
    Any update on this thread? Were you guys ( ccd_research JensNimiqueta virtualHCG ) able to get any value apart from zero using FaceExpression.EyesClosed ?

    I would really appreciate your time and effort into this matter. Thanks in Advance!

  • Hi! Thanks for the reminder.

    I was able to get it working on Meta Quest Pro using a `OVRFaceExpressions` instance attached to a `GameObject` in my scene.

    Within the script to manage eye tracking data collection, I get the `OVRFaceExpressions` instance using something like this:

     

    // Top of the class
    private OVRFaceExpressions faceComponent;
    
    // `Start` function
    public void Start()
    {
        // ...
        faceComponent = FindObjectOfType<OVRFaceExpressions>();
        // ...
    }

     

    I have the following in my `Update` method collecting the actual `EyesClosed` estimates:

     

    float LBlinkWeight = -1.0f;
    float RBlinkWeight = -1.0f;
    if (faceComponent)
    {
        faceComponent.TryGetFaceExpressionWeight(OVRFaceExpressions.FaceExpression.EyesClosedL, out LBlinkWeight);
        faceComponent.TryGetFaceExpressionWeight(OVRFaceExpressions.FaceExpression.EyesClosedR, out RBlinkWeight);
    }

     

    I was able to get values aside from 0.0 or 1.0 out of this. Make sure in your OVR Manager instance you've selected all the options to enable face tracking, as it's separate to eye tracking. Settings I changed for face tracking:

    • Quest Features -> General -> Face Tracking Support -> "Required"
    • Movement Tracking -> Face Tracking Data Sources -> Visual [x]; Audio [x]
    • Permission Requests On Startup -> Face Tracking [x]

    EDIT: I know this thread is Unreal Engine, this solution is in Unity. I figured I'd reply anyway in case it is helpful.