百度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。这些配置信息如同小程序的“身份证”和“通行证”,是确保小程序能够顺利与服务商的接口进行通信、获取服务支持的前提条件。

二、人脸注册的灵活性

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

三、识别准确性的保证

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

四、易用性和可扩展性

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

五、总结与展望

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



声明

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