我正在开发人脸识别系统,该系统在检测未知人脸时面临问题。 问题是系统始终会从数据库中为未知面孔返回最接近的匹配面孔。
我使用three algorithms(EIGEN, FISHER & LBPH)
的组合来获得更好的面部识别精度。
对于数据库中已经存在的面部,它可以提供80-90%的准确性,但是对于数据库中不存在的未知面部,它总是从数据库中返回最佳匹配的面部。
eigenFaceRecognizer = new EigenFaceRecognizer(4,5000);
FisheigenFaceRecognizer = new FisherFaceRecognizer(4, 5000);
LBPeigenFaceRecognizer = new LBPHFaceRecognizer(4, 8, 8, 8, 5000)
var result = eigenFaceRecognizer.Predict(_grayFrame);
var resultFish = FisheigenFaceRecognizer.Predict(_grayFrame);
var LBPresult = LBPeigenFaceRecognizer.Predict(_grayFrame);
if (result.Label != -1 && resultFish.Label != -1 && LBPresult.Label != -1)
{
if ( result.Label == resultFish.Label == LBPresult.Label)
{
return Label;
}
}
else
{
return "Unknown"
}
答案 0 :(得分:0)
我使用下面的代码。对我来说很有用。顺便说一下,我正在使用EMGU.CV库。 “ Image Input_image”这种格式是Emgu.CV格式。当我检查您的代码时,我认为这些阈值太高了。通过更改这些阈值,您可以找到最适合您的数据的值。实际上,没有理想的阈值,例如系统。无论训练或测试设置图像如何,始终取决于您的数据。
我阅读了一些文章,并进行了开发。我向您推荐这篇文章。
https://www.codeproject.com/Articles/261550/EMGU-Multiple-Face-Recognition-using-PCA-and-Paral
祝你好运和成功。
public string Recognise(Image<Gray, byte> Input_image, int Eigen_Thresh = -1)
{
if (_IsTrained)
{
FaceRecognizer.PredictionResult ER = recognizer.Predict(Input_image);
if (ER.Label == -1)
{
Eigen_label = "Unknown";
Eigen_Distance = 0;
return Eigen_label;
}
else
{
Eigen_label = Names_List[ER.Label];
Eigen_Distance = (float)ER.Distance;
if (Eigen_Thresh > -1) Eigen_threshold = Eigen_Thresh;
Console.WriteLine("-Recognise Distance-" + Eigen_Distance + "--" + "Possible Label- " + "--" + Eigen_label);
//Only use the post threshold rule if we are using an Eigen Recognizer
//since Fisher and LBHP threshold set during the constructor will work correctly
switch (Recognizer_Type)
{
case ("EMGU.CV.EigenFaceRecognizer"):
Console.WriteLine("I'm in");
if (Eigen_Distance >= Eigen_threshold)
{
return Eigen_label; //işareti değiştiridim.z
}
else return "";
case ("EMGU.CV.LBPHFaceRecognizer"):
if (Eigen_Distance < 100)
{
return Eigen_label;
}
else return "Noise";
case ("EMGU.CV.FisherFaceRecognizer"):
default:
return Eigen_label; //the threshold set in training controls unknowns
}
}
}
else return "";
}
答案 1 :(得分:0)
EigenFaces及其改进FisherFaces和LBPH不能很好地识别来自不同图像的人,因为它们在不同图像质量的闪电等方面确实很有价值。据我所知,它返回的距离并不能真正告诉您。
有很多不同的项目试图通过深度神经网络来做到这一点。您可以在https://developer.apple.com/documentation/passkit/pkpasslibrarynotificationname
处获得有关如何使用C#进行操作的起点。