使用C#和Emgucv的人脸旋转方向检测

时间:2018-12-25 08:26:24

标签: c# emgucv

我是Emgucv的新手,正在从事面部移动方向检测 我在Internet上遇到过很多代码,但是很难理解。

因此,请您提供一个简单易懂的代码或链接以了解这种情况。

预先感谢

1 个答案:

答案 0 :(得分:0)

基于此:

Bitmap bmp = new Bitmap(); // your bitmap contain a face
Mat mat = GetMatFromSDImage(bmp);
using (var nextFrame = mat.ToImage<Bgr, Byte>())
{
    if (nextFrame != null)
    {
        Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>();
        Rectangle[] faces = mHaarCascade.DetectMultiScale(grayframe, 1.1, 10, Size.Empty);
        if (faces.Count() > 0)
        {
            // some faces are detected
            // you can check the X and Y of faces here
        }
    }
}

private Mat GetMatFromSDImage(Bitmap image)
{
    int stride = 0;

    System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, image.Width, image.Height);
    System.Drawing.Imaging.BitmapData bmpData = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, image.PixelFormat);

    System.Drawing.Imaging.PixelFormat pf = image.PixelFormat;
    if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    {
        stride = image.Width * 4;
    }
    else
    {
        stride = image.Width * 3;
    }

    Image<Bgra, byte> cvImage = new Image<Bgra, byte>(image.Width, image.Height, stride, (IntPtr)bmpData.Scan0);

    image.UnlockBits(bmpData);

    return cvImage.Mat;
}

因此faces包含Rectangle个边界面的数组。您可以检查矩形的XY属性以检查其是否移动并将其与初始位置进行比较以检测其方向。

根据评论进行更新
要检测头部旋转,一个简单的解决方案就是眼睛检测。您可以使用haarcascade_eye.xml来检测是否存在。那么您就可以计算出每只眼睛的XY位置的旋转度。

Here,您会找到一个简单的眼睛检测示例

相关问题