如何检测面部角度?

时间:2015-02-15 19:20:46

标签: opencv numpy machine-learning

我有超过2000个灰度图像,像素尺寸为96x96像素。我有(x,y)协调的面部关键点,如left_eye_center,right_eye_center,nose_center,mouth_left,mouth_right等。

数据集中的许多面都向左或向右或向上或向下倾斜。所以我想找出朝向相机的面部方向角度。

是否有任何库可以检测到这个?我看了一下opencv,但它似乎只做了面部检测而不是方向。

2 个答案:

答案 0 :(得分:1)

cmon,这只是简单的数学:

    double eyeXdis = eye_r.x - eye_l.x;
    double eyeYdis = eye_r.y - eye_l.y;
    double angle   = atan(eyeYdis/eyeXdis);
    double degree  = angle*180/CV_PI;

[编辑:]

看来,你所寻找的实际上是“头部姿势估计”(或“假设”)

你需要一个(原始的)3d头部模型,为你的地标获取相应的3d点,然后为每个图像找到图像中的2d地标,并从solvPnP()获得旋转/平移向量

答案 1 :(得分:0)

我将训练数据分成3个标签(左,中,右),然后将其与您选择的机器学习算法一起使用,以学习3个类。如果你正在使用opencv,你可以使用例如使用HaarCascadeClassifiers(我曾经有一个项目,我用它来分类方向)。但实际上,任何事都有效。您只需将其从二进制分类(面部检测)扩展到多类分类(面部方向)。