有什么方法可以在C#中使用emguCV比较两个面孔?

问题描述

如果只适合同一个人,我只需要比较两个面孔...
我将这个项目Face detection and recognition in runtime转换为比较两个面孔,但是该方法始终返回true。

        int ImagesCount = 0;
        CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_alt.xml");
        List<Mat> TrainedFaces = new List<Mat>();
        List<int> PersonsLabes = new List<int>();
        Mat image1 = img1.ToImage<Gray,byte>().Mat;
        Mat image1Temp = img1.ToImage<Bgr,byte>().Mat;

        foreach (Rectangle face in faceDetector.DetectMultiScale(image1,1.2,10,new Size(50,50),Size.Empty))
        {
            Image<Gray,byte> trainedImage = ImageClass.CropImage(image1.ToBitmap(),face).ToImage<Gray,byte>().Resize(200,200,Inter.Cubic);
            CvInvoke.EqualizeHist(trainedImage,trainedImage);
            TrainedFaces.Add(trainedImage.Mat);
            PersonsLabes.Add(ImagesCount);
            ImagesCount++;
        }

        EigenFaceRecognizer recognizer = new EigenFaceRecognizer(ImagesCount,2000);
        recognizer.Train(TrainedFaces.ToArray(),PersonsLabes.ToArray());

        Mat image2 = img2.ToImage<Gray,byte>().Mat;
        Rectangle[] rect = faceDetector.DetectMultiScale(image2,Size.Empty);
        if (rect.Length == 1)
        {
            Image<Gray,Byte> grayFaceResult = ImageClass.CropImage(image2.ToBitmap(),rect[0]).ToImage<Gray,Inter.Cubic);
            CvInvoke.EqualizeHist(grayFaceResult,grayFaceResult);
            var result = recognizer.Predict(grayFaceResult);
            if (result.Label != -1 && result.distance < 2000)
            {
                return true;
            }
        }
        return false;

注意:第一张图片可能包含同一个人的多张图片,第二张图片应始终包含另一张或同一个人的一张图片,但始终给我0(始终返回true,尽管我尝试了两张不同图片图片人),我使用了emguCv 4.3
搜索了很多,但没有发现任何可以解决我问题的方法
有没有人可以知道我在此代码中的错误,或者可以给我提供另一个比较两个面孔的解决方案的链接
(注意:我是这个领域的新手)

解决方法

如果可以在服务器上部署python应用程序,则可以采用deepface。它具有验证功能,您应该将base64编码的图像作为这些功能的输入发送。

端点:http://127.0.0.1:5000/verify

身体:

  {
    "model_name": "VGG-Face","img": [
        {
                "img1": "data:image/jpeg;base64,...","img2": "data:image/jpeg;base64,..."  
        }
    ]
  }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...