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

相关内容

热门资讯

专业讨论!德扑之星真破解套路(... 专业讨论!德扑之星真破解套路(辅助挂)软件透明挂(有挂了解)-哔哩哔哩;人气非常高,ai更新快且高清...
每日必看!智星德州菠萝外挂检测... 每日必看!智星德州菠萝外挂检测(辅助挂)软件透明挂(有挂教学)-哔哩哔哩1、玩家可以在智星德州菠萝外...
透视透明挂!轰趴十三水有后台(... 轰趴十三水有后台赢率提升策略‌;透视透明挂!轰趴十三水有后台(辅助挂)软件透明挂(有挂详情)-哔哩哔...
发现玩家!德扑ai助手软件(辅... 发现玩家!德扑ai助手软件(辅助挂)透视辅助(有挂教学)-哔哩哔哩;玩家在德扑ai助手软件中需先进行...
一分钟了解!x-poker辅助... 一分钟了解!x-poker辅助软件(辅助挂)辅助透视(有挂攻略)-哔哩哔哩1、每一步都需要思考,不同...
一分钟揭秘!德州最新辅助器(辅... 一分钟揭秘!德州最新辅助器(辅助挂)透视辅助(有挂攻略)-哔哩哔哩;德州最新辅助器最新版本免费下载安...
玩家攻略推荐!德州辅助(辅助挂... 玩家攻略推荐!德州辅助(辅助挂)辅助透视(有挂了解)-哔哩哔哩是由北京得德州辅助黑科技有限公司精心研...
揭秘真相!pokernow德州... 《揭秘真相!pokernow德州(辅助挂)辅助透视(有挂介绍)-哔哩哔哩》 pokernow德州软件...
五分钟了解!德州之星辅助器(辅... 五分钟了解!德州之星辅助器(辅助挂)辅助透视(有挂透明)-哔哩哔哩1、很好的工具软件,可以解锁游戏的...
推荐一款!pokermaste... 1、推荐一款!pokermaster有外挂(辅助挂)透视辅助(有挂教学)-哔哩哔哩;详细教程。2、p...