使用c#接入百度人脸识别库实现人脸对比

引言

人脸识别技术是一种通过计算机视觉和模式识别技术来识别和验证人脸的技术。它在现代社会中具有重要性,并广泛应用于各个领域。通过百度的人脸识别库,我们可以完成人脸对比来进行人脸认证等操作,本文将简单讲讲如何用百度的人脸识别api完成人脸对别的操作。

百度人脸识别的服务

接口能力

  • 两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值。
  • 多种图片类型 :支持生活照证件照身份证芯片照带网纹照四种类型的人脸对比。
  • 活体检测控制 :基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。)。
  • 质量检测控制:分析图片的中人脸的模糊度、角度、光照强度等特征,判断图片质量。

业务应用

用于比对多张图片中的人脸相似度并返回两两比对的得分,可用于判断两张脸是否是同一人的可能性大小。

典型应用场景:如人证合一验证用户认证等,可与您现有的人脸库进行比对验证。

准备工作

  1. 注册百度智能云账号
  1. 创建应用
  1. 填写项目基本信息
  1. 获取api密钥

在项目中集成百度人脸识别api

  • 新建交互类

Baidu.Aip.Face.Face是人脸的交互类,为使用人脸的开发人员提供了一系列的交互方法。

用户可以参考如下代码新建一个交互类:

ini 复制代码
// 设置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";

var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY);
client.Timeout = 60000;  // 修改超时时间

在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEYSECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

注意 :如您以前是百度云的老用户,其中API_KEY对应百度云的"Access Key ID",SECRET_KEY对应百度云的"Access Key Secret"。

  • 选择要对比的图片
ini 复制代码
private void button3_Click(object sender, EventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.InitialDirectory = "D:\\files\\picture\\我的";
    dialog.Filter = "所有文件|*.*";
    dialog.RestoreDirectory = true;
    dialog.FilterIndex = 2;
    if (dialog.ShowDialog() == DialogResult.OK)
    {
        if (string.IsNullOrEmpty(textBox2.Text))
        {
            textBox2.Text = dialog.FileName;
        }
        else
        {
            textBox3.Text = dialog.FileName;
        }
    }
}

点击选择图片的按钮,执行这段代码,这里的文件筛选器可以让我们选择所有类型的文件,判断是否选择了第一个文件,是则选择第二个文件,否则则选择第一个文件,将选择的两个文件分别放入textbox中。

  • 编写人脸对比逻辑
csharp 复制代码
public string ReadImg(string img)
{
    return Convert.ToBase64String(File.ReadAllBytes(img));
}

private void button2_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(textBox2.Text) || string.IsNullOrEmpty(textBox3.Text))
    {
        MessageBox.Show("请选择要对比的人脸图片");
        return;
    }
    try
    {
        string path1=textBox2.Text;
        string path2=textBox3.Text;
        
        var faces = new JArray
        {
            new JObject
            {
                {"image", ReadImg(path1)},
                {"image_type", "BASE64"},
                {"face_type", "LIVE"},
                {"quality_control", "LOW"},
                {"liveness_control", "NONE"},
            },
            new JObject
            {
                {"image", ReadImg(path2)},
                {"image_type", "BASE64"},
                {"face_type", "LIVE"},
                {"quality_control", "LOW"},
                {"liveness_control", "NONE"},
            }
         };
        
        // 带参数调用人脸比对
        var result = client.Match(faces);
        textBox1.Text = result.ToString();
    }
    catch (Exception ex)
    { }
}

这里先是用readimg函数对图像进行格式转换,然后判断是否传入两张图片,按文档设置faces参数,将faces参数传入client.Match方法中,将结果转换成字符串输出到textbox中。

这里我放入的是同一个人的两张不同的图片,这里分数超过80说明识别成功了,如此一来我们就实现了图片对比的功能

小结

如此我们便成功地使用百度AI库实现了人脸比对功能。该功能允许我们将两张人脸图像进行比对,以确定它们是否属于同一个人。以下是对流程的简要概述

首先,我使用百度AI库提供的人脸识别接口,通过向接口传递人脸图像,获取每张图像的人脸特征向量。这些特征向量是用于表示人脸的数值化向量表示。

然后,我使用百度AI库提供的人脸比对接口,将两张人脸图像的特征向量进行比对。通过计算这些特征向量之间的相似度,我能够确定这两张图像中的人脸是否属于同一个人。

在比对结果方面,我设置了一个阈值来判断相似度的阈值界限。如果两张人脸图像的相似度超过设定的阈值,则可以认为它们属于同一个人;否则,它们被认为是不同的人。

通过使用百度AI库的人脸比对功能,我能够有效地进行人脸识别任务。这为我提供了一种方便、可靠的方式来验证人脸身份,具有广泛的应用潜力,例如安全门禁系统、人脸支付等领域。

相关推荐
VinciYan10 分钟前
编译Open Cascade(OCC)并使用C#进行开发
c#·开源软件·cad·occ·open cascade·三维cad
该醒醒了~12 分钟前
yolov5实例分割跑通以及C#读取yolov5_Seg实例分割转换onnx进行检测部署
python·yolo·c#
柠檬味的薄荷心21 分钟前
【Unity2D 2022:Particle System】添加拾取粒子特效
笔记·unity·c#·游戏引擎
emplace_back1 小时前
C# MathNet
开发语言·机器学习·c#
danielli1 小时前
C# 开发Winform DataGridView的增删改查实战
开发语言·oracle·c#
不爱敲代码的阿玲2 小时前
C# —— 日期对象
开发语言·c#
Dm_dotnet3 小时前
大语言模型的应用探索AI Agent初探!
c#
hlyling3 小时前
一键高效处理,批量缩放PNG图片,按比例轻松调整,高效工作从此开始!
javascript·python·c#·objective-c·batch·symfony
不爱学习的啊Biao5 小时前
C# 下sendmessage和postmessage的区别详解与示例
开发语言·c#
yizhou20105 小时前
C# Winform项目中简单使用Sqlite并在DataGridview中显示
sqlite·c#