使用emgucv检测人脸和嘴巴后如何确定人脸特征

how to decide face feature after detecting face and mouth using emgucv

我正在使用 c# 进行情绪检测,为此通过使用 emgucv 和 haarcascades xml 我检测到了面部嘴巴和眼睛,现在如何确定我正在使用的面部检测情绪是什么此代码

var faces = grayframe.DetectHaarCascade(
                        haar, 1.4, 4,
                        HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                        new Size(nextFrame.Width / 8, nextFrame.Height / 8)
                        )[0];
  foreach (var f in faces)
  {    
  image.Draw(f.rect, new Bgr(Color.Blue), 2);    
    gray.ROI = f.rect;
 var mouthsDetected = gray.DetectHaarCascade(mouth, 
                          1.1, 10, 
                          Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
                          new Size(20, 20));
 gray.ROI = Rectangle.Empty;


 foreach (var m in mouthsDetected [0])
 {
      Rectangle mouthRect = m.rect;
      mouthRect.Offset(f.rect.X, f.rect.Y);
      image.Draw(mouthRect , new Bgr(Color.Red), 2);
 }

}

我从 here 中找到了这段代码。谁能建议我应该怎么做才能找到面部特征。

  1. 简单的解决方案是预训练分类器 "smile detector"。

    字符串 smile_cascade_name = "haarcascades\haarcascade_smile.xml";

    我不记得 "haarcascade_smile.xml" 是否与 Emgu 一起使用。如果没有,它可能带有 opencv 源代码。 https://github.com/opencv/opencv/tree/master/data/haarcascades

  2. 难的是自己训练。这是相当涉及。你可以去ImageNet下载所有的微笑图片,悲伤图片和其他情绪,然后用opencv内置的"opencv_traincascade"函数训练它。http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html。有时训练一个分类器需要我 2 周的时间。

您可以在 EMGU 代码中使用使用 opencv 训练的 xml。