1、NuGet包管理器下载:
2、简单绘制个Demo:
3、添加两个按钮事件:
private void btnSelect_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
file.Filter = fileFilter;
if (file.ShowDialog() != DialogResult.OK) return;
pictureBox1.ImageLocation = file.FileName;
}
private void btnPortraitDetection(object sender, EventArgs e)
{
int i = 0;
long time = 0;
string folderPath = @"**********"; // 文件夹路径
String msg = "未检测出相同的人";
string[] files = Directory.GetFiles(folderPath, "*.png"); // 获取所有的PNG文件路径
files = files.Concat(Directory.GetFiles(folderPath, "*.jpg")).ToArray(); // 获取所有的JPEG文件路径
Stopwatch sw = Stopwatch.StartNew();
string SaveFile = files[0];
float similaritys = 0;
foreach (string file in files)
{
i++;
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
sw.Start();
using var faceImage0 = SKBitmap.Decode(pictureBox1.ImageLocation);
using var faceImage1 = SKBitmap.Decode(fileStream);
//检测人脸信息
FaceDetector faceDetector = new FaceDetector();
FaceInfo[] infos0 = faceDetector.Detect(faceImage0);
FaceInfo[] infos1 = faceDetector.Detect(faceImage1);
if (infos0.Length == 0)
{
msg = "图片1未检测到人脸";
richTextBox1.Text += msg + "\r\n";
sw.Stop();
return;
}
if (infos1.Length == 0)
{
msg = "图片2未检测到人脸";
richTextBox1.Text += msg + "\r\n";
sw.Stop();
return;
}
//标记人脸位置
FaceLandmarker faceMark = new FaceLandmarker();
FaceMarkPoint[] points0 = faceMark.Mark(faceImage0, infos0[0]);
FaceMarkPoint[] points1 = faceMark.Mark(faceImage1, infos1[0]);
//提取特征值
FaceRecognizer faceRecognizer = new FaceRecognizer();
float[] data0 = faceRecognizer.Extract(faceImage0, points0);
float[] data1 = faceRecognizer.Extract(faceImage1, points1);
//对比特征值
bool isSelf = faceRecognizer.IsSelf(data0, data1);
//计算相似度
float similarity = faceRecognizer.Compare(data0, data1);
time += sw.ElapsedMilliseconds;
if (isSelf == true && similarity > similaritys)
{
similaritys = similarity;
SaveFile = file;
pictureBox2.ImageLocation = SaveFile;
msg = "此人相似度:" + similarity + ",对比总耗时:" + time + "ms";
continue;
}
if (i == files.Count())
{
richTextBox1.Text += msg + "\r\n";
}
sw.Stop();
}
}
}
4、效果图(不会玩,只会做简单的操作):