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