This is a head pose estimation system based on 3d facial landmarks. Please realize it's not the most advanced method in this field. Until I created this repository, there have been some end-to-end solutions.
For image, run python estimate_head_pose.py -i <path of image> --onnx
.
For video, run python estimate_head_pose_video.py -i <path of video> --onnx
.
First, thanks for cleardusk's excellent work on 3DDFA_V2. With TDDFA model, we can get 3d facial landmarks quickly and precisely.
The horizontal direction hd
and vertical direction vd
of face can be determined by PCA. Let's notate facial orientation with fd
, then fd = hd x vd
. Note: x
is cross products.
Here is an example. The origin image(from Biwi_Kinect_Head_Pose_Database):
The following image shows 68 landmarks.
Red axis: X
Green axis: Y
Blue axis: Z
The three yellow arrows are hd
, vd
and fd
.
Normalize hd
, vd
and fd
, make them as unit vectors.
Rotation matrix can be estimated with Kabsch algorithm.
@inproceedings{guo2020towards,
title = {Towards Fast, Accurate and Stable 3D Dense Face Alignment},
author = {Guo, Jianzhu and Zhu, Xiangyu and Yang, Yang and Yang, Fan and Lei, Zhen and Li, Stan Z},
booktitle = {Proceedings of the European Conference on Computer Vision (ECCV)},
year = {2020}
}
@misc{3ddfa_cleardusk,
author = {Guo, Jianzhu and Zhu, Xiangyu and Lei, Zhen},
title = {3DDFA},
howpublished = {\url{https://github.com/cleardusk/3DDFA}},
year = {2018}
}