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

Posted

技术标签:

【中文标题】EMGU CV 2.4.9 人脸识别准确率问题【英文标题】:EMGU CV 2.4.9 face recognition accuracy issue 【发布时间】:2018-01-18 19:11:12 【问题描述】:

我已经按照代码项目中的示例代码使用 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));

                

【问题讨论】:

你找到解决这个问题的办法了吗? 有什么更新吗? 【参考方案1】:

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

【讨论】:

我可以这样做,但是如果您准备一个包含图片和您自己的代码的 github 存储库,我可以对其进行修改并展示如何确保这样做。【参考方案2】:

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

【讨论】:

以上是关于EMGU CV 2.4.9 人脸识别准确率问题的主要内容,如果未能解决你的问题,请参考以下文章

Emgu CV 人脸识别:在多个文件上并行运行 DetectHaarCascade 问题

C# - Emgu Cv - 人脸识别 - 将保存到 Access 数据库的人脸训练集作为二进制文件加载到 EigenObjectRecognizer 中以进行人脸识别

利用Emgu.CV实现人脸识别详解 (C#)--附源码

C# - Emgu CV - 人脸识别代码在 EigenObjectRecognizer 处停止执行并无错误退出

如何将 Emgu.cv 用于未知人员?

Emgu CV Capture IP 摄像头人脸检测问题