人脸认证源码faceIdentify详解
本文实例为大家分享了人脸认证源码faceIdentify的具体代码,供大家参考,具体内容如下
人脸认证:
usingAForge.Video.DirectShow;
usingface;
usingNewtonsoft.Json;
usingNewtonsoft.Json.Linq;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Drawing;
usingSystem.Drawing.Imaging;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespaceCamtest
{
publicpartialclassfaceIdentify:Form
{
publicfaceIdentify()
{
InitializeComponent();
//启动默认在屏幕中间
this.StartPosition=System.Windows.Forms.FormStartPosition.CenterScreen;
}
//Api_Key
publicstaticstringApi_Key="OVYw5Ok0y9U8n6CfVPYt0wfZ";
//Secret_Key
publicstaticstringSecret_Key="aCN3lupCarq3rC9G8Rylqz1d36Towp8G";
FilterInfoCollectionvideoDevices;
VideoCaptureDevicevideoSource;
publicintselectedDeviceIndex=0;
publicintselectedPICIndex=0;
//窗体加载
privatevoidfaceIdentify_Load(objectsender,EventArgse)
{
//显示为正在检测
this.label1.Text=this.label2.Text=this.label6.Text=this.label9.Text="正在识别";
//刷新可用相机的列表
videoDevices=newFilterInfoCollection(FilterCategory.VideoInputDevice);
comboBoxCameras.Items.Clear();
for(inti=0;i0)
comboBoxCameras.SelectedIndex=0;
picsize.SelectedIndex=0;
//打开摄像头
openCamera();
}
//打开摄像头
publicvoidopenCamera()
{
selectedPICIndex=picsize.SelectedIndex;
selectedDeviceIndex=comboBoxCameras.SelectedIndex;
//连接摄像头。
videoSource=newVideoCaptureDevice(videoDevices[selectedDeviceIndex].MonikerString);
videoSource.VideoResolution=videoSource.VideoCapabilities[selectedDeviceIndex];
//枚举所有摄像头支持的像素,设置拍照为1920*1080
foreach(VideoCapabilitiescapabinvideoSource.VideoCapabilities)
{
if(selectedPICIndex==0)
{
if(capab.FrameSize.Width==1920&&capab.FrameSize.Height==1080)
{
videoSource.VideoResolution=capab;
break;
}
if(capab.FrameSize.Width==1280&&capab.FrameSize.Height==720)
{
videoSource.VideoResolution=capab;
break;
}
}
else
{
if(capab.FrameSize.Width==1280&&capab.FrameSize.Height==720)
{
videoSource.VideoResolution=capab;
break;
}
}
}
videoSourcePlayer1.VideoSource=videoSource;
//setNewFrameeventhandler
videoSourcePlayer1.Start();
}
///
///签到的按钮
///先保存图片,然后进行比较,获取的id,查询
///
///
///
privatevoidqiandao_Click(objectsender,EventArgse)
{
Usersusers=FaceIdentifys(SavePicture());
this.label1.Text=users.age.ToString();
this.label2.Text=users.name;
this.label6.Text=users.phone;
this.label9.Text=users.address;
if(users.picture!=null)
{
this.pictureBox1.Image=Image.FromFile(users.picture,false);
}
}
//关闭窗口
privatevoidfaceIdentify_FormClosing(objectsender,FormClosingEventArgse)
{
DialogResultr=MessageBox.Show("确定要退出程序?","操作提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
if(r!=DialogResult.OK)
{
e.Cancel=true;
}
videoSourcePlayer1.Stop();//停止摄像头
videoSourcePlayer1.Dispose();
}
///
///人脸识别
///
///
publicstaticUsersFaceIdentifys(stringfilename)
{
longid=0;
stringids="";
doublescores_num=0;
Usersuser=newUsers();
varclient=newBaidu.Aip.Face.Face(Api_Key,Secret_Key);
varimage1=File.ReadAllBytes(filename);
varresult=client.User.Identify(image1,new[]{"gr_test"},1,1);
//先判断脸是不是在上面,在继续看有匹配的没,否则提示放上脸
//得到根节点
JObjectjo_result=(JObject)JsonConvert.DeserializeObject(result.ToString());
if((string)jo_result["error_msg"]!=null)
{
MessageBox.Show("对不起,请把脸放上!","提示",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
else
{
//检测到脸
//得到result节点
JArrayjo_age=(JArray)JsonConvert.DeserializeObject(jo_result["result"].ToString());
foreach(varvalinjo_age)
{
id=long.Parse(((JObject)val)["uid"].ToString());//获取uid
stringscores=((JObject)val)["scores"].ToString();//获取scores
intnum1=scores.IndexOf("\n")+2;
intnum2=scores.LastIndexOf("]")-8;
ids=scores.Substring(num1,num2);
scores_num=double.Parse(ids);
}
if(scores_num>80)
{
user=QueryUsersById(id);
if(user.id!=0)
{
MessageBox.Show("签到成功,已检测到您的信息","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
MessageBox.Show("对不起,系统根据您的脸未检测到信息","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
}
else{
MessageBox.Show("对不起,系统根据您的脸未检测到信息","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Stop);
}
}
returnuser;
}
///
///保存图片
///
publicstringSavePicture()
{
if(videoSource==null)
{
returnnull;
}
Bitmapbitmap=videoSourcePlayer1.GetCurrentVideoFrame();
//图片名称,年月日时分秒毫秒.jpg
stringfileName=DateTime.Now.ToString("yyyyMMddHHmmssff")+".jpg";
//获取项目的根目录
stringpath=AppDomain.CurrentDomain.BaseDirectory;
stringpicture=path+"\\picture\\"+fileName;
//将图片保存在服务器里面
bitmap.Save(picture,ImageFormat.Jpeg);
bitmap.Dispose();
returnpicture;
}
///
///根据编号查询用户信息
///
///
///
publicstaticUsersQueryUsersById(longid)
{
Usersuser=newUsers();
stringsql="select*fromuserswhereid=@id";
using(SqlDataReaderreader=SqlHelper.ExcuteReader(sql,CommandType.Text,newSqlParameter("@id",id)))
{
if(reader.Read())
{
user.id=long.Parse(reader[0].ToString());
user.name=reader[1].ToString();
user.age=Convert.ToInt32(reader[2]);
user.phone=reader[3].ToString();
user.password=reader[4].ToString();
user.address=reader[5].ToString();
user.picture=reader[6].ToString();
}
}
returnuser;
}
//取消的按钮
privatevoidclose_Click(objectsender,EventArgse)
{
//停止摄像头
videoSourcePlayer1.Stop();
this.Close();
welcomewe=newwelcome();
we.Show();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。