基于百度AI的C#图像识别与人脸对比应用


一、前置准备

(1)注册登录百度AI,在免费尝鲜领取资格后先创建应用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)配置C#-SDK,参考此页官方的文档在这里插入图片描述
(3)配置好visual studio的NuGet,安装以下几个包:
在这里插入图片描述
(4)配置人脸库中的用户
在这里插入图片描述

二、程序设计

1.页面设计

![>代码如下(示例):](https://img-blog.csdnimg.cn/direct/1aba1222585242d38cd40530fe17983c.png

2.代码设计

1.导入api等关键内容

 private string APP_ID = "?";
 private string API_KEY = "?";
 private string SECRET_KEY = "?";
 private Face client = null;
 private bool IsStart = false;
 private FaceLocation location = null;
 private FilterInfoCollection videoDevices = null;
 private VideoCaptureDevice videoSource;

2.将图像数据以Base64编码的字符串形式返回

public string ConvertImageToBase64(Image file)
{
	using (MemoryStream memoryStream = new MemoryStream())
	{
		file.Save(memoryStream, file.RawFormat);
		byte[] imageBytes = memoryStream.ToArray();
		return Convert.ToBase64String(imageBytes);
	}
}

3.设计button1(识别图片)

1.初始化和打开文件对话框
文件对话框的初始化:创建了一个名为dialog的OpenFileDialog对象,并设置了基本属性,如初始目录、过滤器等。
2.文件选择
初始目录设置:设置InitialDirectory属性,用于指定对话框打开时的默认目录。
过滤器设置:设置Filter属性,仅允许用户选择所有类型的文件。
3.图片文件读取
打开文件:如果用户选择了文件并点击“打开”,则使用FileDialog.ShowDialog()方法显示对话框,如果用户选择了一个文件,则调用dialog.FileName获取文件路径。
读取图片:通过Image.FromFile(filename)方法读取选定的文件为Image对象。
4.将图片转换为Base64编码
调用ConvertImageToBase64方法:假设已实现名为ConvertImageToBase64的函数,用于将Image对象转换为Base64编码字符串。
5.参数配置与请求发送
配置请求参数:创建了两个字典options和options1,分别包含了不同参数配置,如面部特征、最大面部数、面部类型和活体检测控制级别等。
6.调用服务API
使用client调用API:通过client对象调用对应的检测方法(Detect),传入Base64编码的图片、图片类型、以及配置参数。
处理响应:将结果转换为字符串并显示在textBox1中。
7.错误处理
异常处理:使用try-catch语句处理可能发生的异常,弹出包含错误信息的对话框。

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.InitialDirectory = "?";
            dialog.Filter = "所有文件|*.*";
            dialog.RestoreDirectory = true;
            dialog.FilterIndex = 1;
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                string filename = dialog.FileName;
                try
                {

                    Image im = Image.FromFile(filename);
                    var image = ConvertImageToBase64(im);
                    string imageType = "BASE64";


                    var options = new Dictionary<string, object>{
                        {"face_field", "age,beauty"},
                        {"face_fields", "age,qualities,beauty"}
                    };

                    var options1 = new Dictionary<string, object>{
                        {"face_field", "age"},
                        {"max_face_num", 2},
                        {"face_type", "LIVE"},
                        {"liveness_control", "LOW"}
                    };

                    var result = client.Detect(image, imageType, options);

                    textBox1.Text = result.ToString();

                }
                catch (Exception ex)
                { MessageBox.Show(ex.Message); }
            }

        }

4.设计button3(选择图片)

1.初始化和打开文件对话框
创建了一个名为dialog的OpenFileDialog对象,并设置了初始目录为"D:"。
设置了文件过滤器,允许用户选择所有类型的文件。
设置了RestoreDirectory属性,确保文件对话框关闭后恢复到原始目录。
设置了FilterIndex属性为2,这可能意味着在对话框中预选了第二个过滤器选项(例如所有文件)。
2.处理文件选择结果
如果用户在文件对话框中选择了文件并点击了“确定”按钮,dialog.ShowDialog()返回DialogResult.OK。
接下来,代码检查了textBox2.Text的值,如果该文本框为空(即未输入内容),则将选择的文件路径写入textBox2。
如果textBox2.Text不为空(即已存在内容),则将选择的文件路径写入textBox3。

private void button3_Click(object sender, EventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.InitialDirectory = "D:\\";
    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;
        }
    }
}

5.设计button2(人脸对比)

1.检查输入:
首先,它检查了textBox2.Text和textBox3.Text是否为空。如果这两个文本框中的任何一个为空,它会弹出一个消息框提示用户需要选择要对比的人脸图片,然后立即返回,不执行后续操作。
2,读取图片并准备JSON数据:
如果两个文本框都不为空,表示用户已经选择了要对比的人脸图片。接下来,代码使用ReadImg函数读取这两张图片并转换为Base64编码,为之后的API调用做好准备。
这些图片数据会被组织成一个JArray(假设是JSON数组)对象,每个元素都是一个JObject(JSON对象),包含了图片路径、图片类型(BASE64编码)、面部类型(LIVE)、质量控制(LOW)等参数。
3.调用人脸比对服务:
使用client.Match(faces)调用服务器端的API(假设client是与服务交互的一个类,而Match方法是用于执行人脸比对操作的),传入之前准备好的包含两张图片信息的JArray对象。
这个API调用的结果(即人脸比对的结果)将被存储在变量result中。
4.显示结果:
最后,将result转换为字符串并显示在textBox1中,供用户查看比对的结果。

        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)
            { }
        }


总结

本博客详细介绍了如何利用百度AI平台,结合C#编程语言,实现图像识别功能以及人脸对比应用的开发。首先,通过注册登录百度AI平台并创建应用,获取API密钥,为之后的SDK配置做好了基础准备。接着,配置了所需的C# SDK,以及Visual Studio中的NuGet包,确保了开发环境的正确性。

程序设计部分重点包含了页面设计和代码实现两大部分。在页面设计中,引入了一个简单的用户界面,用户可以上传图片、选择文件、执行图像识别以及人脸对比操作。在代码实现方面,详细展示了如何处理图像文件的读取、转换为Base64编码,以及如何通过API与百度AI服务进行交互,完成图像识别和人脸比对任务。

用户可以按下“识别图片”按钮上传或选择图片,程序读取图片后,将其转换为Base64编码的字符串,然后通过预先配置的API密钥调用百度AI服务,获得图像识别的结果。此外,用户还可以利用“选择图片”功能选择两幅图片,执行人脸对比操作,获取对比结果。

通过本文的教程,我们不仅能够了解百度AI在图像处理和人脸识别领域的强大功能,还能够掌握如何将这些技术集成到自己的C#应用中,为实际项目开发提供技术支持。从用户界面设计到API调用的全过程,为开发者提供了一条清晰的路径,从理论到实践,逐步实现功能完善的图像识别与人脸对比应用。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值