百度AI人脸识别

目录


一、项目背景及意义

         随着计算机视觉和人工智能算法的快速发展,人脸识别技术逐渐被应用于日常生活和商业场景中。同时,百度、阿里、腾讯等互联网平台推出了云服务,将他们的技术共享到云端,以接口的形式向普通用户提供服务。

二、采取的技术 

C#语言:用于后端开发和相关逻辑编写

ASP.NET:用于构建Web应用程序的框架

Entity Framework:用于数据库管理和操作的ORM工具

图像处理库:如OpenCV或Emgu CV,用于图像处理和人脸识别

网络连接:HTTP/HTTPS协议、TCP/IP协议等网络通信技术

文件处理:文件上传、下载、存储等相关技术

版本控制:如Git等版本控制工具 

三、准备阶段

1.搜索“百度AI开放平台”

2.打开人脸识别云服务

3.点击立即使用

4.点击左侧应用列表后,创建应用

四、界面展示

设计界面如下图所示:

五、代码实现

5.1识别图片

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

    dialog.InitialDirectory = "E:\\教学\\VS222302 - desktop\\baiduAIFaceIdentify-master\\baiduAIFaceIdentify-master\\BaiduAI\\BaiduAI\\bin\\Debug";
    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>{
                //{"max_face_num", 2},
                {"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();

            //FaceDetectInfo detect = JsonHelper.DeserializeObject<FaceDetectInfo>(result.ToString());

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

}

说明:

该方法的功能是打开一个文件对话框,让用户选择一个文件,并读取该文件的图像数据。

1.创建一个OpenFileDialog对象dialog用于打开文件对话框。设置dialog的初始目录为指定路径,过滤器为所有文件,还原目录为true,过滤器索引为1。

2.通过对话框的ShowDialog方法显示文件对话框,并判断用户是否点击了确定按钮。如果用户点击了确定按钮,就获取选中文件的文件名,然后尝试从该文件名所指定的路径读取图像数据。

3.使用Image.FromFile方法将图像数据加载到im对象中。然后将图像数据转换成Base64编码的字符串,以便传输给百度AI接口。

4.定义一个options字典,存储可选参数。这里设置了人脸检测的返回字段为年龄和颜值。

5.调用百度AI接口的Detect方法,传入图像数据、图像类型和可选参数。将返回的结果转换为字符串并显示在textBox1文本框中。

6.如果出现异常,将异常信息显示在消息框中。

5.2选择人脸图 

 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;
         }
     }
 }

说明:

  1. InitialDirectory:设置文件对话框的初始目录为 D:\
  2. Filter:设置文件过滤器为“所有文件”,即显示所有文件类型
  3. RestoreDirectory:在文件对话框关闭后,还原当前目录到之前的状态
  4. FilterIndex:设置过滤器索引为 2,尽管这里的索引似乎没有特别的实用性,因为只有一个过滤器
  5. ShowDialog():显示文件对话框,并等待用户选择文件或取消操作
  6. DialogResult.OK:检查用户是否点击了“确定”按钮。
  7. string.IsNullOrEmpty(textBox2.Text):检查 textBox2 是否为空,即判断 textBox2 是否已有文本内容。如果 textBox2 为空,则将选定的文件路径赋值给 textBox2 的 Text 属性;如果 textBox2 不为空,则将选定的文件路径赋值给 textBox3 的 Text 属性。

5.3人脸对比 

检查文本框是否为空

if (string.IsNullOrEmpty(textBox2.Text) || string.IsNullOrEmpty(textBox3.Text))
{
    MessageBox.Show("请选择要对比的人脸图片");
    return;
}

说明:

  1. 使用 string.IsNullOrEmpty 方法检查 textBox2 和 textBox3 是否为空
  2. 如果任意一个文本框为空,则弹出提示消息“请选择要对比的人脸图片”,并返回,不继续执行后续代码

尝试执行代码块

