我只需要比较两张脸是否是同一个人......
我转换此项目运行时中的人脸检测和识别来比较两个人脸,但该方法始终返回 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
我搜索了很多,但没有发现任何东西可以解决我的问题
有谁可以知道我在这段代码中的错误,或者可以给我一个比较两个面孔的另一个解决方案的链接?
(注:我是这个领域的新手)
如果您可以在服务器上部署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,..."
}
]
}