Windows作业三:使用C#调用百度AI实现人脸识别、图片比对等功能

avatar
作者
猴君
阅读量:9

目录

一、引言和项目介绍

二、前期准备工作

1、准备百度AI接口

2、SDK下载

3、下载Nuget包AForge和Baidu.AI

三、核心功能和代码实现

1、人脸识别、图片对比

2、其他功能

四、总结


一、引言和项目介绍

应windows课程要求,利用C#编程语言结合百度AI的人脸识别技术,实现一系列人脸相关的功能。主要涵盖人脸识别、图片比对以及人脸登录等应用场景。通过调用百度AI提供的API接口,快速、准确地完成人脸特征的提取与比对,展示C#与AI技术的结合应用。

二、前期准备工作

1、准备百度AI接口

 搜索进入百度智能云

搜索人脸识别

领取免费资源并创建应用

得到密钥

2、SDK下载

3、下载Nuget包AForge和Baidu.AI

三、核心功能和代码实现

1、人脸识别、图片对比

namespace BaiduAI

{

    public partial class Form1 : Form

    {

        // Baidu AI credentials

        private string APP_ID = "xxxxxxxxx"; // 百度AI的应用ID

        private string API_KEY = "xxxxxxxxxxx"; // 百度AI的API密钥

        private string SECRET_KEY = "xxxxxxxxxxx"; // 百度AI的密钥

        private Face client = null; // Face类的实例,用于与百度AI进行通信

        private bool IsStart = false; // 表示是否启用人脸检测

        private FaceLocation location = null; // 表示图像中人脸的位置

        private FilterInfoCollection videoDevices = null; // 视频设备的集合

        private VideoCaptureDevice videoSource; // 视频捕获设备

        public Form1()

        {

            InitializeComponent();

            axWindowsMediaPlayer1.uiMode = "Invisible";

            client = new Face(API_KEY, SECRET_KEY); // 使用API密钥和密钥创建Face实例

        }

        // 将图像转换为Base64编码的字符串

        public string ConvertImageToBase64(Image file)

        {

            using (MemoryStream memoryStream = new MemoryStream())

            {

                file.Save(memoryStream, file.RawFormat);

                byte[] imageBytes = memoryStream.ToArray();

                return Convert.ToBase64String(imageBytes);

            }

        }

        // "打开"按钮的事件处理程序

        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>

                    {

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

                    };

                    // 使用百度AI客户端对图像进行人脸检测

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

                    textBox1.Text = result.ToString();

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                }

            }

        }

        // 读取图像文件并将其作为Base64编码的字符串返回

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

                    }

                 };

                // 使用百度AI客户端进行人脸比较

                var result = client.Match(faces);

               textBox1.Text = result.ToString();

            }

            catch (Exception ex)

            {

                // 处理异常

            }

        }

        // "浏览"按钮的事件处理程序

        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;

                }

            }

        }

    }

}

这段代码实现了一个简单的窗体应用程序,用于调用百度AI的人脸检测和比对功能。以下是代码中的重要部分:

  • 在 Form1 类中定义了百度AI的凭据,包括 APP_ID、API_KEY 和 SECRET_KEY。
  • 在构造函数中,创建了一个 Face 类的实例,用于与百度AI进行通信。
  • ConvertImageToBase64 方法将图像转换为Base64编码的字符串。
  • button1_Click 方法是 "打开" 按钮的事件处理程序。它打开一个文件对话框,选择图像文件后,将图像转换为Base64编码,并使用百度AI客户端进行人脸检测。
  • button2_Click 方法是 "比较" 按钮的事件处理程序。它打开两个文件对话框,选择两个要比较的人脸图像文件后,将它们转换为Base64编码,并使用百度AI客户端进行人脸比较。
  • button3_Click 方法是 "浏览" 按钮的事件处理程序。它打开一个文件对话框,用于选择要比较的人脸图像文件。

运行展示:

单图片识别并返回人脸值:

如图该人脸美度为83

双图片对比:

如图,由于我使用的两张相同图片 相似度为100

2、其他功能

还可以实现其他功能如人脸检测、人脸登录等,这里简单展示设计界面和运行情况,不做代码的详细展开

四、总结

本次Windows作业通过使用C#编程语言,成功调用了百度AI的人脸识别接口,实现了人脸识别、图片比对以及人脸登录等功能。项目首先通过摄像头捕获实时视频流,利用百度AI的人脸识别API进行人脸检测和特征提取。随后,实现了图片比对功能,通过比对实时视频中的人脸与数据库中存储的人脸图片,进行身份验证。在项目过程中,我学习了如何与第三方API进行交互,处理了多线程同步、图像处理等技术难点。通过此次实践,不仅加深了对C#编程技术的理解,也掌握了人工智能技术在实际应用中的开发流程和方法,为今后的学习和工作打下了坚实基础。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!