首页 > 编程语言 >C#项目:实现对百度API的调用

C#项目:实现对百度API的调用

时间:2024-06-23 18:32:40浏览次数:25  
标签:string C# private 点击 API 人脸 百度

目录

一、项目介绍

二、操作流程

(一)在百度云中的操作

(二)在C#中的实现

三、功能效果展示

识别分析图片

人脸对比结果展示

调用摄像头拍照功能

四、结语


一、项目介绍

该项目是基于Visual Studio的窗体应用,通过调用百度API,实现人脸识别,调用摄像头拍照取样等复杂功能。其中运用到了网络连接、图像处理、数据库管理及音视频处理等技术。

本博客将简要介绍其实现的方法。首先需要在百度云中创建一个自己的应用,才能到VS2022里面连接,因此操作流程分成了两个大部分,一个在百度云中的操作,一个在vs中的操作。

二、操作流程

(一)在百度云中的操作

  1. 百度搜索:百度API或者直接点击--->点击我进入 进入如下页面:
  2. 点击进入,注册登录,进入到接下来这个页面,右上角是你刚刚注册的用户信息。
  3. 下滑找到这个实名认证的功能,点击进入。
  4. 点击进入后,立即使用
  5. 新用户可以领免费的资源:点击领取免费资源
  6. 领取免费资源之前需要先实名认证,点击立即认证之后会有企业认证和个人人认证,根据自己的需要去认证就可以了。一般个人认证就可以的,只要输入身份证号,然后在手机端人脸认证即可。这里是演示个人认证通过的。​全部领取即可。
  7. 回到这里创建应用,输入应用名称,然后创建完成后在点击查看应用的详情,这里会出现你创建的应用的APPID,API KEY,Secret Key等信息。其中,两个Key码是用于我们在C#程序中实现连接。
  8. 应用列表中查看人脸库,可以新建组,新建人脸信息
  9. 创建人脸库,上传照片,这里仅支持jpg,jpeg,bmp等格式,不支持webp或者gif格式的哦

至此,我们在百度云上的操作已经全部完成了,接下来我们将在C#中操作,与百度API连接,进行人脸识别,人脸比对等操作。

(二)在C#中的实现

部分准备工作:

  1. 首先打开vs2022,打开项目之后,引用右键之后会有管理nuget程序包。创建窗体应用并配置nuget依赖库:要把下面这些都安装好,保证项目可以正常的运行。
  2. 窗体设计如下图所示:

接下来展示部分实现代码

  • 首先引入相应的百度云的应用信息,最上面的三个就是你刚刚在百度云注册的应用的密码信息,保证接下来的实现不会有错误出现。
private string APP_ID = "-----";
private string API_KEY = "-----";
private string SECRET_KEY = "-----";

private Face client = null;
private bool IsStart = false;
private FaceLocation location = null;
private FilterInfoCollection videoDevices = null;
private VideoCaptureDevice videoSource;
  • 将 Image 对象转换为 Base64 字符串
public string ConvertImageToBase64(Image file)
{
    using (MemoryStream memoryStream = new MemoryStream())
    {
        file.Save(memoryStream, file.RawFormat);
        byte[] imageBytes = memoryStream.ToArray();
        return Convert.ToBase64String(imageBytes);
    }
}
  • 获取图片信息

private string GetImagePath()
{
    string personImgPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory)
                 + Path.DirectorySeparatorChar.ToString() + "PersonImg";
    if (!Directory.Exists(personImgPath))
    {
        Directory.CreateDirectory(personImgPath);
    }

    return personImgPath;
}
  • 获取电脑的摄像头设备

private void Form1_Load(object sender, EventArgs e)
{
    /// 获取电脑已经安装的视频设备
    videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
    if (videoDevices!=null && videoDevices.Count>0)
    {
        foreach (FilterInfo device in videoDevices)
        {
            comboBox1.Items.Add(device.Name);
        }
        comboBox1.SelectedIndex = 0;
    }

    videoSourcePlayer1.NewFrame += VideoSourcePlayer1_NewFrame;

    // 开发者在百度AI平台人脸识别接口只能1秒中调用2次,所以需要做 定时开始检测,每个一秒检测2次
    ThreadPool.QueueUserWorkItem(new WaitCallback(p => {
        while (true)
        {
            IsStart = true;
            Thread.Sleep(500);
        }
    }));
}
  • 人脸对比功能的代码

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)
    { }
}
  • 插入电脑的视频设备

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

三、功能效果展示

这部分将展示运行的效果。

识别分析图片:

