自我重大进步!利用百度AI人脸识别模块实现人脸检测、对比以及人脸登录的功能!

彼岸花HTriste 2024-07-14 15:31:02 阅读 57

目录

前言

一、免费工具领取,做好准备工作!

二、 核心代码展示!讲解!

2.1 调用api

2.2 代码块功能介绍

三、自己改动实现部分

3.1 拍照(不透露完整的内容只是框架)

3.2 人脸登陆部分(不透露)

3.3 界面设计

 四、结果展示

4.1人脸对比

4.2 识别图片

4.3人脸注册和登录

五、回顾总结!

前言

在人工智能技术迅猛发展的今天,人脸识别技术逐渐成为了各行各业的重要工具。为了深入了解这一技术并探索其应用潜力,我基于百度智能云的人脸识别API,开发了一个包含人脸检测、对比、注册和登录功能的项目。该项目不仅展示了人脸识别技术的强大功能,还通过详细的代码和实现步骤,为技术爱好者和开发者提供了一个学习和交流的平台

一、免费工具领取,做好准备工作!

(1)打开百度智能云网址:

百度智能云-云智一体深入产业百度智能云致力于为企业和开发者提供全球领先的人工智能、大数据和云计算服务,加速产业智能化转型升级

icon-default.png?t=N7T8

https://cloud.baidu.com/

注册登录,进入如下界面。

(2)点击立即使用。

(3)点击创建应用。

(4)在应用名称一栏输入所建应用的名称,在应用描述一栏输入对所创建应用的大概描述,然后点击立即创建。

(5)点击返回应用列表即可看到刚才创建应用的详细信息,并且可以看到获取到的API key和Secret key。

此外还需要注意按照这些包 以下是包的名称和版本号

(6)然后创建库创建用户后添加各用户的图片,这里添加我和舍友的用户名和照片

二、 核心代码展示!讲解!

2.1 调用api

利用上面自己账户生成的账户的api以及相关信息导入进去,这样才能够调用百度的AI哦。同理部署很多AI大模型的第一步都是购买得到相应的api!

<code> private string APP_ID = "自己的账户哦";

private string API_KEY = "自己的账户哦";

private string SECRET_KEY = "自己的账户哦";

2.2 代码块功能介绍

由于代码很多设计到保密内容就不完全展示了展示一下各个控件以及代码块的内容

a.构造函数和初始化:初始化窗口组件和Baidu AI客户端。

设置Windows Media Player控件的UI模式为“隐藏”。

public Form1()

{

InitializeComponent();

axWindowsMediaPlayer1.uiMode = "Invisible";

client = new Face(API_KEY, SECRET_KEY);

}

b.图片识别功能:使用OpenFileDialog打开并选择图片文件。

将选择的图片转换为Base64格式,然后调用Baidu AI接口进行人脸检测。

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 result = client.Detect(image, imageType, options);

textBox1.Text = result.ToString();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

}

c.读取图片文件并转换为Base64:将图片文件读取为字节数组并转换为Base64字符串。

public string ReadImg(string img)

{

return Convert.ToBase64String(File.ReadAllBytes(img));

}

public string ConvertImageToBase64(Image file)

{

using (MemoryStream memoryStream = new MemoryStream())

{

file.Save(memoryStream, file.RawFormat);

byte[] imageBytes = memoryStream.ToArray();

return Convert.ToBase64String(imageBytes);

}

}

d.人脸对比功能:选择两张图片并进行对比。

将两张图片转换为Base64格式,调用Baidu AI接口进行人脸匹配。

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)

{

MessageBox.Show(ex.Message);

}

}

e.摄像头初始化和视频源设置:获取电脑中安装的视频设备并显示在下拉框中。

设置视频源并打开摄像头。

f.摄像头新帧处理:在视频源的每一帧图像中进行人脸检测。

绘制方框标识人脸位置。

g.拍照功能:捕获当前视频帧并保存为图片文件。

h.人脸注册功能:捕获视频帧并将其注册到Baidu AI人脸库中。

i.人脸登录功能:捕获视频帧并调用Baidu AI接口进行人脸搜索,实现登录功能。

三、自己改动实现部分

3.1 拍照(不透露完整的内容只是框架)

if (comboBox1.Items.Count <= 0)

{

MessageBox.Show("请插入视频设备");

return;

}

try

