zoukankan      html  css  js  c++  java
  • 使用中控指纹采集器开发指纹识别案例V1.0

    这两天正好有点琐碎的时间,就将两年前未开发完毕的指纹识别项目翻出来继续写了写。
    运行环境:
     中控指纹采集器
     Win10操作系统
     .netframework4.0
     Sqlserver2008及以上
    源码已经上传到微信公众号【雄雄的小课堂】中,回复“指纹识别源码获取”即可下载。

    一、 指纹识别项目运行流程:
     用户注册:输入用户名、密码以及采集完整的3遍指纹。
     用户登录:输入注册时的用户名,使用注册时的指纹,即可登录成功
     采集指纹时,3次需要一样的,如果不一样,提示采集失败
     登录时,需要用户名和指纹对应,如果不对应,则提示登陆失败,采集器闪红灯以及有警告声响
    二、 指纹识别项目中的部分截图:

    1. 注册页面:
      在这里插入图片描述
      2.登录页面
      在这里插入图片描述
      3.如果没有指纹识别采集器,提示:
      在这里插入图片描述
      4.指纹采集3次成功:
      在这里插入图片描述
      5.登录成功:
      在这里插入图片描述
      6.登陆失败:

    在这里插入图片描述
    三、 部分代码:

    1. 采集指纹的代码
    /// <summary>
            /// 采集指纹
            /// </summary>
            public void Caiji()
            {
                if (this.axZKFPEngX1.InitEngine() == 0)
                {
                    try
                    {
                        this.IsGoodQuality = false;
                        this.richTextBox1.Clear();
                        this.axZKFPEngX1.CancelEnroll();
                        this.axZKFPEngX1.EnrollCount = 10; // 取样次数 ,3次
                        this.axZKFPEngX1.BeginEnroll();
                        ShowMsgInfo("开始登记指纹,推荐将您的食指放
    
    在采集器上进行登记
    
    (如果有困难,您也可以使用其它手指)……");
    
                        // MessageBox.Show("开始登记指纹");
                    }
                    catch
                    {
                        MessageBox.Show("出现异常");
                    }
                }
                else
                {
                    MessageBox.Show("请买个指纹采集仪", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
    
    
    1. 将指纹登记特征模版保存到指纹识别高速缓冲空间,并显示指纹登记结果
    /// <summary>
            /// 将指纹登记特征模版保存到指纹识别高速缓冲空间,并显示指纹登记结果
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void axZKFPEngX1_OnEnroll(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnEnrollEvent e)
            {
                if (e.actionResult)
                {
                    this.textBox1.Text = this.axZKFPEngX1.GetTemplateAsString();
                    int name = this.axZKFPEngX1.AddRegTemplateStrToFPCacheDB(fpcHandle, 4, this.axZKFPEngX1.GetTemplateAsString());
                    MessageBox.Show("指纹登记成功! ", "提示! ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //ShowMsgInfo("指纹登记成功!");
                    //保存所登记的指纹
                }
                else
                {
                    MessageBox.Show("指纹登记失败! ", "提示! ", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
    
    

    3.取得指纹初始特征,0:好的指纹特征 1:特征点不够

    /// <summary>
            /// 取得指纹初始特征,0:好的指纹特征  1:特征点不够
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void axZKFPEngX1_OnFeatureInfo(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnFeatureInfoEvent e)
            {
                String strTemp = "指纹质量";
                if (e.aQuality != 0)
                {
                    strTemp = strTemp + "不符合标准!";
                    this.labelResults.Text = "当前指纹特征点不够,请继续……";
                    //MessageBox.Show("当前指纹特征点不够,请继续……! ", "提示! ", MessageBoxButtons.OK);
                }
                else
                {
                    strTemp = strTemp + " 符合指标要求。";
                    this.IsGoodQuality = true;
                    this.labelResults.Text = "指纹特征点良好,请保存";
                    //MessageBox.Show("指纹特征点良好,请保存 ", "提示! ", MessageBoxButtons.OK);
                }
                if (this.axZKFPEngX1.EnrollIndex != 1)
                {
                    if (this.axZKFPEngX1.IsRegister)
                    {
                        if (this.axZKFPEngX1.EnrollIndex - 1 > 0)
                        {
                            strTemp = strTemp + '
    ' + "采集状态:还需要按手指 " + Convert.ToString(this.axZKFPEngX1.EnrollIndex - 1) + " 次!";
    
                        }
                    }
                }
                ShowMsgInfo(strTemp);
            }
    
    

    4.获取指纹图像并在窗口中实时显示

     /// <summary>
            /// 获取指纹图像并在窗口中实时显示
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void axZKFPEngX1_OnImageReceived(object sender, AxZKFPEngXControl.IZKFPEngXEvents_OnImageReceivedEvent e)
            {
                this.labelResults.Text = "";
                Graphics g = pictureBox1.CreateGraphics();
                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                g = Graphics.FromImage(bmp);
                int dc = g.GetHdc().ToInt32();
                this.axZKFPEngX1.PrintImageAt(dc, 0, 0, bmp.Width, bmp.Height);
                g.Dispose();
                this.pictureBox1.Image = bmp;
            }
    
    

    5.指纹比对以及控制声音和灯光的关键代码

    this.axZKFPEngX1.CancelEnroll();
                //  string saveTemplates = this.textBox1.Text;
                string curTempldates = this.axZKFPEngX1.GetTemplateAsString();
                bool regChange = true;
                //调用根据姓名查询指纹的方法
                string old_zhiwen = ud.Login(txtname.Text);
                if (this.axZKFPEngX1.VerFingerFromStr(ref old_zhiwen, curTempldates, false, ref regChange))
                {
                    MessageBox.Show("登录成功!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    KongZhi(11, 0);  //关闭绿灯
                    KongZhi(13, 1); //打开声音
                    KongZhi(12, 1); //打开红灯
                    KongZhi(13, 0); //关闭声音
                    KongZhi(12, 0); //打开红灯
                    KongZhi(11, 0);  //关闭绿灯
                    KongZhi(13, 1); //打开声音
                    KongZhi(12, 1); //打开红灯
                    KongZhi(13, 0); //关闭声音
                    KongZhi(12, 0); //打开红灯
                    MessageBox.Show("登录失败!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
    
                }
    
    

    四、 整个运行流程视频:https://v.qq.com/x/page/u30471pj5j5.html

    欢迎关注公众号:雄雄的小课堂
    在这里插入图片描述

  • 相关阅读:
    tf导出pb文件,以及如何使用pb文件
    word2vec入门理解的博客整理
    简单的RNN和BP多层网络之间的区别
    图像中用到的信息论中的一些概念公式
    raw文件转mha文件
    mha格式的CT体数据转为jpg切片
    在MySQL的表中增加一列
    ES7学习笔记(二)ES的集群原理
    MySQL中的幻读,你真的理解吗?
    ES7学习笔记(一)Elasticsearch的安装与启动
  • 原文地址:https://www.cnblogs.com/a1111/p/12815844.html
Copyright © 2011-2022 走看看