Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于opencvforc的人脸识别精度#_C#_Opencv_Emgucv_Face Recognition - Fatal编程技术网

C# 基于opencvforc的人脸识别精度#

C# 基于opencvforc的人脸识别精度#,c#,opencv,emgucv,face-recognition,C#,Opencv,Emgucv,Face Recognition,我正在研究人脸识别系统,在这个系统中,我面临着检测未知人脸的问题。 问题是系统总是从数据库中为未知人脸返回最接近的匹配人脸 我结合使用了三种算法(EIGEN、FISHER和LBPH)来获得更好的人脸识别精度。 它为数据库中已经存在的面提供80-90%的准确度,但对于数据库中不存在的未知面,它总是从数据库中返回最佳匹配面 eigenFaceRecognizer = new EigenFaceRecognizer(4,5000); FisheigenFaceRecognizer = new Fish

我正在研究人脸识别系统,在这个系统中,我面临着检测未知人脸的问题。 问题是系统总是从数据库中为未知人脸返回最接近的匹配人脸

我结合使用了
三种算法(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"
}

我使用咆哮代码。这对我很有用。顺便说一下,我正在使用EMGU.CV库。“图像输入\图像”此格式为Emgu.CV格式。当我检查代码时,我认为这些阈值太高了。通过更改这些阈值,您可以为数据找到最合适的值。实际上并没有理想的阈值,比如系统。它总是依赖于你的数据,无论是训练还是测试集

我读了一些文章,然后发展了它。我推荐你这篇文章

祝你好运和成功

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 "";

    }
公共字符串识别(图像输入\u图像,整数特征值\u阈值=-1)
{
如果(被训练)
{
FaceRecognizer.PredictionResult ER=recognizer.Predict(输入图像);
如果(ER.Label==-1)
{
特征标签=“未知”;
本征距离=0;
返回本征标签;
}
其他的
{
特征标签=名称列表[ER.标签];
本征距离=(浮动)ER距离;
如果(本征阈值>-1)本征阈值=本征阈值;
控制台.WriteLine(“-识别距离-”+特征距离+”--“+”可能标签-“+”--“+特征标签”);
//如果使用特征识别器,则仅使用后阈值规则
//因为在构造过程中设置的Fisher和LBHP阈值将正常工作
开关(识别器\ U型)
{
案例(“EMGU.CV.EigenFaceRecognizer”):
Console.WriteLine(“我在”);
中频(本征距离>=本征阈值)
{
返回本征标签;//işareti değiştiridim.z
}
否则返回“”;
案例(“EMGU.CV.LBPHFaceRecognizer”):
if(本征距离<100)
{
返回本征标签;
}
否则返回“噪音”;
案例(“EMGU.CV.FisherFaceCongnizer”):
违约:
return Eigen_label;//在训练中设置的阈值控制未知值
}
}
}
否则返回“”;
}

特征脸及其改进FisherFaces和LBPH不太适合从不同的图像中识别人,因为它们在不同的图像质量等方面确实有价值。而且据我所知,它返回的距离并不能告诉你多少


有很多不同的项目试图用深度神经网络来实现这一点。你可以从C#here

中找到一个起点,请发布相关代码。你说,即使是不知名的人也会从数据库中返回匹配项,这是因为面部识别软件只会给你提供最接近的相似性,它让你来画已知和未知的界限,您应该选择一个%置信度,低于该置信度,您的代码会将人脸视为未知。@Frontear我在c#中没有得到置信度值……我在predict method中只得到标签和距离值。@Frontear您能告诉我如何使用这两个参数(标签和距离)来检测未知的人吗?