基于ASP.NET使用C#实现简单人脸识别功能
基于ASP.NET使用C#实现简单人脸识别功能
案例概述
本案例基于ASP.NET和百度云人脸库,主要实现静态人脸添加和静态人脸检测的功能,是笔者一个练习的小Demo
使用的工具
主要使用了VS 2017、MS SQL Server数据库和百度云人脸库
实现的功能
- 人脸注册
- 人脸搜索
功能及代码展示
知识背景
百度人脸库的创建
1.打开浏览器登录百度智能云,(百度账号即可登录)
2.应用列表|创建应用
3.人脸库管理|选择刚刚创建好的应用
4.在这个应用中创建新分组(这个分组将在之后上传图片信息中用到)
本项目中用到的类
1.AccessToken.cs
主要功能:将创建人脸库时获取的API Key和Sercet Key,放入json字符串中传给百度云人脸识别接口,与自己创建的人脸库建立连接,并获取连接凭证。
返回回来的json字符串中含有的Access_Token就是这个凭证。
这个类不是笔者写的,是百度云提供的api调用方式文档(点此访问),在这个文档的基础上,笔者进行了一些修改,形成了下面的类。
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web.Script.Serialization;namespace com.baidu.ai
{public static class AccessToken{// 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存// 返回token示例public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";// 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务private static String clientId = "*********";// 百度云中开通对应服务应用的 Secret Keyprivate static String clientSecret = "**********";public static String getAccessToken(){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;Console.WriteLine(result);//获取返回的字符串//string test = AccessToken.getAccessToken();//Response.Write(test + "
");//获取返回的Access_Tokenstring Access_Token = "";JavaScriptSerializer Jss = new JavaScriptSerializer();Dictionary<string, object> DicText = (Dictionary<string, object>)Jss.DeserializeObject(result);//如果返回值中含有access_token,则将其值赋予Access_Token,不存在则说明获取失败。if (!DicText.ContainsKey("access_token")){Access_Token = "获取Access_Token失败";}else{Access_Token = DicText["access_token"].ToString();}//Session["Token"] = Access_Token;//Response.Write(Access_Token);return Access_Token;}}
}
2.FaceAdd.cs
主要功能:在人脸库中新建人脸,并设置这个人脸的编号和分组,这个类也是基于百度云的开发文档
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;namespace com.baidu.ai
{public class FaceAdd{// 人脸注册///参数说明:token->之前获取的Access_Token,base64->图片数据,tel->人脸编号public static string add(string token,string base64,string tel){//string token = "[调用鉴权接口获取的token]";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;//将数据写入json字符串中Dictionary<String, String> dic = new Dictionary<string, string>();dic.Add("image", base64);dic.Add("image_type", "BASE64");//人脸库里的分组名dic.Add("group_id", "Users");//这个人脸的编号dic.Add("user_id", tel);//图片质量检测,Low表示可以接受较低画质的人脸数据dic.Add("quality_control", "LOW");//活体检测,这里只是一个小Demo,所以没有添加活体检测的功能dic.Add("liveness_control", "NONE");JavaScriptSerializer js = new JavaScriptSerializer();String str = js.Serialize(dic);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();Console.WriteLine("人脸注册:");Console.WriteLine(result);return result;}}
}
3.FaceSearch.cs
主要功能:将从前端获取的Base64格式的人脸图片信息和人脸库中已有的人脸进行对比,匹配的编号和匹配程度(百分制),参考百度云人脸搜索。
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;namespace com.baidu.ai
{public class FaceSearch{// 人脸搜索public static string Search(string token, string strbase64){//服务器地址,Access_Token作为凭证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;//序列化,生成json字符串Dictionary<String, String> dic = new Dictionary<string, string>();dic.Add("image", strbase64);dic.Add("image_type", "BASE64");dic.Add("group_id_list", "Users");dic.Add("quality_control", "LOW");dic.Add("liveness_control", "NONE");JavaScriptSerializer js = new JavaScriptSerializer();String str = js.Serialize(dic);byte[] buffer = encoding.GetBytes(str);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
