有一些明显的东西,我没有看到在这段代码中,但每个图像返回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; }
}
}
1条答案
按热度按时间mf98qq941#
需要计算测试人脸图像和目标人脸图像的特征向量,然后使用阈值来检查两张人脸是否相似。有一个名为Emgu CV的库,它是一个C# Package 器,您可以使用它来计算测试图像的特征向量。您将需要一个分类器来提取面部特征,包括特征值和特征向量。
如果您希望基于单个图像检查图像的相似性,则不需要训练模型,但如果您希望软件识别人脸图像,则需要使用神经网络训练模型,然后使用该模型识别具有在训练过程中使用的相应正确标签的样本测试人脸。有一个名为Emgutf(Emgu Cv Tensor Flow)的库,它是一个让您构建,训练和测试神经网络以满足图像处理(包括人脸识别)需求的库。