使用EigenObjectRecognizer

我正在尝试使用EmguCV进行一些面部识别。 我想知道我是否可以使用EigenObjectRecognizer进行此任务? 有人可以解释我如何使用它吗? 因为如果没有不匹配的照片,它也会返回一个值。 这是一个例子:

Image[] trainingImages = new Image[5]; trainingImages[0] = new Image("brad.jpg"); trainingImages[1] = new Image("david.jpg"); trainingImages[2] = new Image("foof.jpg"); trainingImages[3] = new Image("irfan.jpg"); trainingImages[4] = new Image("joel.jpg"); String[] labels = new String[] { "Brad", "David", "Foof", "Irfan" , "Joel"} MCvTermCriteria termCrit = new MCvTermCriteria(16, 0.001); EigenObjectRecognizer recognizer = new EigenObjectRecognizer( trainingImages, labels, 5000, ref termCrit); Image testImage = new Image("brad_test.jpg"); String label = recognizer.Recognize(testImage); Console.Write(label); 

它返回“brad”。但是如果我在testimage中更改照片它也会返回一些名字甚至是Brad.Is对于使用这种方法进行面部识别是否有用? 或者有更好的方法吗?

我做了一些练习,发现当它没有找到它时会返回空字符串。 将值5000更改为1000可以提供更接近的值,但是如果您使用的是网络摄像头,则您的照片在测试和数据库中必须几乎相同。

好吧,我不知道Emgu Cv,但我认为Robert Harvey所说的是对的。 你必须训练你的神经网络。 此外,无论如何,神经网络总会返回结果。 如果结果错误,则表示您未对网络进行足够的培训。

 recognizer.Recognize(testImage) RETURN EigenObjectRecognizer.RecognitionResult 

所以你可以尝试:

 EigenObjectRecognizer.RecognitionResult helo = recognizer.Recognize(result); Console.Write(helo.lable); 

您可以重载Emgu.CV.EigenObjectRecognizer的Recognize函数,如:

 public String Recognize(Image image, out float distance) { int index; float eigenDistance; String label; FindMostSimilarObject(image, out index, out eigenDistance, out label); distance = eigenDistance; return (_eigenDistanceThreshold <= 0 || eigenDistance < _eigenDistanceThreshold) ? _labels[index] : String.Empty; } 

在Codeproject的Overload Snippet上构建的构思

并以这种方式接收运行的最后导出距离,如

 float last_distance =0; label = recognizer.Recognize(testImage, out last_distance); 

这样可以让您更好地了解要投入的价值

 MCvTermCriteria termCrit = new MCvTermCriteria(trainingImages.count, 0.001); EigenObjectRecognizer recognizer = new EigenObjectRecognizer( trainingImages.ToArray(), labels.ToArray(), <>, ref termCrit); 

通过简单地将其连接到标签并查看值的范围。

3或4千可能......