人脸认证源码faceIdentify

简介: 人脸认证源码faceIdentify

人脸认证:

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 faceIdentify : Form
    {
        public faceIdentify()
        {
            InitializeComponent();
            //启动默认在屏幕中间
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        }
        //Api_Key
        public static string Api_Key = "OVYw5Ok0y9U8n6CfVPYt0wfZ";
        //Secret_Key
        public static string Secret_Key = "aCN3lupCarq3rC9G8Rylqz1d36Towp8G";
        FilterInfoCollection videoDevices;
        VideoCaptureDevice videoSource;
        public int selectedDeviceIndex = 0;
        public int selectedPICIndex = 0;
        //窗体加载
        private void faceIdentify_Load(object sender, EventArgs e)
        {
           //显示为正在检测
            this.label1.Text = this.label2.Text = this.label6.Text = this.label9.Text = "正在识别";
            // 刷新可用相机的列表
            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>
        /// 签到的按钮
        /// 先保存图片,然后进行比较,获取的id,查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void qiandao_Click(object sender, EventArgs e)
        {
            Users users = 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);
            }
        }
        //关闭窗口
        private void faceIdentify_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult r = MessageBox.Show("确定要退出程序?", "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (r != DialogResult.OK)
            {
                e.Cancel = true;
            }
            videoSourcePlayer1.Stop();//停止摄像头
            videoSourcePlayer1.Dispose();
        }
        /// <summary>
        /// 人脸识别
        /// </summary>
        /// <param name="filename"></param>
        public static Users FaceIdentifys(string filename)
        {
            long id = 0;
            string ids = "";
            double scores_num = 0;
            Users user = new Users();
            var client = new Baidu.Aip.Face.Face(Api_Key, Secret_Key);
            var image1 = File.ReadAllBytes(filename);
            var result = client.User.Identify(image1, new[] { "gr_test" }, 1, 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());
                foreach (var val in jo_age)
                {
                    id = long.Parse(((JObject)val)["uid"].ToString());  //获取uid
                    string scores = ((JObject)val)["scores"].ToString();//获取scores
                    int num1 = scores.IndexOf("\n") + 2;
                    int num2 = 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);
                }
            }
            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="id"></param>
        /// <returns></returns>
        public static Users QueryUsersById(long id)
        {
            Users user = new Users();
            string sql = "select * from users where id = @id";
            using (SqlDataReader reader = SqlHelper.ExcuteReader(sql, CommandType.Text, new SqlParameter("@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();
                }
            }
            return user;
        }
        //取消的按钮
        private void close_Click(object sender, EventArgs e)
        {
            //停止摄像头
            videoSourcePlayer1.Stop();
            this.Close();
            welcome we = new welcome();
            we.Show();
        }
    }
}
相关文章
|
4月前
|
人工智能 API 计算机视觉
人脸数据上传方式
【8月更文挑战第2天】人脸数据上传方式。
74 3
|
6月前
|
文字识别 小程序 算法
视觉智能开放平台产品使用合集之如何比对上传的图片与身份证照片是不是本人
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
存储 SQL 前端开发
从零玩转人脸识别验证3
从零玩转人脸识别验证
67 0
从零玩转人脸识别验证3
|
7月前
人脸注册源码faceregiste
人脸注册源码faceregiste
|
7月前
|
机器学习/深度学习 算法 iOS开发
视觉智能平台常见问题之使用人脸及身份证采集如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
安全 Java 开发工具
从零玩转人脸识别验证1
从零玩转人脸识别验证
105 0
从零玩转人脸识别验证1
|
Java 数据库连接 计算机视觉
从零玩转人脸识别验证2
从零玩转人脸识别验证
95 0
|
前端开发 算法 Java
使用虹软SDK实现离线人脸注册,人脸登录(H5-JS前端,java后台)
一开始找人脸识别的第三方接口,选择了百度,就是发请求给百度的接口,解析人家返回的数据。
|
监控 Java API
人脸活体检测初体验
简要讲述人脸活体检测体验就api调用测试
人脸活体检测初体验
|
计算机视觉 Python
【项目实践】人脸打卡?或许这个人脸注册和认证实践可以帮助你理解整个打卡过程
【项目实践】人脸打卡?或许这个人脸注册和认证实践可以帮助你理解整个打卡过程
85 0