c# - EMGU CV 2.4.9 人脸识别精度问题

标签 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));

                }
}

最佳答案

您可以阈值 returned distance/confidence .你需要一组图像的验证集,训练好的人脸的新图像和一些随机的人脸,得到距离并设置阈值。

关于c# - EMGU CV 2.4.9 人脸识别精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615346/

相关文章:

java - Opencv xamarin findContours - 如何使用层次结构

python - 在python中使用opencv更改图像中区域的颜色

c# - 如何将 emgu 图像框大小设置为屏幕大小的百分比

c++ OpenCV如何将过滤器应用于Mat的子矩形?

c# - 使用 EmguCV 进行全景图像拼接

c# - 从左到右编号坐标和拉绳

c# - 未调用 ASP.NET Core AuthorizationHandler

c# - MessagePack 从 Dictionary<,> 继承的类中反序列化异常

c# - 带参数的单例

c# - 谷歌日历 iCal 提要