使用中控指纹采集器开发指纹识别案例

举报
穆雄雄 发表于 2022/12/13 22:02:35 2022/12/13
【摘要】 这两天正好有点琐碎的时间,就将两年前未开发完毕的指纹识别项目翻出来继续写了写。运行环境:1.中控指纹采集器2.Win10操作系统3…netframework4.04.Sqlserver2008及以上源码已经上传到微信公众号【雄雄的小课堂】中,回复“指纹识别源码获取”即可下载。指纹识别项目运行流程1用户注册:输入用户名、密码以及采集完整的3遍指纹。2用户登录:输入注册时的用户名,使用注册时的指...

这两天正好有点琐碎的时间,就将两年前未开发完毕的指纹识别项目翻出来继续写了写。

运行环境:

1.中控指纹采集器
2.Win10操作系统
3…netframework4.0
4.Sqlserver2008及以上

源码已经上传到微信公众号【雄雄的小课堂】中,回复“指纹识别源码获取”即可下载。

指纹识别项目运行流程

1

用户注册:输入用户名、密码以及采集完整的3遍指纹。

2

用户登录:输入注册时的用户名,使用注册时的指纹,即可登录成功。

3
采集指纹时,3次需要一样的,如果不一样,提示采集失败

4
登录时,需要用户名和指纹对应,如果不对应,则提示登陆失败,采集器闪红灯以及有警告声响

指纹识别项目中的部分截图

1.注册页面

2.登录页面

3.如果没有指纹识别采集器,提示:

4.指纹采集3次成功:

5.登录成功:

6.登陆失败:

部分代码

采集指纹的代码

/// <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("开始登记指纹,推荐将您的食指放\n\n在采集器上进行登记\n\n(如果有困难,您也可以使用其它手指)……");

               }

               catch

               {

                   MessageBox.Show("出现异常");

               }

           }

           else

           {

               MessageBox.Show("请买个指纹采集仪", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);

           }

       }

将指纹登记特征模版保存到指纹识别高速缓冲空间,并显示指纹登记结果

        /// <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);

           }

       }

取得指纹初始特征,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 + '\n' + "采集状态:还需要按手指 " + Convert.ToString(this.axZKFPEngX1.EnrollIndex - 1) + " 次!";



                   }

               }

           }

           ShowMsgInfo(strTemp);

       }

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

       /// <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;

       }

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

          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);



           }

整个运行流程视频

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。