EMGU CV 图像人脸识别

EMGU CV Face Recognition from Image

我之前一直在使用 OpenCV 进行 C++ 工作,而且效果很好。现在,我正在开发一个 C# 项目并使用 EMGU CV 进行性别识别。我对预测功能有疑问。每次我 运行 它,程序在 Predict 函数上崩溃,当我擦除预测行时,它是 运行ning。这是我的代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
     FaceRecognizer face = new FisherFaceRecognizer(0, 3500);
     face.Load("colorFisherFaceModel.yml");                
     Image<Bgr, Byte> img1 = new Image<Bgr, Byte>("C:\Users\sguthesis\Pictures\me.jpg");
     cascade = new CascadeClassifier("C:\Users\sguthesis\documents\visual studio 2013\Projects\EmguCV FFR with Image\EmguCV FFR with Image\haarcascade_frontalface_alt_tree.xml");
     FaceRecognizer.PredictionResult predictedLabel = face.Predict(img1);
}

此外,我想得到一个输出,1 或 2。1 代表男性,2 代表女性。我训练了很多保存在 colorFisherFaceModel.yml 上的数据。在 OpenCV 上 运行 很好。但是不知道EMGU CV怎么用

我也在研究 EmguCV,所以我想我可以在这里指出一些事情, 所以首先是你加载 "yml" 文件,这个文件是你在识别器训练后保存的还是你从某个地方获得的。因为我的理解是首先你要训练你的识别器,yml文件的结构是什么。你为什么加载级联,你打算在哪里使用它? (一般用来检测人脸)

如果你说程序崩溃很可能是因为训练集中没有项目。 (在这种情况下,我猜它是 yml 文件)或者正如我所读到的那样,你需要在训练集中至少有两张脸才能使用 Fisher 识别器。

发生这种情况是因为 FaceRecognizer 想要在调用 Predict 方法之前进行训练。

您甚至可以通过 face.Load(yourTrainingFile.xml) 方法或 face.Train(yourImages.ToArray, imageIds.ToArray()) 方法加载现有的 xml 训练文件。

将您的 FaceRecognizer.PredictionResult predictedLabel = face.Predict(img1); 代码部分放在 trycatch 块中,调试器不会关闭,您会收到错误消息。

PS : 如果自上次创建Training.xml文件后图片数量发生变化,那么建议调用face.Train方法而不是face.Load方法!