C#的OPENCV面部识别精度



我正在处理面部识别系统,在检测未知面时,我面临问题。问题是系统总是从数据库中返回最近的匹配面。

我使用了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"
}

i使用鲍盘代码。这对我很有用。顺便说一句,我正在使用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 "";
    }

特征法及其改进的渔具和lbph并不是从不同图像中识别人的好处,因为它们在不同的图像质量闪电等方面确实是可以销售的。另外,它返回的距离并没有真正告诉您,据我所知。

有许多不同的项目尝试通过深层神经网络来完成此操作。您可以从C#使用C#在此处获得一个起点>

最新更新