EMGU CV 2.4.9人脸识别准确性问题

时间:2017-08-10 13:37:10

标签: c# opencv emgucv face-recognition

我已经按照代码项目中的示例代码创建了一个使用EMGUCV的人脸识别系统。我已经训练了2个人的数据库,每个人有10个图像。当网络摄像头检测到这些人并且能够正确显示名称但问题是在受过训练的数据库中不存在的第三个人通过网络摄像头检测时,它将采用最近的面并在其上显示名称而不是显示“未知”。如何提高准确度?我试图改变阈值但没有帮助。出了什么问题?

currentFrame = grabber.QueryFrame().Resize(320, 240, 
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

currentFrame.SmoothBlur(320, 240);
gray = currentFrame.Convert<Gray, Byte>();
Rectangle[] facesDetected = face.DetectMultiScale(gray, 1.2, 10, new 
Size(50, 50), Size.Empty);

 for (int j = 0; j < facesDetected.Length; j++)
 {
      facesDetected[j].X += (int)(facesDetected[j].Height * 0.15);
      facesDetected[j].Y += (int)(facesDetected[j].Width * 0.22);
      facesDetected[j].Height -= (int)(facesDetected[j].Height * 0.3);
      facesDetected[j].Width -= (int)(facesDetected[j].Width * 0.35);

      result = currentFrame.Copy(facesDetected[j]).Convert<Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
      result._EqualizeHist();
      currentFrame.Draw(facesDetected[j], new Bgr(Color.Red), 2);

      if (trainingImages.ToArray().Length != 0)
      {
          recog = new LBPHFaceRecognizer(1, 10, 8, 8, 10000);
          //recog = new EigenFaceRecognizer(0, 3500);
          //recog = new FisherFaceRecognizer(0, 3500);
          recog.Train(trainingImages.ToArray(), Names_List_ID.ToArray());
          FaceRecognizer.PredictionResult ER = recog.Predict(result);

                    if (ER.Label == -1)
                    {
                        name = "Unknown";
                    }
                    else
                    {
                        name = taglabels[ER.Label];
                    }

         currentFrame.Draw(name, ref font, new Point(facesDetected[j].X - 2, facesDetected[j].Y - 2), new Bgr(Color.Green));

                }
}

2 个答案:

答案 0 :(得分:1)

您可以将returned distance/confidence设为阈值。您需要一组验证图像,训练面部的新图像和一些随机面,获取距离并设置阈值。

答案 1 :(得分:0)

此构造函数将double threshold作为第五个参数:recog = new LBPHFaceRecognizer(1, 10, 8, 8, 10000);。据我所知,它的标准化距离乘以100.严格来说,你需要使用10张额外的“未知”照片进行调整,但要将其设置为50或70之间,然后再次检查。祝你好运!