Windows作业三:使用C#调用百度AI实现人脸识别、图片比对等功能
创始人
2024-12-29 14:39:00
0

目录

一、引言和项目介绍

二、前期准备工作

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

                    {

                        {"face_field", "age,beauty"},

                        {"face_fields", "age,qualities,beauty"}

                    };

                    var options1 = new Dictionary

                    {

                        {"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#编程技术的理解,也掌握了人工智能技术在实际应用中的开发流程和方法,为今后的学习和工作打下了坚实基础。

相关内容

热门资讯

避坑细节!微信微乐小程序有挂黑... 避坑细节!微信微乐小程序有挂黑科技,微信小程序微乐辅助器ios-确实有辅助工具(确实有挂)在进入微信...
推荐几款新版!AAPoKer辅... 推荐几款新版!AAPoKer辅助挂多功能透视工具,果然是有挂(有挂秘籍)1、金币登录送、破产送、升级...
一分钟了解!德扑之星辅助挂多功... 一分钟了解!德扑之星辅助挂多功能透视工具,其实真的是有挂(有挂讲解)德扑之星能透视中分为三种模型:德...
今日焦点!微乐小程序微乐辅助软... 今日焦点!微乐小程序微乐辅助软件,微乐麻将脚本透视-果然有辅助神器(新版有挂)该软件可以轻松地帮助玩...
一秒答解!WPK辅助挂多功能透... 一秒答解!WPK辅助挂多功能透视工具,都是存在有挂(有人有挂)1、一秒答解!WPK辅助挂多功能透视工...
详细说明!微信小程序微乐房间怎... 详细说明!微信小程序微乐房间怎么开挂,微信小程序游戏辅助-本来真的有辅助app(真的有挂)1、进入到...
玩家必备科普!aapoker辅... 玩家必备科普!aapoker辅助挂多功能透视工具,真是真的是有挂(有挂细节)aapoker破解侠是真...
推荐十款!微信微乐辅助免费,微... 推荐十款!微信微乐辅助免费,微乐自建房辅助软件-切实是有辅助脚本(有挂攻略)1、任何微信微乐辅助免费...
实测揭晓!微信小程序微乐辅助免... 您好,微信小程序微乐辅助免费这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】...
我来分享!AAPoKer辅助挂... 我来分享!AAPoKer辅助挂多功能透视工具,确实真的是有挂(果真有挂)1、让任何用户在无需AAPo...