百度ai人脸识别(原创 请勿转载)

一.简介
   本次实验主要针对使用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。这些配置信息如同小程序的“身份证”和“通行证”,是确保小程序能够顺利与服务商的接口进行通信、获取服务支持的前提条件。

二、人脸注册的灵活性

这款小程序在人脸注册方面展现了极高的灵活性。它提供了静态图像注册和实时图像注册两种方式,满足了不同用户的需求和场景。静态注册适用于那些已经提前准备好个人照片的用户,他们可以通过上传照片的方式完成注册。而实时注册则更加便捷,用户只需在摄像头前保持人脸正对,小程序就能够实时捕获图像并完成注册。这种灵活的注册方式为用户提供了更多的选择,也使得小程序更加人性化和易于使用。

三、识别准确性的保证

人脸识别技术的核心在于其识别准确性。这款小程序通过事先完成详细的人脸注册,确保了识别的准确性。当摄像头监测到已注册的人脸时,小程序能够迅速、准确地识别出用户,并弹出相应的欢迎语。这种良好的识别效果不仅提升了用户的使用体验,也增强了应用的安全性。因为只有当用户被准确识别后,才能够获得相应的权限和服务。

四、易用性和可扩展性

在易用性方面,这款小程序做得非常出色。整个部署和使用流程相对简单,用户只需遵循文档中的步骤即可完成。同时,小程序也具有一定的可扩展性。未来,随着用户数量的增加和需求的不断变化,我们可以针对更多用户和场景进行优化和升级。这种可扩展性使得小程序具有更强的生命力和竞争力。

五、总结与展望

通过这次学习和实践人脸识别小程序,我对其整体功能和使用流程有了更深入的理解。我深刻认识到接口配置的重要性、人脸注册的灵活性、识别准确性的保证以及易用性和可扩展性的优势。我相信,只要按照文档要求进行正确部署和配置,就能够充分发挥这款小程序的识别能力,为用户提供更加便捷、安全的应用体验。未来,我将继续关注人脸识别技术的发展和应用,不断探索新的应用场景和优化方案,为人工智能的发展贡献自己的力量。

  • 32
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
qt是一种跨平台的应用程序开发框架,它包含了许多用于创建图形用户界面(GUI)的功能和工具。通过使用qt,开发者可以在多个操作系统上构建高性能的应用程序。而百度AI人脸识别系统则是基于百度的人工智能技术开发的一种人脸识别系统。 百度AI人脸识别系统集成了颜值评分、人脸比对、性别年龄识别等多种功能。它可以通过对人脸进行分析和比对,判断出人脸的年龄、性别以及颜值评分等信息。此外,它还可以通过人脸比对技术进行身份认证,用于门禁系统、人脸支付等场景。 使用qt来开发百度AI人脸识别系统,可以便捷地创建用户友好的图形界面,并调用百度AI人脸识别的API接口来实现人脸识别功能。开发者可以通过qt提供的丰富控件和布局管理器,设计出符合用户习惯的界面,提供良好的用户体验。 通过qt开发的百度AI人脸识别系统,可以应用于各种场景,例如安防领域的人脸识别门禁系统,民宿行业的人脸入住认证系统,还能用于医疗行业的患者身份认证等。使用这种开发方式,可以大幅度减少开发时间和成本,提高开发效率。 综上所述,使用qt开发百度AI人脸识别系统可以充分发挥qt的跨平台特性和丰富的GUI功能,方便开发者在不同操作系统上构建性能优秀的人脸识别应用程序。同时,百度AI人脸识别系统的功能丰富,可以应用于多个行业,提供更好的用户体验和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值