faceAPI

Specifications

HeadTrackerV1 HeadTrackerV2 Notes
Tracking State Tracking a face at framerate
Min Face Size (pixels) 24
Max Face Occlusion (%) 50
Head Rotation X (deg) -20<X<45 -30<X<60 Horizontal axis (ear to ear)
Head Rotation Y (deg) -30<Y<30 -90<Y<90 Vertical axis (up through head)
Head Rotation Z (deg) -90<Z<90 Camera axis (nose)
Positional Error (cm) <1cm Even illumination, no occlusion
Rotational Error (deg) <3 deg Even illumination, no occlusion
CPU Load (30hz USB webcam) (Total% / Process%) 12%/5% 30%/15% Intel Core-2 Duo, 2.4GHz, 4MB Cache, Logitech Quickcam Deluxe for Notebooks
CPU Load (60hz firewire)
(Total% / Process%)
6%/1% 8%/1% Intel Core-2 Duo, 2.4GHz, 4MB Cache, PointGrey Flea
Initializing State Finding a new face
Min Face Size (pixels) 24.00 Distance between outer eye corners
Head Rotation X (deg) <15 Horizontal axis (ear to ear)
Head Rotation Y (deg) <15 Vertical axis (up through head)
Head Rotation Z (deg) <30 Camera axis (nose)
Time to Acquire (typical) (secs) 0.3 – 3.0 Assuming head is within in geometric constraints
CPU Load while acquiring face 50% Intel Core-2 Duo, 2.4GHz, 4MB Cache
Searching State Quick recovery from tracking failure
Recovery Conditions Face front, no occlusion Any pose, no occlusion
Min Recovery Time 1 frame
CPU Load (%) 20% Intel Core-2 Duo, 2.4GHz, 4MB Cache

Sample faceAPI Code

{
// STARTUP

smAPIInit();
// Register windows driver model (WDM) cameras
smCameraRegisterCategory(SM_API_CAMERA_CATEGORY_WDM);
// Create a new Head-Tracker engine
smEngine engine;
smEngineCreate(SM_API_ENGINE_LATEST_HEAD_TRACKER,&engine);
// Register a callback function to receive the tracking data
smHTRegisterHeadPoseCallback(engine,0,receiveHeadPose);
// Create and show a video-display window
smVideoDisplay video_display;
smVideoDisplayCreate(engine,&video_display,0,TRUE);
// Start tracking
smEngineStart(engine);

// SHUTDOWN

// Destroy engine
smEngineDestroy(&engine);
// Destroy video display
smVideoDisplayDestroy(&video_display);
smAPIQuit();

}

// Callback routine – called by head-tracker internal thread.
void receiveHeadPose(void *,smHTHeadPose head_pose)
{

// Position of head is in struct head_pose.head_pos as a 3D x,y,z coordinate in meters
// measured releative to the camera, where Z is the camera axis.

// Rotation of head is in struct head_pose.head_rot as a 3D x,y,z euler angle rotation in radians
// measured releative to the camera, where Z is the camera axis.

// Position of left and right eyeball centers also available as 3D position coordinates.
// as head_pose.left_eye_pos and head_pose.right_eye_pos

}