目录
1 简介
在这篇博客中,我将通过调用百度的人脸识别相关的云服务算法,实现“人脸识别”相关功能。本程序形式为Windows桌面程序,主要采用Winform模式进行开发,编程语言为C#。
注:本篇博客只具体讲述到“人脸对比”功能。
2 前置条件
软件:Windows10 操作系统。
网络:设备连接外网。
百度接口配置
人脸识别小程序的内部算法实现需借助百度接口,所以在启动小程序之前需要提前进行百度接口的相关配置工作。
打开百度智能云网址:百度智能云-云智一体深入产业百度智能云致力于为企业和开发者提供全球领先的人工智能、大数据和云计算服务,加速产业智能化转型升级https://cloud.baidu.com/注册登录,进入如下界面。
点击立即使用然后点击创建应用,在应用名称一栏输入所建应用的名称,在应用描述一栏输入对所创建应用的大概描述,然后点击立即创建。
点击返回应用列表即可看到刚才创建应用的详细信息,并且可以看到获取到的API key和Secret key。
3 实验内容
3.1 界面设计
3.2 主要代码
public partial class Form1 : Form
{
private string APP_ID = "********";
private string API_KEY = "********";
private string SECRET_KEY = "********";//输入你的KEY码
private Face client = null;
/// <summary>
/// 是否可以检测人脸
/// </summary>
private bool IsStart = false;
/// <summary>
/// 人脸在图像中的位置
/// </summary>
private FaceLocation location = null;
private FilterInfoCollection videoDevices = null;
private VideoCaptureDevice videoSource;
public Form1()
{
InitializeComponent();
axWindowsMediaPlayer1.uiMode = "Invisible";
client = new Face(API_KEY, SECRET_KEY);
}
/// <summary>
/// 识别图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
///
public string ConvertImageToBase64(Image file)
{
using (MemoryStream memoryStream = new MemoryStream())
{
file.Save(memoryStream, file.RawFormat);
byte[] imageBytes = memoryStream.ToArray();
return Convert.ToBase64String(imageBytes);
}
}
3.3 程序解读
- 定义了三个字符串变量,分别表示APP_ID、API_KEY和SECRET_KEY,这些是用于调用人脸识别API的凭证。
- 定义了一个Face类型的变量client,用于实例化人脸识别对象。
- 定义了一个布尔类型的变量IsStart,用于表示是否可以检测人脸。
- 定义了一个FaceLocation类型的变量location,用于存储人脸在图像中的位置。
- 定义了一个FilterInfoCollection类型的变量videoDevices,用于存储视频设备信息。
- 定义了一个VideoCaptureDevice类型的变量videoSource,用于捕获视频源。
- 在Form1的构造函数中,初始化了组件,设置了axWindowsMediaPlayer1的uiMode属性为"Invisible",百度云调用的face类实例化了人脸识别对象client。
- 定义了一个名为ConvertImageToBase64的方法,用于将图片转换为Base64编码的字符串。
4 程序功能
4.1 编程指导
- button1“识别图片”:用于打开文件对话框选择图片,并将图片转换为Base64编码的字符串,然后调用百度AI的人脸检测接口进行人脸检测。
- 定义一个名为ReadImg的方法,用于将图片转换为Base64编码的字符串。
- button2“人脸对比”:用于比较两张图片的人脸相似度,并调用百度AI的人脸比对接口进行人脸比对。
- button3“选择人脸图”:用于打开文件对话框选择图片,并将图片路径显示在textBox2和textBox3中。
4.2 识别图片
点击“识别图片”按钮后在本机文件中选择合适的人脸图片进行识别
这个人脸的信息包括:
- "face_token":人脸的唯一标识符
- "location":人脸在图像中的位置,包括左上角的坐标(left, top)、宽度、高度和旋转角度
- "face_probability":人脸的概率,范围为0到1,1表示最有可能为人脸
- "angle":人脸的角度,包括偏航角(yaw)、俯仰角(pitch)和滚动角(roll)
- "age":人脸的年龄
- "beauty":人脸的美丽度,范围为0到100
4.3 人脸对比
"score"表示人脸识别的分数,范围为0到100,分数越高表示识别越准确。"face_list"是一个数组,包含了每个检测到的人脸的唯一标识符(face_token)。
先点击“选择人脸图”按钮选择两张图片,再点击“人脸对比”按钮进行对比
在这两个例子中,第一个检测到了两个人脸,第二个检测到同一个人脸的不同图像。