百度AI调用人脸识别--实现人脸检测、人脸比对、人脸登录

一、项目简介

本项目利用百度AI的人脸识别技术,基于VS2022中的winform平台开发实现人脸检测、人脸比对、人脸登录的应用程序。

二、技术栈

项目所包括的技术栈可以归纳如下:

C#语言:用于后端开发和相关逻辑编写
ASP.NET:用于构建Web应用程序的框架
Entity Framework:用于数据库管理和操作的ORM(对象关系映射)工具
SQL Server:Microsoft的关系型数据库管理系统
HTML、CSS、JavaScript:用于前端开发和用户界面设计
ASP.NET Web API:用于创建可供外部系统或设备访问的API接口
图像处理库:如OpenCV或Emgu CV,用于图像处理和人脸识别
网络连接:HTTP/HTTPS协议、TCP/IP协议等网络通信技术
文件处理:文件上传、下载、存储等相关技术

三、百度AI注册使用

1、百度AI注册

进入百度AI开放平台,选择人脸识别云服务进行注册。

2、创建应用、组别

3、创建人脸识别库,并导入照片。

四、界面设计

控件:button、textbox、lable、panel、videosourceplayer

界面如下:

五、代码实现

1、声明API密钥

在创建的应用中将对应的APP_ID、API_KEY、SECERT_KEY输入。API_KEY、SECERT_KEY是两个私有字符串变量,被用来存储从BaiduAI开放平台获得的API密钥和秘密密钥。

private string APP_ID = "";
private string API_KEY = "";
private string SECRET_KEY = "";

2、图片转化

        public string ConvertImageToBase64(Image file)
        {
            using (MemoryStream memoryStream = new MemoryStream())
            {
                file.Save(memoryStream, file.RawFormat);
                byte[] imageBytes = memoryStream.ToArray();
                return Convert.ToBase64String(imageBytes);
            }
        }

3、读入图片

        public string ReadImg(string img)
        {
            return Convert.ToBase64String(File.ReadAllBytes(img));
        }

4、摄像头连接

        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();
        }

摄像头连接成功

5、人脸检测

首先接受并处理图像数据,然后调用百度人脸检测API,并返回检测结果,再解析并显示人脸检测结果,提取出人脸的位置、年龄、模糊程度等信息,并在用户界面上显示这些信息。

部分代码如下:

 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].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);
                }
            }
            
        }

6、人脸对比

人脸对比功能允许用户上传两张图像,或者选择已存储的模板图像与实时捕获的图像进行比对。

系统会将这两张图像中的人脸进行特征提取,并计算它们之间的相似度,并对人脸质量进行评测。

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);
    }
}

选择图片进行比对:

7、人脸登录

通过获取连接摄像头,识别当前图像并与在百度AI人脸库中存入的所有人脸图片对比,如果相似度高于某个阈值则,返回这个人脸的名字,即登录成功。这里就不做详细展示了。

六、总结体会

本次实现了一个百度AI人脸识别项目。该项目主要实现了以下功能:

(1)人脸检测:此功能使用百度AI平台的人脸检测API,通过用户上传的图像或摄像头实时捕获的视频帧,检测并标记出图像中的人脸。人脸检测能够确定图像中人脸的位置、大小以及数量,并返回人脸的矩形框坐标。

(2)人脸比对:人脸比对功能允许用户上传两张图像,或者选择已存储的模板图像与实时捕获的图像进行比对。百度AI平台的人脸比对API提供了高精度的人脸特征比对服务,能够判断两张图像中的人脸是否属于同一人,并对人脸质量进行评测。

(3)人脸登录:人脸登录功能允许用户通过人脸识别进行登录操作,而无需输入密码或进行其他形式的身份验证。

在百度AI人脸识别这个项目中,网络连接是一个比较难的点,解决难点问题能帮助开发人员有效地应对复杂的实际应用需求,提升开发人员的项目实践能力,进一步加强专业技能能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值