没有确切的置信值,但是可以使用一个可变尺度并粗略地解释它,即特征距离。
分类为良好匹配的值会根据您拥有的数据量和训练参数而变化,因此您必须使用不同的人脸测试这些值来计算出阈值。
您必须向 Eigen 类添加一个函数才能获取该值。首先,我们将覆盖我们使用的 EigenObjectRecognizer。这非常简单,查找文件 EigenObjectRecognizer.cs,它位于 \EMGU 安装目录\Emgu.CV 中,或者在您提取文件的任何位置,您应该能够找到它,因为它与包含所有内容的 bin 文件夹位于同一文件夹中您使用的 .dll。
通过右键单击 Visual Studion 解决方案资源管理器中的项目名称,然后选择“添加”>“现有项目...”,将文件添加到您的项目中。导航到该文件并添加它。您的项目将自动使用该文件,而不是引用中 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;
to
eigenDistance = -1;
您可以删除浮动特征距离;行,但我想确保它被我可以观察到错误的值覆盖,因为如果正确应用了识别,它应该始终为正值。您会注意到以下代码部分包括:
FindMostSimilarObject(image, out index, out eigenDistance, out label);
所有输出都可以通过一些额外编码来使用吗?
我们不需要将特征识别器变量指向写入变量:
Emgu.Custom.EigenObjectRecognizer recognizer;
我们现在可以通过以下函数调用获取特征距离:
float EigenDistance = recognizer.GetEignenDistance;
希望这能解决问题,
Cheers,
Chris