Face Tracking
Using Face Tracking with SightLab
SightLab supports face tracking on any headset that uses the OpenXR standard, including Meta (Quest Pro, Quest 3) and HTC Vive Focus Vision and Vive Focus 3 with the Face Tracker add-on
Adding Face Tracking to Your Script
To log facial tracking data, import the relevant module:
# For Meta/Quest
from sightlab_utils import face_tracker_data
# For HTC headsets
from sightlab_utils import face_tracker_data_htc
This module automatically saves face tracking data to your experiment’s /data
folder.
Built-In Face Tracking Templates & Examples
SightLab includes several example scripts for leveraging facial tracking:
- Mirror Demo Use this to map facial expressions to an animated avatar. ➤ Edit or remove the mirror if you only need the avatar mapping.
- FaceTracker_Sliders Demonstrates how facial expressions can drive GUI sliders in real time.
- Facial_Expressions_Over_Time Visualizes expression data with a matplotlib chart. Can load data from any face tracking-enabled trial.
Example Script
See Face_Tracking_Saving
or Face_Tracking_Saving_HTC
in the Face_Tracking_Data
folder in ExampleScripts
from sightlab_utils import face_tracker_data
import sightlab_utils.sightlab as sl
from sightlab_utils.settings import *
sightlab = sl.SightLab()
# Set up with custom values
face_tracker_data.setup()
def sightLabExperiment():
while True:
yield viztask.waitKeyDown(" ")
# Start the update process
vizact.ontimer(0, face_tracker_data.UpdateAvatarFace)
yield sightlab.startTrial()
yield viztask.waitKeyDown(" ")
yield sightlab.endTrial()
viztask.schedule(sightlab.experiment)
viztask.schedule(sightLabExperiment)
Face Tracking Expression Parameters
Here are the parameters available for Face Tracking Expression:
For Facebook (Meta)
EXPRESSION_BROW_LOWERER_L = 0
EXPRESSION_BROW_LOWERER_R = 1
EXPRESSION_CHEEK_PUFF_L = 2
EXPRESSION_CHEEK_PUFF_R = 3
EXPRESSION_CHEEK_RAISER_L = 4
EXPRESSION_CHEEK_RAISER_R = 5
EXPRESSION_CHEEK_SUCK_L = 6
EXPRESSION_CHEEK_SUCK_R = 7
EXPRESSION_CHIN_RAISER_B = 8
EXPRESSION_CHIN_RAISER_T = 9
EXPRESSION_DIMPLER_L = 10
EXPRESSION_DIMPLER_R = 11
EXPRESSION_EYES_CLOSED_L = 12
EXPRESSION_EYES_CLOSED_R = 13
EXPRESSION_EYES_LOOK_DOWN_L = 14
EXPRESSION_EYES_LOOK_DOWN_R = 15
EXPRESSION_EYES_LOOK_LEFT_L = 16
EXPRESSION_EYES_LOOK_LEFT_R = 17
EXPRESSION_EYES_LOOK_RIGHT_L = 18
EXPRESSION_EYES_LOOK_RIGHT_R = 19
EXPRESSION_EYES_LOOK_UP_L = 20
EXPRESSION_EYES_LOOK_UP_R = 21
EXPRESSION_INNER_BROW_RAISER_L = 22
EXPRESSION_INNER_BROW_RAISER_R = 23
EXPRESSION_JAW_DROP = 24
EXPRESSION_JAW_SIDEWAYS_LEFT = 25
EXPRESSION_JAW_SIDEWAYS_RIGHT = 26
EXPRESSION_JAW_THRUST = 27
EXPRESSION_LID_TIGHTENER_L = 28
EXPRESSION_LID_TIGHTENER_R = 29
EXPRESSION_LIP_CORNER_DEPRESSOR_L = 30
EXPRESSION_LIP_CORNER_DEPRESSOR_R = 31
EXPRESSION_LIP_CORNER_PULLER_L = 32
EXPRESSION_LIP_CORNER_PULLER_R = 33
EXPRESSION_LIP_FUNNELER_LB = 34
EXPRESSION_LIP_FUNNELER_LT = 35
EXPRESSION_LIP_FUNNELER_RB = 36
EXPRESSION_LIP_FUNNELER_RT = 37
EXPRESSION_LIP_PRESSOR_L = 38
EXPRESSION_LIP_PRESSOR_R = 39
EXPRESSION_LIP_PUCKER_L = 40
EXPRESSION_LIP_PUCKER_R = 41
EXPRESSION_LIP_STRETCHER_L = 42
EXPRESSION_LIP_STRETCHER_R = 43
EXPRESSION_LIP_SUCK_LB = 44
EXPRESSION_LIP_SUCK_LT = 45
EXPRESSION_LIP_SUCK_RB = 46
EXPRESSION_LIP_SUCK_RT = 47
EXPRESSION_LIP_TIGHTENER_L = 48
EXPRESSION_LIP_TIGHTENER_R = 49
EXPRESSION_LIPS_TOWARD = 50
EXPRESSION_LOWER_LIP_DEPRESSOR_L = 51
EXPRESSION_LOWER_LIP_DEPRESSOR_R = 52
EXPRESSION_MOUTH_LEFT = 53
EXPRESSION_MOUTH_RIGHT = 54
EXPRESSION_NOSE_WRINKLER_L = 55
EXPRESSION_NOSE_WRINKLER_R = 56
EXPRESSION_OUTER_BROW_RAISER_L = 57
EXPRESSION_OUTER_BROW_RAISER_R = 58
EXPRESSION_UPPER_LID_RAISER_L = 59
EXPRESSION_UPPER_LID_RAISER_R = 60
EXPRESSION_UPPER_LIP_RAISER_L = 61
EXPRESSION_UPPER_LIP_RAISER_R = 62
CONFIDENCE_LOWER_FACE = 0
CONFIDENCE_UPPER_FACE = 1
For HTC:
EYE_LEFT_BLINK = 0
EYE_LEFT_WIDE = 1
EYE_RIGHT_BLINK = 2
EYE_RIGHT_WIDE = 3
EYE_LEFT_SQUEEZE = 4
EYE_RIGHT_SQUEEZE = 5
EYE_LEFT_DOWN = 6
EYE_RIGHT_DOWN = 7
EYE_LEFT_OUT = 8
EYE_RIGHT_IN = 9
EYE_LEFT_IN = 10
EYE_RIGHT_OUT = 11
EYE_LEFT_UP = 12
EYE_RIGHT_UP = 13
LIP_JAW_RIGHT = 0
LIP_JAW_LEFT = 1
LIP_JAW_FORWARD = 2
LIP_JAW_OPEN = 3
LIP_MOUTH_APE_SHAPE = 4
LIP_MOUTH_UPPER_RIGHT = 5
LIP_MOUTH_UPPER_LEFT = 6
LIP_MOUTH_LOWER_RIGHT = 7
LIP_MOUTH_LOWER_LEFT = 8
LIP_MOUTH_UPPER_OVERTURN = 9
LIP_MOUTH_LOWER_OVERTURN = 10
LIP_MOUTH_POUT = 11
LIP_MOUTH_SMILE_RIGHT = 12
LIP_MOUTH_SMILE_LEFT = 13
LIP_MOUTH_SAD_RIGHT = 14
LIP_MOUTH_SAD_LEFT = 15
LIP_CHEEK_PUFF_RIGHT = 16
LIP_CHEEK_PUFF_LEFT = 17
LIP_CHEEK_SUCK = 18
LIP_MOUTH_UPPER_UPRIGHT = 19
LIP_MOUTH_UPPER_UPLEFT = 20
LIP_MOUTH_LOWER_DOWNRIGHT = 21
LIP_MOUTH_LOWER_DOWNLEFT = 22
LIP_MOUTH_UPPER_INSIDE = 23
LIP_MOUTH_LOWER_INSIDE = 24
LIP_MOUTH_LOWER_OVERLAY = 25
LIP_TONGUE_LONGSTEP1 = 26
LIP_TONGUE_LEFT = 27
LIP_TONGUE_RIGHT = 28
LIP_TONGUE_UP = 29
LIP_TONGUE_DOWN = 30
LIP_TONGUE_ROLL = 31
LIP_TONGUE_LONGSTEP2 = 32
LIP_TONGUE_UPRIGHT_MORPH = 33
LIP_TONGUE_UPLEFT_MORPH = 34
LIP_TONGUE_DOWNRIGHT_MORPH = 35
LIP_TONGUE_DOWNLEFT_MORPH = 36