百度ai人脸识别(原创 请勿转载)
m0_74321460 2024-07-18 08:31:01 阅读 79
一.简介
本次实验主要针对使用windows窗体开发设计使用vs2022进行开发利用百度ai的人脸识别,人脸搜索,人脸对比,人脸登录实现功能。
https://cloud.baidu.com/
二.主要实现
1.注册百度ai,领取免费权限
打开下面链接进入百度智能云网址:
https://cloud.baidu.com/
百度智能云-云智一体深入产业
百度智能云致力于为企业和开发者提供全球领先的人工智能、大数据和云计算服务,加速产业智能化转型升级
https://cloud.baidu.com/
2.进入以下界面进行登录
并点击人脸实名认证,进入以下界面,立即使用
3.创建应用
先点击免费尝鲜领取对应权限
然后在下面界面创建对应的应用并输入对应的功能
4.进行配置
查看官方文档对c#的sdk进行配置.
同时我们也需要在vs中安装以下库
最后我们需要在下列库中添加人脸和用户
三.框架构建和代码编写
1.页面设计
利用winform搞出来一个下面的页面:
2.导入对应的配置
private string APP_ID = "?";
private string API_KEY = "?";
private string SECRET_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 string ConvertImageToBase64(Image file)
{
using (MemoryStream memoryStream = new MemoryStream())
{
file.Save(memoryStream, file.RawFormat);
byte[] imageBytes = memoryStream.ToArray();
return Convert.ToBase64String(imageBytes);
}
}
private void CameraConn()
{
if (comboBox1.Items.Count<=0)
{
MessageBox.Show("请插入视频设备");
return;
}
videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);
videoSource.DesiredFrameRate = 1;
videoSourcePlayer1.VideoSource = videoSource;
videoSourcePlayer1.Start();
}
将图片转为base64,连接摄像头等函数
3.人脸检测功能的实现
public void Detect(object image)
{
if (image!=null && image is Bitmap)
{
try
{
Bitmap img = (Bitmap)image;
var imgByte = Bitmap2Byte(img);
Image im =img ;
string image1 = ConvertImageToBase64(im);
string imageType = "BASE64";
if (imgByte != null)
{
// 如果有可选参数
var options = new Dictionary<string, object>{
{"max_face_num", 2},
{"face_fields", "age,qualities,beauty"}
};
var result = client.Detect(image1, imageType,options);
FaceDetectInfo detect = JsonHelper.DeserializeObject<FaceDetectInfo>(result.ToString());
if (detect!=null && detect.result_num>0)
{
ageText.Text = detect.result[0].age.TryToString();
this.location = detect.result[0].location;
StringBuilder sb = new StringBuilder();
if (detect.result[0].qualities != null)
{
if (detect.result[0].qualities.blur >= 0.7)
{
sb.AppendLine("人脸过于模糊");
}
if (detect.result[0].qualities.completeness >= 0.4)
{
sb.AppendLine("人脸不完整");
}
if (detect.result[0].qualities.illumination <= 40)
{
sb.AppendLine("灯光光线质量不好");
}
if (detect.result[0].qualities.occlusion!=null)
{
if (detect.result[0].qualities.occlusion.left_cheek>=0.8)
{
sb.AppendLine("左脸颊不清晰");
}
if (detect.result[0].qualities.occlusion.left_eye >= 0.6)
{
sb.AppendLine("左眼不清晰");
}
if (detect.result[0].qualities.occlusion.mouth >= 0.7)
{
sb.AppendLine("嘴巴不清晰");
}
if (detect.result[0].qualities.occlusion.nose >= 0.7)
{
sb.AppendLine("鼻子不清晰");
}
if (detect.result[0].qualities.occlusion.right_cheek >= 0.8)
{
sb.AppendLine("右脸颊不清晰");
}
if (detect.result[0].qualities.occlusion.right_eye >= 0.6)
{
sb.AppendLine("右眼不清晰");
}
if (detect.result[0].qualities.occlusion.chin >= 0.6)
{
sb.AppendLine("下巴不清晰");
}
if (detect.result[0].pitch>=20)
{
sb.AppendLine("俯视角度太大");
}
if (detect.result[0].roll>=20)
{
sb.AppendLine("脸部应该放正");
}
if (detect.result[0].yaw>=20)
{
sb.AppendLine("脸部应该放正点");
}
}
}
if (detect.result[0].location.height<=100 || detect.result[0].location.height<=100)
{
sb.AppendLine("人脸部分过小");
}
textBox4.Text = sb.ToString();
if (textBox4.Text.IsNull())
{
textBox4.Text = "OK";
}
}
}
}
catch (Exception ex)
{
ClassLoger.Error("Form1.image", ex);
}
}
}
上述代码的功能强大而全面,它在整个处理流程中展现了多个关键步骤。首先,它负责将图像从原始格式转换为base64编码格式,这是为了将图像数据转化为一种可以在网络上安全、高效传输的格式。Base64编码不仅确保了数据的完整性,还使得图像数据能够轻松地被各种系统和应用所识别和处理。
一旦图像数据被编码为base64格式,代码便利用这一数据通过调用第三方API进行人脸检测和分析。这一步骤至关重要,因为它涉及到对图像中人脸的精准识别和各种关键质量指标的分析。这些质量指标包括但不限于人脸的模糊程度、完整性、光照条件、遮挡情况以及人脸的俯视角度和翻转角度等。通过对这些指标的评估,代码能够为我们提供关于图像中人脸质量的详细信息。
在人脸检测和分析的过程中,代码会仔细检查每一个细节,确保每一个质量指标都被准确地评估和记录。如果人脸检测和分析顺利完成,并且各项指标均达到预设的标准,代码将在文本框中显示“OK”,表示人脸的质量良好,可以用于后续的处理或应用。
这一流程不仅体现了代码的高效性和准确性,还展示了它在处理图像数据方面的强大能力。无论是对于人脸识别的安全性要求,还是对于用户体验的优化,这段代码都为我们提供了一个可靠而高效的解决方案。在未来的应用中,我们可以根据实际需求对代码进行进一步的优化和扩展,以满足更多复杂和精细的人脸识别需求。
4.人脸对比实现
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)
{ }
}
该代码实现了人脸比对的功能。当用户在两个文本框中输入了需要比对的两张人脸图片的路径时,该代码会首先检查是否有输入,如果有输入,则会读取这两张图片并将其转换为Base64编码格式。然后,它会将这两张人脸图片的信息打包成一个JSON数组,并调用第三方API进行人脸比对。最终,比对结果会显示在第一个文本框中。
四.最后的运行结果
1.人脸的检测报告
太帅了
2.人脸对比的结果
五.总结
对于上述实验我有以下心得体会:
关于人脸识别小程序的心得体会
近日,我有幸亲自尝试并深入研究了人脸识别小程序,从中获得了许多宝贵的经验和深刻的体会。以下是我对这次实验的一些心得分享。
一、接口配置的重要性
在人脸识别功能中,接口配置是至关重要的一环。由于我们依赖的是第三方服务提供商(如百度)的接口和算法支持,因此,在启动小程序之前,必须确保接口配置的正确性和完整性。这包括注册服务商的账号、创建相应的应用、以及申请和获取API Key和Secret Key。这些配置信息如同小程序的“身份证”和“通行证”,是确保小程序能够顺利与服务商的接口进行通信、获取服务支持的前提条件。
二、人脸注册的灵活性
这款小程序在人脸注册方面展现了极高的灵活性。它提供了静态图像注册和实时图像注册两种方式,满足了不同用户的需求和场景。静态注册适用于那些已经提前准备好个人照片的用户,他们可以通过上传照片的方式完成注册。而实时注册则更加便捷,用户只需在摄像头前保持人脸正对,小程序就能够实时捕获图像并完成注册。这种灵活的注册方式为用户提供了更多的选择,也使得小程序更加人性化和易于使用。
三、识别准确性的保证
人脸识别技术的核心在于其识别准确性。这款小程序通过事先完成详细的人脸注册,确保了识别的准确性。当摄像头监测到已注册的人脸时,小程序能够迅速、准确地识别出用户,并弹出相应的欢迎语。这种良好的识别效果不仅提升了用户的使用体验,也增强了应用的安全性。因为只有当用户被准确识别后,才能够获得相应的权限和服务。
四、易用性和可扩展性
在易用性方面,这款小程序做得非常出色。整个部署和使用流程相对简单,用户只需遵循文档中的步骤即可完成。同时,小程序也具有一定的可扩展性。未来,随着用户数量的增加和需求的不断变化,我们可以针对更多用户和场景进行优化和升级。这种可扩展性使得小程序具有更强的生命力和竞争力。
五、总结与展望
通过这次学习和实践人脸识别小程序,我对其整体功能和使用流程有了更深入的理解。我深刻认识到接口配置的重要性、人脸注册的灵活性、识别准确性的保证以及易用性和可扩展性的优势。我相信,只要按照文档要求进行正确部署和配置,就能够充分发挥这款小程序的识别能力,为用户提供更加便捷、安全的应用体验。未来,我将继续关注人脸识别技术的发展和应用,不断探索新的应用场景和优化方案,为人工智能的发展贡献自己的力量。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。