Specification
|
HeadTrackerV1 |
HeadTrackerV2 |
Notes |
Tracking State |
|
|
Tracking a face at framerate |
Min Face Size (pixels) |
50 |
|
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) |
<1 |
Even illumination, no occlusion |
Rotational Error (deg) |
<3 |
Even illumination, no occlusion |
CPU Load (30hz USB webcam) (Total% / Process%) |
20/10 |
35/25 |
Intel Core-2 Duo, 2.4GHz, 4MB Cache, Logitech Quickcam Pro 5000 |
CPU Load (60hz firewire)
(Total% / Process%) |
9/3 |
25/20 |
Intel Core-2 Duo, 2.4GHz, 4MB Cache, PointGrey Flea |
Initializing State |
|
|
Finding a new face |
Min Face Size (pixels) |
50 |
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 |
Depends on tracking range settings |
CPU Load (Active)
(%) |
50 |
Intel Core-2 Duo, 2.4GHz, 4MB Cache |
CPU Load (%) |
5 |
Intel Core-2 Duo, 2.4GHz, 4MB Cache |
Idle Timeout (secs) |
5 |
|
Searching State |
|
|
Quick recovery from tracking failure |
Recovery Conditions |
Face front, no occlusion |
Any pose, no occlusion |
|
Recovery Time |
1 frame |
|
CPU Load (%) |
30 |
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,(smHTHeadPoseCallback)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
}
|