虽然没有确切的置信度值,但可以使用变量比例进行粗略解释,即特征距离。好的匹配值会根据你拥有的数据量和训练参数而改变,因此你需要使用不同的人脸测试值来确定阈值。
您需要添加一个函数到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;
请在类中添加以下方法:
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;
希望这能解决问题,
祝好,
克里斯