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

简介: v

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

运行环境:

 中控指纹采集器

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

欢迎关注公众号:雄雄的小课堂


相关文章
|
存储 数据安全/隐私保护 C++
Qt 中文文档 Qt5.15 PDF Class (从官网Qt 5.15 翻译)
Qt 中文文档 Qt5.15 PDF Class (从官网Qt 5.15 翻译)
1992 0
|
机器学习/深度学习 开发者 异构计算
机器学习入门-Colab环境
Google Colab(Colaboratory)是一个免费的云端环境,旨在帮助开发者和研究人员轻松进行机器学习和数据科学工作。它提供了许多优势,使得编写、执行和共享代码变得更加简单和高效。Colab在云端提供了预配置的环境,可以直接开始编写代码,并且提供了免费的GPU和TPU资源,这对于训练深度学习模型等计算密集型任务非常有帮助,可以加速模型训练过程。
1282 0
|
网络协议 5G 计算机视觉
随机接入 |带你读《5G 无线系统设计与国际标准》之十一
随机接入过程用于获得上行同步,完成随机接入过程之后,终端就可以与基站进行上行通信。与 LTE 类似,NR 支持基于竞争的随机接入及基于非竞争的随机接入。
随机接入 |带你读《5G 无线系统设计与国际标准》之十一
|
5月前
|
传感器 JavaScript 芯片
24V转5V/3.3V降压芯片,LDO和DC-DC如何选择
本指南详解24V转5V/3.3V电源方案选型,涵盖PW系列LDO(如PW6206)与DC-DC芯片(PW2312/PW2330等),针对大压差下的效率、散热、噪声、成本等核心挑战,提供“DC-DC主降+LDO后稳”等三级架构建议,助力高效可靠设计。
1510 1
|
8月前
|
人工智能 自然语言处理 监控
【养龙虾指南】OpenClaw是什么?能做什么?怎么部署?
“养龙虾”是开发者对开源AI智能体框架OpenClaw的趣味称呼——因其Logo为红小龙虾,“Claw”喻指“动手能力”。它非聊天机器人,而是为大模型(如Qwen、DeepSeek)赋予操作电脑能力的本地优先执行网关,支持文件管理、办公自动化、代码辅助等场景。阿里云提供一键部署,安全可控,助你轻松拥有专属“赛博龙虾”。
2099 2
|
数据采集 NoSQL Redis
百万级并发下的去重挑战:Bloom Filter 与 Redis 的组合方案
本文探讨了高并发数据采集中避免重复URL抓取的问题,提出了结合Bloom Filter、Redis HyperLogLog和持久化备份的解决方案,实现了快速查重、准确统计和数据恢复。
511 2
|
11月前
|
安全 C# 开发者
高效使用C#随机数生成器(小白也能掌握的Random复用策略)
本文详解C#随机数生成器(Random类)的常见误区与正确用法。频繁新建Random实例会导致种子重复,生成相同“随机数”。推荐复用静态实例或使用.NET 6+的Random.Shared,确保高效、线程安全的随机数生成,提升代码质量与性能。
|
SQL 缓存 开发框架
全网最全安全加固指南之中间件加固
全网最全安全加固指南之中间件加固
2255 105
|
数据采集 Prometheus 运维
基于LoongCollector构建全新可观测Pipeline
LoongCollector是阿里云推出的下一代可观测数据管道,旨在融合多种采集技术,构建统一的可观测数据代理。它具备高性能、可靠性和灵活性,支持日志、指标和追踪等多类型数据采集。通过模块化设计和SPL处理引擎,LoongCollector实现了高效的数据处理与传输,并大幅简化了配置管理。此外,集成eBPF技术,提供无侵入、高性能的应用性能监控,适用于复杂异构环境。未来,LoongCollector将继续优化性能、探索AI赋能的智能化采集。
893 120

热门文章

最新文章