【问题标题】:opencv Recognize function doesn't work correctly in C#opencv 识别功能在 C# 中无法正常工作
【发布时间】:2015-07-05 11:04:49
【问题描述】:

由于我的知识库图像,我在我的 c# 应用程序中使用 openCV 库来检测人脸,但是在检测人脸时出现问题,我的函数第一次正确检测到人 A 的脸并显示他的名字,但在此之后检测该功能对同一个人 A 的脸进行了另一次检测,但这次是用人 B 的名字进行检测,尽管场景中没有人 B,但不幸的是,他的脸在错误的操作中被检测到。 这是我的识别器功能代码:

MCvTermCriteria termCrit = new MCvTermCriteria(countTrain, 0.001);
EigenObjectRecognizer recognizer = new EigenObjectRecognizer(trainingImages.ToArray(), clientInfo.ToArray(), 2500, ref termCrit);
Emgu.CV.EigenObjectRecognizer.RecognitionResult recognizerResult = recognizer.Recognize(result);

在上面的代码中,我将训练好的图像数组和所有者标签数组传递给函数进行检测操作。

【问题讨论】:

    标签: c# opencv face-detection


    【解决方案1】:

    人脸识别不是一个简单的问题,因为人脸在两次尝试之间可能会有很大差异,在我看来,你的识别器可能工作正常,但可能没有像你喜欢的那样训练。

    例如,人脸识别的特征方法对人脸的姿态非常敏感。如果你用 A 人向左看,B 人向右看的图像训练识别器,那么 A 人会移动到摄像机前并向右看,它可能会将他们标记为 B 人,因为他们的姿势是比他们的面部特征更具戏剧性的变化。

    我建议用每个人的大量图像训练你的模型,也许有几个不同的姿势,或者确保你的用户每次都直视相机。

    另外,使用“局部二进制模式直方图”模型而不是特征值可能值得一看,因为我发现这更加健壮。

    TL;DR

    我认为您的识别器可能正在工作,但可以通过更多的训练数据来改进 我建议您关注this 链接并尽可能多地学习,它是 EMGU 包装器中面部识别的绝佳资源。

    【讨论】: