如何解决有什么方法可以在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,..."
}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。