如何使用EMGU CV在人脸识别中获得置信度值
本文关键字:EMGU 何使用 CV 人脸识别 | 更新日期: 2023-09-27 18:25:48
我正在做一个项目,在这个项目中,我应该设计一个应用程序,可以检测经过的人的所有人脸…我有一个由几个已知的人组成的非常大的数据库。。。我使用了EigenObjectRecognizer来识别网络摄像头捕捉到的图像帧。。。但问题是,有时它会错误地识别一些人。。。。所以,如果得到这个面部匹配的置信度值。。。然后我可以写一个条件循环,这样如果它大于75%,那么只检测他,否则就不会。此外,我知道基于PCA的识别是基本的,我肯定会转向其他新算法。但由于项目的截止日期,我应该尽快提交。。。。所以请告诉我如何获得这个EigenObjectRecognizer面部识别的置信度值。。。。
没有确切的置信值,但有一个可变的尺度可以使用,并大致解释为特征距离。
根据你所拥有的数据量和训练参数,被归类为良好匹配的值会发生变化,因此你必须用不同的面孔测试这些值,以计算出你的阈值。
您必须向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