人脸识别登录- C#与OpenCV

pexxcrt2  于 2023-06-06  发布在  C#
关注(0)|答案(1)|浏览(223)

有一些明显的东西,我没有看到在这段代码中,但每个图像返回100%的相似性。有人能指出我哪里做错了吗?
我是新使用OpenCV,我将有一个上传的照片,我需要与另一个从一个网站在真实的登录采取比较。

[HttpPost]
        public IActionResult ReconhecerImagem([FromBody] ImagemDTO imagemDTO)
        {
            // Converter a imagem base64 em bytes
            string base64String = imagemDTO.ImagemBase64.Replace(" ", "+");
            byte[] imageData = System.Convert.FromBase64String(base64String);

            // Carregar a imagem usando OpenCV
            Mat imagem = Cv2.ImDecode(imageData, ImreadModes.Color);

            // Realizar o reconhecimento facial com o OpenCV
            // Aqui você precisa implementar a lógica de reconhecimento facial com OpenCV,
            // como carregar imagens de referência, extrair características faciais etc.
            // Supondo que você tenha uma imagem de referência previamente cadastrada, chamada "imagemReferencia":

            // Carregar a imagem de referência usando OpenCV
            Mat imagemReferencia = Cv2.ImRead("C:\\Users\\wrwon\\Downloads\\Foto.jpg", ImreadModes.Color);

            // Redimensionar as imagens para terem o mesmo tamanho
            Size imageSize = new Size(150, 150);
            Cv2.Resize(imagem, imagem, imageSize);
            Cv2.Resize(imagemReferencia, imagemReferencia, imageSize);

            // Converter as imagens para escala de cinza
            Mat grayImagem = new Mat();
            Cv2.CvtColor(imagem, grayImagem, ColorConversionCodes.BGR2GRAY);
            Mat grayImagemReferencia = new Mat();
            Cv2.CvtColor(imagemReferencia, grayImagemReferencia, ColorConversionCodes.BGR2GRAY);

            // Criar um objeto EigenFaceRecognizer
            var recognizer = EigenFaceRecognizer.Create();

            // Treinar o modelo com a imagem de referência
            recognizer.Train(new[] { grayImagemReferencia }, new[] { 1 });

            // Realizar o reconhecimento facial na imagem capturada
            var result = recognizer.Predict(grayImagem);

            // Normalizar a distância em uma escala de 0 a 100
            double normalizedDistance = (result - 0) / (10000 - 0) * 100;

            // Calcular a similaridade como 100 - distância normalizada
            double similarity = 100 - normalizedDistance;

            // Verificar se a similaridade é maior ou igual a 95%
            if (similarity >= 95)
            {
                // Reconhecimento facial bem-sucedido
                return Ok(new { success = true });
            }
            else
            {
                // Reconhecimento facial falhou
                return Ok(new { success = false });
            }
        }
    }

    public class ImagemDTO
    {
        public string ImagemBase64 { get; set; }
    }
}
mf98qq94

mf98qq941#

需要计算测试人脸图像和目标人脸图像的特征向量,然后使用阈值来检查两张人脸是否相似。有一个名为Emgu CV的库,它是一个C# Package 器,您可以使用它来计算测试图像的特征向量。您将需要一个分类器来提取面部特征,包括特征值和特征向量。
如果您希望基于单个图像检查图像的相似性,则不需要训练模型,但如果您希望软件识别人脸图像,则需要使用神经网络训练模型,然后使用该模型识别具有在训练过程中使用的相应正确标签的样本测试人脸。有一个名为Emgutf(Emgu Cv Tensor Flow)的库,它是一个让您构建,训练和测试神经网络以满足图像处理(包括人脸识别)需求的库。

相关问题