opencv 识别功能在 C# 中无法正常工作
opencv Recognize function doesn't work correctly in C#
由于我的知识库图像,我在我的 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,因为他们的姿势比他们的面部特征更显着的变化。
我建议使用每个人的大量图像来训练您的模型,也许有一些不同的姿势,或者确保您的用户每次都直视相机。
另外,使用 "local binary pattern histogram" 模型而不是特征值可能值得一看,因为我发现它更加稳健。
TL;DR
我认为您的识别器可能正在运行,但可以通过更多训练数据进行改进
我建议您关注 this link 并尽可能多地学习,它是 EMGU 包装器中面部识别的重要资源。
由于我的知识库图像,我在我的 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,因为他们的姿势比他们的面部特征更显着的变化。
我建议使用每个人的大量图像来训练您的模型,也许有一些不同的姿势,或者确保您的用户每次都直视相机。
另外,使用 "local binary pattern histogram" 模型而不是特征值可能值得一看,因为我发现它更加稳健。
TL;DR
我认为您的识别器可能正在运行,但可以通过更多训练数据进行改进 我建议您关注 this link 并尽可能多地学习,它是 EMGU 包装器中面部识别的重要资源。