{

if (videoSourcePlayer1 != null && videoSourcePlayer1.IsRunning)

{

// 从视频源获取当前帧并转换为BitmapSource

// 创建PNG编码器并添加帧

// 生成唯一的文件名

string picName = GetImagePath() + "\\" + DateTime.Now.ToFileTime() + ".jpg";

if (File.Exists(picName))

{

File.Delete(picName);

}

// 将图像保存到文件

MessageBox.Show("照片已保存: " + picName);

// 拍照完成后关摄像头并刷新同时关窗体

if (videoSourcePlayer1.IsRunning)

{

videoSourcePlayer1.SignalToStop();

videoSourcePlayer1.WaitForStop();

}

DialogResult result = MessageBox.Show("是否要关闭窗口?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if (result == DialogResult.Yes)

{

this.Close();

}

}

else

{

MessageBox.Show("摄像头未运行,请先启动摄像头");

}

}

catch (Exception ex)

{

MessageBox.Show("摄像头异常:" + ex.Message);

}

拍照功能的主要改动和功能如下:

设备检查:确保视频设备已连接。摄像头状态验证:检查摄像头是否正在运行。图像捕获:使用 videoSourcePlayer1 捕获当前帧,并转换为 BitmapSource。图像保存:将捕获的图像编码为 PNG 格式,并保存为 JPG 文件,文件名包含时间戳。用户反馈:显示保存成功消息,包括文件路径。摄像头关闭:拍照后自动停止摄像头。用户选择:提供选项让用户决定是否关闭窗口。异常处理:捕获并显示可能出现的异常。

3.2 人脸登陆部分(不透露)

改进后的版本做了以下主要修改:

添加了对用户组ID的非空检查。添加了更多的日志输出和用户界面反馈。改进了图像捕获失败的处理。优化了 API 调用参数,将 max_user_num 设置为 1,因为我们只需要最匹配的一个用户。改进了结果处理逻辑:

检查 API 返回的错误码。提取并显示用户ID和相似度得分。添加了一个简单的相似度阈值检查(这里设置为 80,可以根据需要调整)。优化了错误处理和消息显示。

3.3 界面设计

自己设计一个能够对应相关功能并且美观清晰的界面

 四、结果展示

4.1人脸对比

  当我使用这个功能上传了自己的两张帅照时,系统会自动对这两张照片中的人脸进行对比。运行结果显示,这次对比操作非常成功,错误代码为0,错误信息显示“SUCCESS”。这意味着系统在处理这两张照片时没有遇到任何问题。同时,系统记录了这次请求的日志ID和时间戳,这些信息对于将来可能的跟踪和调试非常有用。

  最重要的是,对比结果的相似度得分高达92.08558655,这是一个非常高的分数。这个分数表明我上传的两张照片中的人脸非常相似,几乎可以确定是同一个人。这不仅证实了系统的准确性,也让我对这项技术的可靠性有了更深的信任。每张照片中的人脸都有一个唯一的标识符,方便进行进一步的处理或查询。

  通过这个人脸对比功能,我可以轻松确认两张照片中的人脸是否一致。在这次测试中,系统返回了令人满意的结果,高相似度得分证明了我上传的两张照片中的确是同一个人。这种高效且准确的对比功能,无疑为人脸识别技术的广泛应用提供了有力支持。

4.2 识别图片

  当我使用这个功能上传了我的一张帅照时,系统对这张照片中的人脸进行了详细分析,并返回了结果。首先,结果显示这次调用成功,错误代码为0,错误信息为“SUCCESS”,表明系统在处理这张照片时没有遇到任何问题。系统还记录了这次请求的日志ID和时间戳,这些信息对于将来可能的跟踪和调试非常有用。

  分析结果中,系统检测到照片中有一张人脸,并为这张人脸生成了唯一的标识符(face_token)。系统还精确定位了人脸在照片中的位置,包括左上角的坐标(left和top)、人脸的宽度和高度,以及旋转角度。这些数据表明系统不仅能识别人脸,还能准确地标定人脸的位置。此外,系统还提供了人脸的置信度(face_probability)为1,表示非常确定这是一张人脸。

  进一步的分析包括人脸的角度(yaw、pitch和roll),这些参数描述了人脸在三维空间中的姿态。系统还估算了我的年龄为22岁,并给出了一个“颜值”评分64.18。看到这样的结果,我不仅对这个技术的精确度感到满意,也对它在实际应用中的潜力充满期待。这个功能不仅可以验证照片中的人脸是否为本人,还能提供更多有趣的信息,让人感到十分有趣。

4.3人脸注册和登录

登录成功之后跳出弹窗显示并且语音播报在我的修改下输出了用户ID和相似度(用户ID: Sy_2004, 相似度: 90.88)

五、回顾总结!

  这个项目利用百度智能云的人脸识别API,成功实现了人脸检测、对比、注册和登录功能。在我的实践中,通过详细的代码展示和功能实现,我不仅提升了自己的技术能力,也看到了人脸识别技术在实际应用中的巨大潜力。我希望更多人能参与交流和学习,共同探索AI技术带来的无限可能。这个项目展示了人脸识别技术在身份验证、安全监控等方面的高效性和准确性,为未来在各种行业中的应用打下了坚实基础。参与进来,让我们一起推动技术进步,实现更多创新应用。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。