文章目录
一、前置准备
(1)注册登录百度AI,在免费尝鲜领取资格后先创建应用
(2)配置C#-SDK,参考此页官方的文档
(3)配置好visual studio的NuGet,安装以下几个包:
(4)配置人脸库中的用户
二、程序设计
1.页面设计
2.代码设计
1.导入api等关键内容
private string APP_ID = "?";
private string API_KEY = "?";
private string SECRET_KEY = "?";
private Face client = null;
private bool IsStart = false;
private FaceLocation location = null;
private FilterInfoCollection videoDevices = null;
private VideoCaptureDevice videoSource;
2.将图像数据以Base64编码的字符串形式返回
public string ConvertImageToBase64(Image file)
{
using (MemoryStream memoryStream = new MemoryStream())
{
file.Save(memoryStream, file.RawFormat);
byte[] imageBytes = memoryStream.ToArray();
return Convert.ToBase64String(imageBytes);
}
}
3.设计button1(识别图片)
1.初始化和打开文件对话框
文件对话框的初始化:创建了一个名为dialog的OpenFileDialog对象,并设置了基本属性,如初始目录、过滤器等。
2.文件选择
初始目录设置:设置InitialDirectory属性,用于指定对话框打开时的默认目录。
过滤器设置:设置Filter属性,仅允许用户选择所有类型的文件。
3.图片文件读取
打开文件:如果用户选择了文件并点击“打开”,则使用FileDialog.ShowDialog()方法显示对话框,如果用户选择了一个文件,则调用dialog.FileName获取文件路径。
读取图片:通过Image.FromFile(filename)方法读取选定的文件为Image对象。
4.将图片转换为Base64编码
调用ConvertImageToBase64方法:假设已实现名为ConvertImageToBase64的函数,用于将Image对象转换为Base64编码字符串。
5.参数配置与请求发送
配置请求参数:创建了两个字典options和options1,分别包含了不同参数配置,如面部特征、最大面部数、面部类型和活体检测控制级别等。
6.调用服务API
使用client调用API:通过client对象调用对应的检测方法(Detect),传入Base64编码的图片、图片类型、以及配置参数。
处理响应:将结果转换为字符串并显示在textBox1中。
7.错误处理
异常处理:使用try-catch语句处理可能发生的异常,弹出包含错误信息的对话框。
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.InitialDirectory = "?";
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"}
};
var result = client.Detect(image, imageType, options);
textBox1.Text = result.ToString();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
}
}
4.设计button3(选择图片)
1.初始化和打开文件对话框
创建了一个名为dialog的OpenFileDialog对象,并设置了初始目录为"D:"。
设置了文件过滤器,允许用户选择所有类型的文件。
设置了RestoreDirectory属性,确保文件对话框关闭后恢复到原始目录。
设置了FilterIndex属性为2,这可能意味着在对话框中预选了第二个过滤器选项(例如所有文件)。
2.处理文件选择结果
如果用户在文件对话框中选择了文件并点击了“确定”按钮,dialog.ShowDialog()返回DialogResult.OK。
接下来,代码检查了textBox2.Text的值,如果该文本框为空(即未输入内容),则将选择的文件路径写入textBox2。
如果textBox2.Text不为空(即已存在内容),则将选择的文件路径写入textBox3。
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;
}
}
}
5.设计button2(人脸对比)
1.检查输入:
首先,它检查了textBox2.Text和textBox3.Text是否为空。如果这两个文本框中的任何一个为空,它会弹出一个消息框提示用户需要选择要对比的人脸图片,然后立即返回,不执行后续操作。
2,读取图片并准备JSON数据:
如果两个文本框都不为空,表示用户已经选择了要对比的人脸图片。接下来,代码使用ReadImg函数读取这两张图片并转换为Base64编码,为之后的API调用做好准备。
这些图片数据会被组织成一个JArray(假设是JSON数组)对象,每个元素都是一个JObject(JSON对象),包含了图片路径、图片类型(BASE64编码)、面部类型(LIVE)、质量控制(LOW)等参数。
3.调用人脸比对服务:
使用client.Match(faces)调用服务器端的API(假设client是与服务交互的一个类,而Match方法是用于执行人脸比对操作的),传入之前准备好的包含两张图片信息的JArray对象。
这个API调用的结果(即人脸比对的结果)将被存储在变量result中。
4.显示结果:
最后,将result转换为字符串并显示在textBox1中,供用户查看比对的结果。
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"},
}
};
// 带参数调用人脸比对
var result = client.Match(faces);
textBox1.Text = result.ToString();
}
catch (Exception ex)
{ }
}
总结
本博客详细介绍了如何利用百度AI平台,结合C#编程语言,实现图像识别功能以及人脸对比应用的开发。首先,通过注册登录百度AI平台并创建应用,获取API密钥,为之后的SDK配置做好了基础准备。接着,配置了所需的C# SDK,以及Visual Studio中的NuGet包,确保了开发环境的正确性。
程序设计部分重点包含了页面设计和代码实现两大部分。在页面设计中,引入了一个简单的用户界面,用户可以上传图片、选择文件、执行图像识别以及人脸对比操作。在代码实现方面,详细展示了如何处理图像文件的读取、转换为Base64编码,以及如何通过API与百度AI服务进行交互,完成图像识别和人脸比对任务。
用户可以按下“识别图片”按钮上传或选择图片,程序读取图片后,将其转换为Base64编码的字符串,然后通过预先配置的API密钥调用百度AI服务,获得图像识别的结果。此外,用户还可以利用“选择图片”功能选择两幅图片,执行人脸对比操作,获取对比结果。
通过本文的教程,我们不仅能够了解百度AI在图像处理和人脸识别领域的强大功能,还能够掌握如何将这些技术集成到自己的C#应用中,为实际项目开发提供技术支持。从用户界面设计到API调用的全过程,为开发者提供了一条清晰的路径,从理论到实践,逐步实现功能完善的图像识别与人脸对比应用。