在这篇博客文章中,我们将介绍如何使用 C# 编写一个 Windows 桌面应用程序,利用百度 AI 的人脸识别 API 实现人脸检测和人脸对比功能。
前提条件
- 百度 AI 账户:你需要一个百度 AI 账户,并申请人脸识别的 API Key 和 Secret Key。
- Visual Studio:确保你已经安装了 Visual Studio 以及 .NET Framework。
- Baidu.Aip NuGet 包:在你的项目中添加 Baidu.Aip NuGet 包。
创建项目
首先,在 Visual Studio 中创建一个新的 Windows Forms 应用程序项目。然后,按照以下步骤进行操作。
实现人脸检测
1. 添加按钮和文本框
在你的 Windows 窗体设计器中添加两个按钮 (button1
和 button2
),以及三个文本框 (textBox1
, textBox2
, textBox3
)。第一个按钮用于选择图片并进行人脸检测,第二个按钮用于选择两张图片并进行人脸对比。
2. 实现人脸检测功能
在 button1_Click
事件处理程序中,实现图片选择和人脸检测功能。
以下是完整的代码示例:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp";
dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
dialog.RestoreDirectory = true;
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 result = client.Detect(image, imageType, options);
textBox1.Text = result.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private string ConvertImageToBase64(Image image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, image.RawFormat);
byte[] imageBytes = ms.ToArray();
return Convert.ToBase64String(imageBytes);
}
}
实现人脸对比
实现人脸对比功能
在 button2_Click
事件处理程序中,实现选择两张图片并进行人脸对比的功能。
以下是完整的代码示例:
private void button2_Click(object sender, EventArgs e)
{
string path1 = SelectImageFile();
string path2 = SelectImageFile();
if (string.IsNullOrEmpty(path1) || string.IsNullOrEmpty(path2))
{
MessageBox.Show("请选择要对比的人脸图片");
return;
}
try
{
var faces = new JArray
{
new JObject
{
{"image", path1},
{"image_type", "BASE64"},
{"face_type", "LIVE"},
{"quality_control", "LOW"},
{"liveness_control", "NONE"},
},
new JObject
{
{"image", path2},
{"image_type", "BASE64"},
{"face_type", "LIVE"},
{"quality_control", "LOW"},
{"liveness_control", "NONE"},
}
};
// 带参数调用人脸比对
var result = client.Match(faces);
textBox1.Text = result.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private string SelectImageFile()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp";
dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
if (dialog.ShowDialog() == DialogResult.OK)
{
string filename = dialog.FileName;
try
{
Image im = Image.FromFile(filename);
return ConvertImageToBase64(im);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
return null;
}
private string ConvertImageToBase64(Image image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, image.RawFormat);
byte[] imageBytes = ms.ToArray();
return Convert.ToBase64String(imageBytes);
}
}
总结
通过上述步骤,我们成功地在 C# Windows 应用程序中实现了人脸检测和人脸对比功能。用户可以选择单张图片进行人脸检测,也可以选择两张图片进行人脸对比。这些技术可以用于多种应用场景,如身份验证、照片整理等。