C# Winform开发人脸识别小程序 (基于百度接口)

article/2025/3/20 4:01:13

目录

  • 一、设计思路
    • 1、背景
    • 2、简介
    • 3、用到的技术
    • 4、设计
      • 功能一:用户注册
        • 功能概述
        • 功能示意图
        • 时序图
      • 功能二:人脸识别
        • 功能概述
        • 功能示意图
        • 时序图
  • 二、实现
    • 1、环境准备
    • 2、百度接口配置
    • 3、技术准备
    • 4、代码实现
      • 功能一:用户注册
      • 功能二:人脸识别
    • 5、补充

一、设计思路

1、背景

家里面的小朋友(我弟)去参加学校组织的一个小比赛,配合他做了这个人脸识别的小程序,把设计思路和代码发在这里。

2、简介

本程序通过调用百度的人脸识别相关的云服务算法,最终实现“人脸注册”和“人脸识别欢迎语提示”这两个功能。

3、用到的技术

本程序的最终实现形式为Windows桌面程序,本程序主要采用微软的Winform模式进行开发,编程语言为C#。
开发所使用的IDE为Visual Studio2019(.NET Core3.1),辅助工具为Postman、Json格式转换工具、Base64编码工具等。

4、设计

功能一:用户注册

功能概述

用户图像(照片or实时图像) + 用户填写的信息 => 百度云端

功能示意图

在这里插入图片描述
在这里插入图片描述

时序图

在这里插入图片描述

功能二:人脸识别

功能概述

识别出现在镜头中的用户。

功能示意图

时序图

在这里插入图片描述

二、实现

1、环境准备

硬件:带有摄像头的计算机。
软件:Windows10 操作系统。
网络:连接互联网。

2、百度接口配置

(1) 打开百度智能云网址,注册登录,进入如下界面。
在这里插入图片描述
(2) 点击立即使用。
在这里插入图片描述
(3) 点击创建应用。
在这里插入图片描述
(4) 在应用名称一栏输入所建应用的名称,在应用描述一栏输入对所创建应用的大概描述,然后点击立即创建。
在这里插入图片描述
在这里插入图片描述
(5) 点击返回应用列表即可看到刚才创建应用的详细信息,并且可以看到获取到的API key和Secret key。
在这里插入图片描述
在这里插入图片描述

3、技术准备

(1) 一张图片,在计算机最底层的本质就是一段二进制代码,不清楚该原理的可以去这个网站转一下试试:
在这里插入图片描述
(2) 这次要用到三个百度接口:
A、登录接口(鉴权认证/获取Access Token)
在这里插入图片描述
用Postman或者其他在线http请求工具调用一下试试:
在这里插入图片描述
注意,client_id和client_secret是你在百度应用中心申请的应用里面的API Key和Secret Key,这两个东西相当于用户名和密码。
在这里插入图片描述
B、注册接口(人脸库管理/人脸注册,别的不用看)
在这里插入图片描述
在这里插入图片描述

C、人脸识别接口(人脸搜索/人脸搜索,别的不用看)
在这里插入图片描述
在这里插入图片描述

4、代码实现

功能一:用户注册

(1)创建TokenHelper,用于调用百度登录接口(鉴权认证/获取Access Token)

    class TokenHelper{public static string getAccessToken(){string clientId = ConfigurationSettings.AppSettings["clientId"];string clientSecret = ConfigurationSettings.AppSettings["clientSecret"];string authHost = "https://aip.baidubce.com/oauth/2.0/token";HttpClient client = new HttpClient();List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));paraList.Add(new KeyValuePair<string, string>("client_id", clientId));paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;string result = response.Content.ReadAsStringAsync().Result;return result;}

注意一下,代码里的相关参数都写在app.config中,这些参数的值根据你所申请的百度账号里的参数值进行具体配置。

(2)创建ImagHelper,用于图片的格式转换

