emguCV 3.1 - 人脸检测

本文关键字:检测 emguCV | 更新日期: 2023-09-27 18:34:42

我是C#中的OpenCV/EmguCV的新手。我尝试了一个教程(http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-3---live-face-detection(,使用网络摄像头捕获视频很容易。现在我的问题:本教程是为EmguCV 2.x编写的。我正在使用EmguCV 3.1(我喜欢使用最新的(。因此,我使用类Mat而不是类Image<>Image<>类没有使用capture.QueryFrame(); 但是当我谈到人脸检测时,教程说我应该使用类 CascadeClassifierDetectHaarCascade . CascadeClassifier被接受,但DetectHaarCascade未知。在我的5小时内!!搜索我刚刚发现,DetectHaarCascade 已经过时,但没有找到任何替代它的方法,除了HaarCascade.Detect()这也不知道。

我有以下组合:

using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.CvEnum;

所以,请帮助我:DetectHaarCascade的替代品是什么,我如何使用它?有关于EmguCV 3.1的教程吗?

谢谢!!

emguCV 3.1 - 人脸检测

henne959,我对 emgu c# 也很陌生 - 但已经有点接近 opencv 领域了。 首先要意识到的是它在进化。 名称更改。所以保持开放的心态。 我最近玩了一下面部检测 emgu c# (3.0(,并找到了您提到的教程。 CascadeClassifier 类在那里。 但是,我发现HAAR检测器(我想使用(作为该类的扩展:DetectMultiScale

在我研究这个主题时注意到的链接中 - 这两个是我最喜欢的(对不起 - 我没有代表点来包含更多链接(http://fewtutorials.bravesites.com/entries/emgu-cv-c/level-3c---how-to-improve-face-detectionhttp://blogs.interknowlogy.com/2013/10/21/face-detection-for-net-using-emgucv/

这两行代码可能会帮助您将各个部分联系在一起

CascadeClassifier _cascadeClassifier = new CascadeClassifier(@"C:'OPENCV_3.0.0'opencv'build'etc'haarcascades'" + "haarcascade_frontalface_alt2.xml");
Rectangle RectFaces = _cascadeClassifier.DetectMultiScale(tMat, 1.03, 1, new Size(tMat.Width/13, tMat.Height/13), new Size((int)((double)tMat.Width/1.05), (int)((double)tMat.Width / 1.05)));

希望这有帮助!

要将Mat转换为Image<>请使用ToString()方法并使用CascadeClassifier而不是HaarCascade

查看人脸检测/DetectFace.cs的示例:

重要的是:

using Emgu.CV;
using Emgu.CV.Structure;

和:

IInputArray image, 
String faceFileName, String eyeFileName,
List<Rectangle> faces
using( CascadeClassifier face = new CascadeClassifier( faceFileName ) )
{
    using( UMat ugray = new UMat() )
    {
        CvInvoke.CvtColor( image, ugray, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray );
        //normalizes brightness and increases contrast of the image
        CvInvoke.EqualizeHist( ugray, ugray );
        //Detect the faces  from the gray scale image and store the locations as rectangle                   
        Rectangle[] facesDetected = face.DetectMultiScale(
           ugray, 1.1, 10, new Size( 20, 20 ) );
        faces.AddRange( facesDetected );
    }
}

Emgu.CV 是一个开源项目。您可以在 sourceforce.com 上找到它。他们在这里也有 git 存储库。您可以在计算机中克隆它。

此存储库还包括示例项目(在 Emgu.CV.Example 文件夹中(。

附言我不能确切地告诉你你需要哪个类,但是你可以检查一个名为FaceDetection的示例项目。他们正在使用CascadeClassifierCudaCascadeClassifier类。希望这有帮助。