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

相关推荐
bluefox19793 小时前
使用 Oracle.DataAccess.Client 驱动 和 OleDB 调用Oracle 函数的区别
开发语言·c#
鲤籽鲲5 小时前
C# MethodTimer.Fody 使用详解
开发语言·c#·mfc
工业3D_大熊5 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
yngsqq6 小时前
c#使用高版本8.0步骤
java·前端·c#
hccee9 小时前
C# IO文件操作
开发语言·c#
广煜永不挂科10 小时前
Devexpress.Dashboard的调用二义性
c#·express
初九之潜龙勿用12 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
吾与谁归in14 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in14 小时前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式
神仙别闹15 小时前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#