try
{
    string path1 = textBox2.Text;
    string path2 = textBox3.Text;

 说明:

  1. 进入 try 块,以捕获可能抛出的异常
  2. 获取 textBox2 和 textBox3 中的文本内容,分别赋值给 path1 和 path2

创建包含人脸数据的 JArray 对象

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"},
    }
};

 说明:

  1. 创建一个 JArray 对象 faces,内部包含两个 JObject 对象
  2. 每个 JObject 对象表示一张人脸图片的数据
  3. liveness_control: 活体检测控制参数,设置为 "NONE"
  4. quality_control: 质量控制参数,设置为 "LOW"
  5. face_type: 指定人脸类型为 "LIVE",表示活体人脸
  6. image_type: 指定图像类型为 "BASE64"
  7. image: 使用 ReadImg(path) 方法读取图片路径,将图片编码为 BASE64 格式

调用人脸比对接口

var result = client.Match(faces);
textBox1.Text = result.ToString();

 说明:

  1. 调用 client.Match(faces) 方法进行人脸比对操作
  2. 将比对结果转换为字符串,并显示在 textBox1 中

捕获异常:

catch (Exception ex)
{ }

 说明:

1.捕获任何在 try 块中发生的异常,但没有做任何处理,只是空的 catch 块。实际应用中,     建议至少记录异常信息或显示错误提示。

六、运行结果

1.点击识别图片,结果如下图所示

2.选择人脸图后,点击人脸对比,结果如下图所示

七、实验小结

1. 需求分析与设计:
   -明确需求:实现一个界面,能够让用户选择两张人脸图片,并进行比对。
   - 设计界面,包括文本框用于输入图片路径和一个按钮用于触发比对操作。

2. 编码实现:
   - 使用了C#语言和JSON.NET库来处理数据和调用API。
   - 编写了读取图像并将其转换为BASE64格式的方法。
   - 实现了按钮点击事件处理方法,其中包括了路径验证、图像数据的组织以及调用人脸比对API的步骤。

3. API调用:
   - 利用第三方库调用了人脸比对API,将两张图像的数据传递给该API进行比对。
   - 将比对结果显示在界面的文本框中。

4. 异常处理:
   - 在关键的代码段进行了异常处理,以确保程序的稳定性和可靠性。

5. 学习收获:
   - 通过这次实验,学习了如何在C#环境下处理图像数据和调用外部API。
   - 熟悉了JSON数据的构建和处理,以及如何与第三方库集成来实现更复杂的功能。
   - 加深了对异常处理的重要性和实际应用的意义。
通过本次实验,不仅深入了解了人脸比对算法的基本实现原理,还掌握了如何将理论应用到实际的编程中。通过不断地尝试和调试,我不仅提高了自己的编程能力,还增加了解决问题和调试代码的经验。未来,在类似的项目中,我会继续积累经验,改进代码的质量和性能,以更好地满足用户和项目的需求。

qt是一种跨平台的应用程序开发框架,它包含了许多用于创建图形用户界面(GUI)的功能和工具。通过使用qt,开发者可以在多个操作系统上构建高性能的应用程序。而百度AI人脸识别系统则是基于百度人工智能技术开发的一种人脸识别系统。 百度AI人脸识别系统集成了颜值评分、人脸比对、性别年龄识别等多种功能。它可以通过对人脸进行分析和比对,判断出人脸的年龄、性别以及颜值评分等信息。此外,它还可以通过人脸比对技术进行身份认证,用于门禁系统、人脸支付等场景。 使用qt来开发百度AI人脸识别系统,可以便捷地创建用户友好的图形界面,并调用百度AI人脸识别的API接口来实现人脸识别功能。开发者可以通过qt提供的丰富控件和布局管理器,设计出符合用户习惯的界面,提供良好的用户体验。 通过qt开发的百度AI人脸识别系统,可以应用于各种场景,例如安防领域的人脸识别门禁系统,民宿行业的人脸入住认证系统,还能用于医疗行业的患者身份认证等。使用这种开发方式,可以大幅度减少开发时间和成本,提高开发效率。 综上所述,使用qt开发百度AI人脸识别系统可以充分发挥qt的跨平台特性和丰富的GUI功能,方便开发者在不同操作系统上构建性能优秀的人脸识别应用程序。同时,百度AI人脸识别系统的功能丰富,可以应用于多个行业,提供更好的用户体验和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值