左上角点击分析图片,导入有人脸的照片,就会有相关参数被分析出来。最后会有一个beauty分析,这个参数受外部因素影响还蛮大的哈哈哈。第一张是我的证件照,第二张是彭于晏(有被安慰到哈哈哈,第三张是彭于晏的西装(emm还是帅,可以猜猜p4是谁哈哈哈。

人脸对比结果展示:

其中第一个是两张除了底色不同,其他都相同的证件照,分数达到了100分满分。第二张,第三张是同一个人的不同的照片,人脸识别的对比的分数都达到了80分及以上。图四是选择了没有人脸的文档的图片,提示了“pic has no face”

调用摄像头拍照功能:

点击连接,重新查询设备,这时你要保证你的电脑的摄像头端是打开的,能够被系统检测到,然后点击连接接入摄像头,就可以进行拍照了,摄像头使用结束后,可以点击退出释放摄像头的使用。

四、结语

本博客展示了如何使用C#去调用百度API从而实现人脸检测和人脸比对功能,运用网络连接功能处理复杂的人脸识别项目。

本项目难点在于如何处理HTTP请求和响应,要合理管理API密钥和访问令牌。

标签:string,C#,private,点击,API,人脸,百度
From: https://blog.csdn.net/m0_74154005/article/details/139896924

相关文章

  • 通过ESP32读取I2C温湿度传感器项目:协议与代码实例
    简介在本项目中,我们将使用ESP32开发板读取I2C温湿度传感器的数据。我们将详细介绍I2C协议,并提供图文并茂的代码实例,帮助你快速上手。项目流程选择硬件:ESP32开发板、I2C温湿度传感器(如DHT12、HTU21D、SHT30等)、连接线和面包板。了解I2C协议:I2C(Inter-IntegratedCircuit)是......
  • 深度解析RocketMq源码-高可用存储组件(一) raft协议详解
    1.绪论前面的文章已经分析过,以前rocketmq通过主从复制的思想实现系统的高可用,即在搭建集群的时候会手动的设置一个主节点和从节点,在写入数据的时候,会先写入到主broker,然后再同步到从节点中。但是这样会有一个问题,就是主节点宕机过后,需要手动的修改从节点成为新的主节点。在roc......
  • LeetCode 209.长度最小的子数组
    链接209.长度最小的子数组-力扣(LeetCode)题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组[numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示......
  • 【Matlab】CNN-LSTM分类 卷积神经网络-长短期记忆神经网络组合模型(附代码)
     资源下载: https://download.csdn.net/download/vvoennvv/89466499分类算法资源合集:https://download.csdn.net/download/vvoennvv/89466519目录MatlabSVM支持向量机分类算法MatlabRF随机森林分类算法MatlabRBF径向基神经网络分类算法MatlabPSO-BP基于粒子群算法......
  • 【免费】中国电子学会2024年03月份青少年软件编程Scratch图形化等级考试试卷三级真题(
    青少年软件编程(图形化)等级考试试卷(三级)分数:100 题数:31一、单选题(共18题,共50分)1.   运行程序后,角色一定不会说出的数字是?()A.        2B.        4C.        6D.        8试题编号:20240115-zgq-002试题类型:单选题标......
  • 【免费】中国电子学会2024年03月份青少年软件编程Scratch图形化等级考试试卷一级真题(
    青少年软件编程(图形化)等级考试试卷(一级)分数:100 题数:37一、单选题(共25题,共50分)1.   单击下列哪个按钮,能够让舞台变为“全屏模式”?()A.     B.     C.     D.     试题编号:20240114-hcc-001试题类型:单选题标准答案:D试题难度:一般......
  • win32API(CONSOLE 相关接口详解)
    前言:        Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程式达到开启视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(App......
  • 文件操作(1)(C语言版)
    前言:            为什么要学习文件操作:    1、如果大家写过一些代码,当运行结束的时候,这些运行结果将不复存在,除非,再次运行时这些结果才能展现在屏幕上面,就比如之前写过的通讯录。    现实中的通讯录可以保存自己写进去的信息,下次方便查找,......
  • SD & ACL
    在Windows系统中,安全描述符(SD)和访问控制列表(ACL)是用来管理文件和目录的安全和权限的两个重要概念。它们之间既有区别也有联系。下面是对这两个概念的详细解释:安全描述符(SecurityDescriptor,SD)安全描述符是一个结构,它包含了与对象(如文件、目录、进程等)相关的安全信息。SD可以包......
  • 查看CentOS系统信息
    查看系统程序信息方法1:[root@gafa~]#uname-aLinuxbogon3.10.0-327.18.2.el7.x86_64#1SMPThuMay1211:03:55UTC2016x86_64x86_64x86_64GNU/Linux方法2:[root@gafa~]#file/bin/ls/bin/ls:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicall......