opencv 有没有办法在C#中使用emguCV比较两个面孔?

lvmkulzt  于 2023-10-24  发布在  C#
关注(0)|答案(1)|浏览(155)

我只需要比较两张脸是否是同一个人。
我转换这个项目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, 1.2, 10, new Size(50, 50), Size.Empty);
        if (rect.Length == 1)
        {
            Image<Gray, Byte> grayFaceResult = ImageClass.CropImage(image2.ToBitmap(), rect[0]).ToImage<Gray, byte>().Resize(200, 200, 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
我找了很多,但我没有找到任何东西可以解决我的问题
有没有人可以知道我在这段代码中的错误,或者可以给予我一个链接,让我找到另一个解决方案来比较两个面孔?
(Note(我是这个领域的新手)

kx5bkwkv

kx5bkwkv1#

如果你可以在你的服务器上部署一个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,..."  
        }
    ]
  }

相关问题