
| 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
}