指纹识别开发概述
简介
我们提供了多款支持指纹识别的模块,指纹识别开发相对有一定复杂度,所以专门新建一个主题来仔细阐述指纹识别相关概念和流程,并提供多个示例从简单到复杂来指导用户开发指纹识别相关应用。
我们支持两种指纹模块:dxFingerZaz(Zaz 模块)和 dxFingerMz(MZ 模块),它们都通过 UART 串口与指纹识别硬件通信。
基本概念
-
指纹传感器: 用于采集指纹图像的硬件设备。用户将手指放置在传感器上,传感器会捕捉指纹的细节特征。
-
指纹图像: 传感器采集到的原始指纹图像数据。这是进行后续处理的基础。
-
特征值: 也称为指纹模板或特征文件。这是从指纹图像中提取的数字化特征数据,包含了能够唯一标识该指纹的关键信息(如细节特征点、纹路方向等)。特征值是指纹比对的核心依据。我们的模块可以不保存原始图像,只保存特征值就可以实现指纹识别,这个值通常比图像小很多,而且是固定长度。
-
指纹库: 一个专门用于存储已注册用户指纹特征值的数据库。当进行指纹识别时,系统会将实时捕捉到的指纹特征值与库中的数据进行比对。不同模块使用不同的标识方式:
- Zaz 模块: 使用 ID(数字标识符,范围 1-5000)
- MZ 模块: 使用 Page Index(页面索引,范围 0-65535)
-
缓冲区: 模块 RAM 中的临时存储区域,用于在处理过程中暂存指纹图像和特征值。
- Zaz 模块: 提供 3 个 RAM 缓冲区(Buffer 0, 1, 2)
- MZ 模块: 提供 2 个字符缓冲区(Buffer 1, 2)
-
特征生成: 从指纹图像中提取特征值的过程。将采集到的指纹图像经过预处理、特征提取等步骤,生成可用于比对的指纹特征值。
-
特征合并: 将多次采集的指纹特征值合并成一个更完整、更准确的模板。通常录入时需要采集 2-3 次指纹并合并,以提高识别准确率。
-
指纹检测: 检测传感器上是否有手指放置。这是进行后续指纹识别的前提。
-
指纹比对: 将两个不同的指纹特征值进行比较,计算它们之间的相似度分数。这分为两种:
- 1:1 比对: 判断两个指纹是否为同一个手指,常用于身份验证(如指纹登录)。
- 1:N 比对: 将一个指纹与指纹库中的 N 个特征值进行比对,找出最匹配的一个,常用于身份识别(如门禁系统)。
-
安全等级: 控制指纹匹配的严格程度,等级越高,匹配要求越严格,误识率越低,但拒识率可能增加。通常范围是 1-5,等级 3 是大多数应用场景的平衡选择。
-
指纹识别: 这是一个完整的流程,包括从传感器采集指纹图像、提取特征值,并与指纹库进行比对,最终识别出人员身份的过程。
-
指纹注册: 也叫指纹录入。指首次将用户的指纹信息采集并存入指纹库的过程。通常需要用户多次按压手指,以确保采集到高质量的指纹图像,并提取出稳定可靠的特征值。
基本流程
一个完整的指纹识别应用通常包含三个核心流程:指纹检测、指纹注册与指纹识别。
1. 指纹检测流程
- 检测手指: 检测传感器上是否有手指放置。
- 采集图像: 如果检测到手指,则采集指纹图像。
- 质量判断: 评估指纹图像的质量(如清晰度、完整性)。
2. 指纹注册流程
- 触发注册: 应用启动用户注册流程。
- 第一次采集: 提示用户放置手指,采集第一张指纹图像 。
- 生成特征: 从第一张图像中提取特征值,存储到缓冲区 1。
- 第二次采集: 提示用户再次放置手指,采集第二张指纹图像。
- 生成特征: 从第二张图像中提取特征值,存储到缓冲区 2。
- 合并特征: 将两个缓冲区的特征值合并成一个更完整的模板。
- 保存入库: 将用户的身份信息(一般是用户的 ID)与合并后的特征值一起存入指纹库。
通常建议采集 2-3 次指纹并合并,这样可以提高后续识别的准确率和成功率。不同采集角度和压力可能捕获不同的特征点,合并可以补充缺失的特征点。
3. 指纹识别流程
- 启动识别: 应用开始进行指纹识别。
- 检测手指: 检测传感器上是否有手指放置。
- 采集图像: 如果检测到手指,则采集指纹图像。
- 生成特征: 从指纹图像中提取实时特征值。
- 特征比对: 将实时特征值与指纹库中的数据进行 1:N 比对。
- 输出结果: 如果比对的相似度分数超过预设阈值,则识别成功,返回对应的人员信息(一般是人员的 ID);否则,识别失败。
两个模块的主要区别
| 特性 | Zaz 模块 | MZ 模块 |
|---|---|---|
| 标识方式 | ID (1-5000) | Page Index (0-65535) |
| 缓冲区数量 | 3 个 (0, 1, 2) | 2 个 (1, 2) |
| 特征合并 | 支持合并 2-3 个 | 固定合并 2 个 |
| 自动功能 | 无 | 支持自动注册和自动识别 |
| 手指 检测 | fingerDetect() | 无独立接口 |
| 图像采集 | getImage() 通用 | getImage() 验证,getEnrollImage() 注册 |
总结
本文档作为指纹识别开发的入门指南,系统性地介绍了从核心概念到实际应用的全景视图。我们首先阐明了指纹传感器、特征值、指纹库、缓冲区等关键术语的定义;接着,详细拆解了指纹检测、指纹注册与指纹识别这三大核心业务流程;最后,对比了两个模块的主要区别。
掌握本文内容将为您后续深入学习打下坚实的基础。后续文档将围绕这三个基本流程,提供从简单到复杂的多个代码示例,详细阐述具体的开发细节。