人脸登陆facelogin
来源:互联网 发布:联通网络详单免费流量 编辑:程序博客网 时间:2024/06/15 09:56
人脸登陆:
using AForge.Video.DirectShow;using face;using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Camtest{ public partial class facelogin : Form { //Api_Key public static string Api_Key = "OVYw5Ok0y9U8n6CfVPYt0wfZ"; //Secret_Key public static string Secret_Key = "aCN3lupCarq3rC9G8Rylqz1d36Towp8G"; public facelogin() { InitializeComponent(); //启动默认在屏幕中间 this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; } FilterInfoCollection videoDevices; VideoCaptureDevice videoSource; public int selectedDeviceIndex = 0; public int selectedPICIndex = 0; //窗体加载 private void facelogin_Load(object sender, EventArgs e) { // 刷新可用相机的列表 videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); comboBoxCameras.Items.Clear(); for (int i = 0; i < videoDevices.Count; i++) { comboBoxCameras.Items.Add(videoDevices[i].Name.ToString()); } if (comboBoxCameras.Items.Count > 0) comboBoxCameras.SelectedIndex = 0; picsize.SelectedIndex = 0; //打开摄像头 openCamera(); } //打开摄像头 public void openCamera() { selectedPICIndex = picsize.SelectedIndex; selectedDeviceIndex = comboBoxCameras.SelectedIndex; //连接摄像头。 videoSource = new VideoCaptureDevice(videoDevices[selectedDeviceIndex].MonikerString); videoSource.VideoResolution = videoSource.VideoCapabilities[selectedDeviceIndex]; // 枚举所有摄像头支持的像素,设置拍照为1920*1080 foreach (VideoCapabilities capab in videoSource.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; // set NewFrame event handler videoSourcePlayer1.Start(); } /// <summary> /// 点击确定的按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { //先获取用户名 //然后在提取图片 //先查询用户名,看看有没有该用户名 //有该用户名的话继续判断人脸对应不,没有的话提示没有该用户 string name = this.textBox1.Text; Users user = QueryUsersByName(name); if (((string)(user.name))!="") { //有该用户,判断摄入的人脸和人脸库中的对比 FaceVerify(SavePicture(),user); } else { //说明没有该用户,提示用户重新输入用户名 MessageBox.Show("对不起,检测到没有该用户,请重新输入", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } /// <summary> /// 人脸认证【登陆】 /// </summary> public void FaceVerify(string filename,Users users) { var client = new Baidu.Aip.Face.Face(Api_Key ,Secret_Key); var image1 = File.ReadAllBytes(filename); var result = client.User.Verify(image1,(users.id).ToString(), new[] { "gr_test" }, 1); //先判断脸是不是在上面,在继续看有匹配的没,否则提示放上脸 //得到根节点 JObject jo_result = (JObject)JsonConvert.DeserializeObject(result.ToString()); if ((string)jo_result["error_msg"] != null) { MessageBox.Show("对不起,请把脸放上!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop); } else { //检测到脸 //得到result节点 JArray jo_age = (JArray)JsonConvert.DeserializeObject(jo_result["result"].ToString()); string resu = jo_age.ToString(); int num1 = resu.IndexOf("\n") + 2; int num2 = resu.LastIndexOf("]") - 8; string ids = resu.Substring(num1, num2); if (ids != null || !ids.Equals("")) { double scores_num = double.Parse(ids); if (scores_num > 80) { MessageBox.Show("登陆成功,已检测到您的信息", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("对不起,脸与账户不对应,请换张脸试试", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } } } /// <summary> /// 根据编号查询用户信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public static Users QueryUsersByName(string name) { Users user = new Users(); string sql = "select * from users where name = @name"; using (SqlDataReader reader = SqlHelper.ExcuteReader(sql, CommandType.Text, new SqlParameter("@name", name))) { 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(); } } return user; } /// <summary> /// 保存图片 /// </summary> public string SavePicture() { if (videoSource == null) { return null; } Bitmap bitmap = videoSourcePlayer1.GetCurrentVideoFrame(); //图片名称,年月日时分秒毫秒.jpg string fileName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ".jpg"; //获取项目的根目录 string path = AppDomain.CurrentDomain.BaseDirectory; string picture = path + "\\picture\\" + fileName; //将图片保存在服务器里面 bitmap.Save(picture, ImageFormat.Jpeg); bitmap.Dispose(); return picture; } /// <summary> /// 取消的按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void close_Click(object sender, EventArgs e) { //停止摄像头 videoSourcePlayer1.Stop(); this.Close(); welcome we = new welcome(); we.Show(); } }}
阅读全文
0 0
- 人脸登陆facelogin
- 获取登陆人ID和登陆名称
- 自定义登陆人信息
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- 登陆
- Struts2的系统怎么做到同一帐号不能多人登陆?后登陆的可以把先登陆的挤掉?
- 让XP3389支持多人登陆
- 同一账号禁止多人同时登陆
- 同一账号禁止多人同时登陆
- 人脸认证源码faceIdentify
- C++之string类型
- JavaScript性能优化的小知识点总结
- 如何在AOP中获取Request和Response对象
- 联合体
- 人脸登陆facelogin
- BZOJ蒟蒻百年挖坑计划
- Java NIO:浅析I/O模型
- Java线程池ThreadPoolExecutor使用和分析(二)
- 高数 06.02 定积分及其相关内容
- SQL语句基础知识(总结)
- 【笔记】AOV网与拓扑排序
- 现代操作系统之输入输出(一)
- 使用Git拉取GitLab上的项目 原创 2015年06月27日 12:42:29 标签: git 一、安装Git(windows版、其他平台参阅) 去Git的官网,下