public class ImagHelper{/// <summary>/// 图片转为base64编码的文本/// </summary>/// <param name="bmp">待转的Bitmap</param>/// <returns>转换后的base64字符串</returns>public static String ImgToBase64String(Image bmp){String strbaser64 = String.Empty;var btarr = convertByte(bmp);strbaser64 = Convert.ToBase64String(btarr);return strbaser64;}/// <summary>/// Image转byte[]/// </summary>/// <param name="img">Img格式数据</param>/// <returns>byte[]格式数据</returns>public static byte[] convertByte(Image image){ImageFormat format = image.RawFormat;using (MemoryStream ms = new MemoryStream()){if (format.Equals(ImageFormat.Jpeg)){image.Save(ms, ImageFormat.Jpeg);}else if (format.Equals(ImageFormat.Png)){image.Save(ms, ImageFormat.Png);}else if (format.Equals(ImageFormat.Bmp)){image.Save(ms, ImageFormat.Bmp);}else if (format.Equals(ImageFormat.Gif)){image.Save(ms, ImageFormat.Gif);}else if (format.Equals(ImageFormat.Icon)){image.Save(ms, ImageFormat.Icon);}else{image.Save(ms, ImageFormat.Jpeg);}byte[] buffer = new byte[ms.Length];//Image.Save()会改变MemoryStream的Position,需要重新Seek到Beginms.Seek(0, SeekOrigin.Begin);ms.Read(buffer, 0, buffer.Length);return buffer;}}}

(3)创建FaceHelper ,用于人脸注册和人脸搜索(即人脸识别)

class FaceHelper : IDisposable{public string token { get; set; }/// <summary>/// 注册人脸/// </summary>/// <param name="face"></param>/// <returns></returns>public FaceMsg Add(FaceInfo face){string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=" + token;Encoding encoding = Encoding.Default;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);request.Method = "post";request.KeepAlive = true;String str = JsonConvert.SerializeObject(face);byte[] buffer = encoding.GetBytes(str);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string result = reader.ReadToEnd();FaceMsg msg = JsonConvert.DeserializeObject<FaceMsg>(result);return msg;}/// <summary>/// 搜索人脸/// </summary>/// <param name="face"></param>/// <returns></returns>public MatchMsg FaceSearch(Face face){string host = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=" + token;Encoding encoding = Encoding.Default;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);request.Method = "post";request.KeepAlive = true;String str = JsonConvert.SerializeObject(face); ;byte[] buffer = encoding.GetBytes(str);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string result = reader.ReadToEnd();MatchMsg msg = JsonConvert.DeserializeObject<MatchMsg>(result);return msg;}public void Dispose(){}}

(4)创建From
在这里插入图片描述
具体细节略过,详细代码已上传,见文章末尾链接,这里就特别注意一下VideoSourcePlayer这个控件,该控件用于动态调用摄像头获取实时图像,该控件需要单独导入这些包:
在这里插入图片描述

功能二:人脸识别

人脸识别的实现思路和上述人脸注册差不多,同样是用到FaceHelper、ImagHelper、TokenHelper这三个类。

在人脸识别的Form设计时,注意一个点:需要启动一个子线程实时监测摄像头、轮询百度人脸搜索接口,一旦摄像头中出现已注册的人脸信息,百度接口将立即返回识别结果。

5、补充

(1)源码和发布后的可运行小程序稍后发在评论区。

(2)摄像头权限配置:有的用户电脑可能会无法直接调用摄像头,需要设置摄像头访问权限,去网上攻略一下怎么在win10设置摄像头访问权限。

(3)部署的目标电脑不是必须安装Visio Studio,只安装.Net Core环境就行:windowsdesktop-runtime-3.1.15-win-x64.exe。

(4)注册程序和人脸识别程序不能同时打开,因为摄像头无法同时被多个进程占用。


http://chatgpt.dhexx.cn/article/9AHA1V6y.shtml

相关文章

python人脸检测与微信小程序_微信小程序人脸识别功能

本文档以微信小程序为例&#xff0c;微信小程序开发人脸核身功能需要两个申请&#xff1a;腾讯云申请人脸识别服务和小程序申请人脸识别服务&#xff08;注意&#xff1a;只有符合以下条件的机构才能在小程序端申请&#xff09; 政务&#xff1a;政府机构或事业单位 金融&…

使用uniapp开发微信小程序的人脸采集功能/人脸识别功能

✅作者简介&#xff1a;大家好我是瓜子三百克&#xff0c;励志成为全栈工程师的一枚程序猿&#xff0c;也是喜欢在学习和开发中记录笔记的小白博主&#xff01; &#x1f4c3;个人主页&#xff1a;瓜子三百克的主页 &#x1f525;系列专栏&#xff1a;uniapp前端 &#x1f496;…

无需证书微信小程序实现人脸识别—E证通

E证通 前言收费标准接入准备小程序1、 添加服务器域名白名单2、添加业务域名白名单3、安装 SDK/小程序包4、SDK 调用步骤即实操代码4.1、初始化 SDK4.2、 调用 SDK 5、拿到回调结果6、使用uni-app开发6.1、小程序运行后&#xff0c;在小程序中丢入sdk包6.2、把sdk包转换成uni-a…

小程序实现人脸识别与小程序发布

文章目录 前言主要实现功能效果演示PC端手机端 调用百度Ai人脸检测接口小程序发布流程项目源码编程之外 前言 人脸识别其实没那么复杂&#xff0c;我国几个大厂都有他们的AI开放平台&#xff0c;调用一下他们的人脸检测接口就行了&#x1f601;&#xff08;虽然接口不是自己写的…

节假日查询接口,加班,补班,日期查询,放假,日历

一、接口介绍 通过本数据&#xff0c;可以查询节假日、加班日期&#xff0c;以及每个日期的对应的国际日和我国传统节日的简介。广泛使用于日程安排、证券投资、日历等功能的应用中展示。 二、使用案例截图 如何查看调用效果&#xff1f; 1、通过链接&#xff0c;点击【在线…

php中阿里云快递物流查询接口使用

php中阿里云快递物流查询接口使用 官方给的php代码如下&#xff1a; $host "https://ali-deliver.showapi.com";$path "/showapi_expInfo";$method "GET";$appcode "你自己的AppCode";$headers array();array_push($headers, &qu…

智能疾病查询接口

疾病类目&#xff0c;疾病症状&#xff0c;智能疾病查询&#xff0c;医疗知识图谱 ​ 一、接口介绍 最全的疾病大全&#xff0c;收集了数万种常见疾病&#xff0c;任何常见疾病都可查询。 二、功能体验 三、演示效果 四、API文档 4.1 查询疾病科目 4.1.1接入点说明 查询…

调用阿里API获取城市天气信息

目录 一&#xff0e;阿里云天气预报API接口介绍2.1阿里云天气预报API介绍2.2 调用API准备工作及认识 二&#xff0e;调用天气预报API三&#xff0e;代码实现四&#xff0e;结果展示五、问题与解决办法 赵继涛&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;20…

如何调用showapiRequest解决图片验证码识别?

一、思路&#xff08;我埋了一个坑&#xff09; &#xff08;1&#xff09;保存整张登录页面的图片 &#xff08;2&#xff09;剪切验证码区域的图片 &#xff08;3&#xff09;调用showapiRequest识别剪切好的图片 二、保存整张图片 保存当前页面的整张图片括号里面是保存图…

天气预报

到目前为止,我们的公众号已经可以回复用户发出的消息,但是如果仅仅如此,就没必要设为开发模式了。完全不懂编程的人也可以在微信公众平台上设置回复用户的消息。 现在我们来实现我们的公众号查询全国各个城市天气这么一个功能,像公众号输入天气+地名(天气南京)就可以查询…

天气预报查询数据接口、实时天气、未来24小时、7天/15天预报

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;服务超好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级、紫…

php如何调用天气预报api,PHP调用API接口实现天气查询功能的示例

php 的 PHP调用API接口实现天气查询功能的示例 天气预报查询接口API&#xff0c;在这里我使用的是国家气象局天气预报接口 使用较多的还有&#xff1a;新浪天气预报接口、百度天气预报接口、google天气接口、Yahoo天气接口等等。 1、查询方式 根据地名查询各城市天气情况 2.请求…

微信公众号开发_调用新闻查询接口_回复图文消息

文章目录 一、新闻API接口返回的Json示例实体类测试类测试 二、发送图文消息xml数据格式实体类创建自定义菜单处理点击事件查询新闻工具类 仓库代码地址关注微信公众号 发送效果&#xff1a; 一、新闻API接口 使用的是阿里云市场的服务 全国热门带正文新闻查询API接口 使用方式…

全国(全球)快递查询物流查询API,物流信息追踪接口

一、接口介绍 支持国内外1500快递物流公司的物流跟踪服务&#xff0c;包括顺丰、圆通、申通、中通、韵达等主流快递公司。同时&#xff0c;支持单号识别快递物流公司、按次与按单计费、物流轨迹返回等功能&#xff0c;以满足企业对快递物流查询多维度的需求。 二、使用案例截…

历史上的今天

一、接口介绍 看看历史上的今天&#xff0c;都发生了什么重大事件。查历史上的指定日期发生的事情&#xff0c;包括国家大事、国际大事、政府重要决策部署等图文详情内容&#xff0c;不断增加中。 二、使用示例截图 { "showapi_res_error": "", "sh…

3-性能测试知识面

脚本开发相关 根据不同协议&#xff0c;选择不同工具 协议 httpjdbcsoapwebsocketdubboMQ 工具 Jmeter「线程」loadrunner「进程、线程&#xff08;默认&#xff09;」wrkabngrinder「jpython、groovy」locust「协程」 扩展 Jmeter支持的语言&#xff1a; javapythonjythongroo…

天气预报查询数据接口、实时天气、24小时天气、未来24小时、7天/15天预报

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;服务超好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级、紫…

百度html的json解析,百度调用API返回json数据解析

在这里支队返回数据解析&#xff0c;不做请求数据​ &#xfeff;第一种格式json解析​ ​String jsonresult ”{"showapi_res_code":0,"showapi_res_error":"","showapi_res_body":{"list":[{"ct":"2016-02…

tp5 对接万维易源ISBN接口

首先购买万维易源的一元套餐 下面都有详细的说明 接口返回的数据格式是 {"showapi_res_error": "","showapi_res_code": 0,"showapi_res_id": "","showapi_res_body": {"datas": [{"series"…

全国天气预报查询接口

小编在此向大家介绍拥有105亿调用量的产品&#xff0c;该接口文档清晰&#xff0c;对接方便&#xff0c;还有服务很好。 一、接口介绍 通过坐标区域、IP、地名、景点名称、电话区号或邮编等有效信息可查询天气情况&#xff08;天气状况、湿度、天气图标、实时温度、风向、风级…