This library (libhead_pose_estimation.so
) performs 3D head pose estimation
based on the fantastic dlib face detector and a bit of
OpenCV's
solvePnP magic (it uses adult male anthropometric data to match a real 3D head to the projected image).
The library returns a 4x4 transformation matrix.
It supports detection and tracking of multiple faces at the same time, and runs on-line, but it does not feature face identification.
Note: The library has only been tested on Linux. We can only provide limited support for other operating systems!
You need to download and extract Dlib
somewhere. This
application has been tested with dlib-18.16
.
Important: due to a bug in dlib
, you must manually modify dlib
's
CMakeLists.txt
before compiling: open it
($DLIB_ROOT/dlib/CMakelists.txt
) and add add_definitions(-fPIC)
near the
top (around line 20).
The library uses a standard CMake
workflow:
$ mkdir build && cd build
$ cmake -DDLIB_PATH=<path to dlib> ..
$ make
Note that the first time you compile the project, dlib
will compile as well.
It takes a few minutes. This won't happen the next times.
Run head_pose_test ../share/shape_predictor_68_face_landmarks.dat
to test
the library. You should get something very similar to the picture above.
Finally, to install the library:
$ make install
The ROS wrapper provides a convenient node that exposes each detected face as a TF frame.
Enable the compilation of the ROS wrapper with:
cmake -DWITH_ROS=ON