C# 实现简单的人脸检测对比

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、效果图(不会玩,只会做简单的操作):

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值