如何使用EMGU CV获取人脸识别中的置信度值?

4

我正在开发一个项目,需要设计一个应用程序来检测经过的所有人的面部...我有一个非常大的数据库,包含了几个已知的人...我使用EigenObjectRecognizer来识别通过网络摄像头捕获的图像帧...但问题是有时它会错误地识别某些人....所以如果获取这种面部匹配的置信度值...然后我可以编写一个条件循环,只有当置信度大于75%时才检测他,否则不检测。另外,我知道基于PCA的识别是基础的,我肯定会转向其他新算法。但由于项目的截止日期,我必须快速提交...所以请告诉我如何获取这个EigenObjectRecognizer面部识别的置信度值...

1个回答

7

虽然没有确切的置信度值,但可以使用变量比例进行粗略解释,即特征距离。好的匹配值会根据你拥有的数据量和训练参数而改变,因此你需要使用不同的人脸测试值来确定阈值。

您需要添加一个函数到Eigen类中以获取这个值。首先,我们将覆盖我们使用的EigenObjectRecognizer。这非常简单,找到文件EigenObjectRecognizer.cs,它位于\EMGU安装目录\Emgu.CV或您提取文件的任何位置,您应该能够在其中找到它,因为它与您使用的所有.dlls的bin文件夹位于同一文件夹中。

通过右键单击解决方案资源管理器中的项目名称并选择Add>Existing Item...将文件添加到您的项目中。您的项目将自动使用此文件,而不是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; }
  }

您可以将此代码放置在任何位置,但显然必须在类内部且不在方法内部。现在是重要的部分。我们已经将eigenDistance设置为全局变量,但它是在调用.Recognize(Image image)方法时私有创建的。

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

float eigenDistance;

为了

eigenDistance = -1;

你可以删除float eigenDistance;这一行,但我喜欢确保它被覆盖为一个我可以观察到错误的值,因为如果识别正确应该总是为正数。你会注意到以下代码部分包括:
FindMostSimilarObject(image, out index, out eigenDistance, out label);
  • 索引
  • 特征距离
  • 标签

所有输出都可以在稍加编码后使用。

我们不需要将Eigen识别器变量指向正确的变量:

Emgu.Custom.EigenObjectRecognizer recognizer;

我们现在可以通过调用这个函数来获取EigenDistance:
float EigenDistance = recognizer.GetEignenDistance;

希望这能解决问题,
祝好,
克里斯

先生,我的代码中recognizer是对EigenObjectRecognizer的引用名称...我尝试使用recognizer.Get_Eigen_Results。但我找不到任何名为“Get_Eigen_Results”的成员。我是否忘记在这里添加引用? - Surya KLSV
抱歉,Surya。这是我添加到Eigen类的一个函数。我会相应地更新我的答案。 - Chris
你好,你觉得这样行得通吗?如果我想比较两张图片是否是同一个人 - 先将其与数据库中的一张进行比对,再与另一张进行比对,最后比较这些距离。或者有其他方法可以比较不在数据库中的人的两张照片吗? - Martin Ch
嗨,有几种方法可以比较您的图像,直接进行统计分析,例如方差或协方差,或者使用所需图像的直接PCA分析。您需要决定一种方法并对其进行测试。虽然可以使Eigne识别器正常工作,但仅用于比较两个图像则过于复杂。干杯 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接