由于我的知识库图像,我在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);
在上面的代码中,我将训练有素的图像数组和所有者标签数组传递给检测操作。
最佳答案
人脸识别不是一个简单的问题,因为两次尝试之间人脸的变化可能很大,在我看来,您的识别器可能工作正常,但可能未如您所愿地接受训练。
例如,用于面部识别的本征方法对面部姿势非常敏感。如果使用向左看的人A和向右看的人B的图像训练识别器,则人A移动到相机的前面并向右看,它可能会将他们标记为人B,因为他们的姿势比他们的五官更戏剧化。
我建议您用每个人的大量图像训练您的模型,也许使用几个不同的姿势,或者确保您的用户每次都直视摄像机。
另外,也许值得一看的是使用“局部二进制模式直方图”模型而不是特征值,因为我发现它更健壮。
TL; DR
我认为您的识别器可能正在工作,但可以通过提供更多培训数据来进行改进
我建议您遵循this链接并尽可能多地学习,它是EMGU包装器中人脸识别的重要资源。
关于c# - opencv识别功能在C#中无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29888212/