如何使用EMGU CV在人脸识别中获得置信度值

本文关键字:EMGU 何使用 CV 人脸识别 | 更新日期: 2023-09-27 18:25:48

我正在做一个项目,在这个项目中,我应该设计一个应用程序,可以检测经过的人的所有人脸…我有一个由几个已知的人组成的非常大的数据库。。。我使用了EigenObjectRecognizer来识别网络摄像头捕捉到的图像帧。。。但问题是,有时它会错误地识别一些人。。。。所以,如果得到这个面部匹配的置信度值。。。然后我可以写一个条件循环,这样如果它大于75%,那么只检测他,否则就不会。此外,我知道基于PCA的识别是基本的,我肯定会转向其他新算法。但由于项目的截止日期,我应该尽快提交。。。。所以请告诉我如何获得这个EigenObjectRecognizer面部识别的置信度值。。。。

如何使用EMGU CV在人脸识别中获得置信度值

没有确切的置信值,但有一个可变的尺度可以使用,并大致解释为特征距离。

根据你所拥有的数据量和训练参数,被归类为良好匹配的值会发生变化,因此你必须用不同的面孔测试这些值,以计算出你的阈值。

您必须向Eigen类添加一个函数才能获得该值。首先,我们将覆盖我们使用的EigenObjectRecognizer。对于文件EigenObjectRecognizer.cs来说,这真的很简单,它位于''EMGU安装目录''EMGU.CV中,或者你提取文件的地方,你应该能够将它拉到与bin文件夹相同的文件夹中,并使用所有.dll。

右键单击visual Studio中解决方案资源管理器中的项目名称,然后选择"添加">"现有项…",将文件添加到项目中。。。导航到该文件并添加它。您的项目将自动使用该文件,而不是引用中使用EMGU.CV.dll的文件。

现在在你的项目中打开EigenObjectRecognizer.cs,不要担心它是原始的副本,所以你所做的任何更改都不会影响原始源。首先,按住Ctrl键,然后按m键和o键,这将折叠所有方法字段。

首先,我们需要覆盖我称之为我的Emgu.Custom.的名称空间

现在,在代码的顶部,在其他下面添加以下变量

private float eigenDistance;

将以下方法添加到类

  /// <summary>
  /// Get the calculated Eignen Distance for the last proceessed frame
  /// </summary>
  public float GetEignenDistance
  {
      get { return eigenDistance; }
  }

你可以把它放在任何地方,但显然是在类内和方法外,现在是重要的一点。我们已经将本征距离设为全局,但当我们调用.Ignize(图像图像)方法时,它是私人创建的。

在EigenObjectRecognizer.cs中找到此方法并更改

float eigenDistance;

eigenDistance = -1;

您可以删除浮动本征距离;行,但我喜欢确保它被一个我可以观察到错误的值覆盖,因为如果识别正确,它应该总是肯定的。您会注意到以下代码部分包括:

FindMostSimilarObject(image, out index, out eigenDistance, out label);
  • 索引
  • 本征距离
  • 标签

是否所有输出都可以通过一点额外的编码使用。

我们不需要将我们的特征识别器变量指向写变量:

Emgu.Custom.EigenObjectRecognizer recognizer;

我们现在可以通过以下函数调用来获得特征距离:

float EigenDistance = recognizer.GetEignenDistance;

希望这能澄清问题,

干杯,

Chris