基于生物特征识别的自动勤务系统设计
2010-07-02李翔宇时丙才高明伦
李翔宇,吴 斌,时丙才,李 垚,高明伦
(中国科学技术大学 微电子研究室,安徽 合肥230026)
现行的考勤系统多为人工操作,容易出现疏漏。本文提出的基于生物特征识别的自动勤务系统,由计算机监控代替传统的人工登记系统,不仅提高了勤务工作的速率,而且可靠性高。所谓生物特征识别,主要是提取生物体样本的个体特征,如视网膜、掌纹、指纹等,进行分析,从而对生物个体做出唯一确认[1]。在这些特征中,由于指纹的提取相对较为方便,而且相关的算法较为成熟,所以本系统采取纹特征的提取、分析和鉴别。
1 系统整体架构
对生物体指纹特征的分析和鉴别,总体说来有两类方法。一类是基于CPU处理的软件实现方法,另一类是如本系统所采用的直接基于硬件的处理方法。软件实现由于只需关注算法层面,无需考虑底层电路细节,系统开发周期更短。但是如果采取专门的AFIS(Aotomatic Fingerprint Identification System)芯片进行系统架构,安全性更高,不易被破解,速度更快。
AFIS的设计需要兼顾系统复杂度和实现成本。需要指出的是,这里设计的是某单位的员工勤务系统,预期的员工数目不超过百人,样本空间相对较小。所以在不影响系统判别效率和鲁棒性的前提下,采用精简的算法和优化电路,以期成本最小化。
勤务AFIS系统主要由以下几大模块构成(如图1)。
图1 勤务AFIS整体架构
系统由一个主控状态机负责全面协调各模块的工作,并通过用户界面提示用户输入、通知用户匹配结果等工作。
2 各模块原理及实现
系统主要模块的设计相互独立。分工完成其设计,并统一握手信号。
2.1 指纹采集
这里采用集成硅电容传感阵列的半导体系统。此系统的工作原理是依据指纹脊和谷由于凹凸不平整,在和金属半导体接触面上的点接触距离不同,导致手指不同部位和半导体之间的电容不同。此类较成熟的产品有Veridicom公司生产的Si电容指纹传感器。
2.2 指纹边缘提取
将电子系统采集到的指纹信息,经过去灰度处理,存储在 8×2 048 bit的 ROM里。指纹图像为 128×128的点阵。下面将采取边缘响应算法对原始图像进行边缘提取,流程如图2。
图2 边缘提取模块数据流
常用的边缘响应算法有Sobel算法、Canny算法和LoG算法等[2]。其中Sobel算法属一阶微分方法,更为简便。由于Sobel算子检测到的边缘通常会比较粗,所以还要用后续的图像增强模块对图像进行再处理。
对于 128×128中的每个像素点,都是采用如图3所示的两个卷积模板对其进行处理。
图3 水平方向和垂直方向的卷积模板
模板的中心点位置是待处理的像素点,经过这轮运算后,水平和垂直模板中心像素点的灰度值都分别为Mh和 Mv(Mh,Mv∈[-4,4])。 计算的最终灰度值为:
把此M值和设定的阈值进行比较,如果大于等于该阈值,就将该像素点置1,否则置0。
该模块内部的状态转移图(已作精简)如图4所示。
图4 边缘相应状态转移图
IDLE:状态机复位态;结束态
GET_PIXEL_FROM_ROM:针对每一个像素点,用3×3 Mask覆盖,并取其周边8个点的值。8点取完后,FIXEL_REG_FULL值为 1。
RENEW_MATRIX_RESULT:根据这8个点的值和阈值,计算中心像素点的值是0还是1。
WRITE_TO_RAM:将该像素点经过滤后的值写入RAM中,写信号低电平有效。
边缘相应模块测试电路连接关系如图5所示(图像由Debussy生成[3])。通过在ModelSim SE6.2b中编写测试文件,对代码进行仿真并通过后,用Altera公司的DE2开发板(板上嵌有Cyclone II 2C35 FPGA芯片)对该模块进行验证[4],并且利用板上自带的VGA接口连接显示器,实时观察边缘提取前后的图像。
图5 边缘相应模块测试电路连接关系
rom模块:存放指纹原始提取数据。
sobel模块:完成边缘检测。
pulse_gen模块:为VGA显示提供行场同步信号,消隐信号;为后面的图形显示模块提供像素行列位置信号。
image_display模块:根据pulse_gen模块提供的位置信号,读取rom或ram中的数据,并根据数据值向VGA显示器发送24位RGB信号。
从VGA显示结果看,成功完成了边缘提取工作,纹路得到了细化,如图6所示。
图6 边缘相应前后VGA显示结果对比
2.3 指纹特征再处理
经过Sobel算子处理的纹线,仍然拥有较粗的边缘。这里采用Zhang&Suen细化算法,让它变成单像素点图像。
由于这个模块数据的转移关系和状态机状态迁移关系和边缘提取模块基本一致,所不同的是运算过程,所以只需要改动Sobel模块中用于计算像素新值的代码,综合即可。
假设待处理的像素位于下列3×3 Mask的a4位置,则该算法计算部分的代码如下:
……
//该简化代码只用来示例算法//
reg a0,a1,a2,a3,a4,a5,a6,a7,a8;
reg[0:7]a;
reg flag_switch; //设置a4值是否需要变化的标志位;
reg[2:0]sum_pixel;//统计中心点周围像素点的代数和
reg sum_step; //统计周围像素点按顺时针顺序
//从 0到 1的跃变次数
always@(a0,a1,a2,a3,a4,a5,a6,a7,a8)
begin
a={a0,a1,a2,a3,a5,a6,a7,a8};
sum_pixel=a0+a1+a2+a3+a5+a6+a7+a8;
if(((sum_pixel>1)&(sum_pixel<7))
&&(sum_step==1)
&&!(a1&a5&a7)
&&!(a5&a7&a3))
flag_switch=1;
else flag_switch=0;
end
always@(flag_switch)
a4=(flag_switch==1)?0:1; //标志位置 1,中心点去除
calc_step calc_step1(.a(a),
.sum_step(sum_step)); //利 用 sum_step
//子模块计算阶跃次数
……
本轮算法之后,可以将东南边界以及西北拐角的无效像素点去除。之后,还需要去除西北边界和东南拐点的无效点。程序与前面基本一致,唯一变动的是13和14两行:
&!(a1&a5&a3)
&!(a1&a7&a3))
需要注意的是,这两轮算法需要反复迭代,直到flag_switch的值维持在0不再改变。
同样,在Altera DE2开发板上对此模块进行测试,过程与2.2部分所述基本相同,在此不再赘述。
2.4 指纹特征提取和匹配
处理后的指纹,已经具有单像素的特征,满足对其进行提取的条件。需要提取的指纹特征有3类:断点,Y连接点(分差点)和 X连接点(十字交叉点)。
在单像素指纹图像中,这3种特征点的表征方式如图7。
图7 脊线特征的点像素显示
这部分计算代码的编写也不难,只要等到状态机运转到判别模块时,用2.3部分的3×3矩阵模板覆盖中心像素及其周围8个像素点。
用 3个计数器分别统计 counter_a,counter_b,counter_c 3种特征点的数目。
……
//该简化代码只用来示例算法//
reg[9:0]counter_a;
reg[9:0]counter_b;
reg[9:0]counter_c;
reg a0,a1,a2,a3,a4,a5,a6,a7,a8;
always@(a0,a1,a2,a3,a4,a5,a6,a7,a8)
begin
if(a4)
begin
case(a0+a1+a2+a3+a5+a6+a7+a8)
1:counter_a=counter_a+1;//统计断点数目
3:begin
if((a0&a2&a7)|(a1&a6&a8)|(a0&a5&a6)|(a2&a3&a8))
counter_b=counter_b+1;
else counter_b=counter_b;
end //统计分岔点数目
4:begin
if(a0&a2&a6&a8)
counter_c=counter_c+1;
else counter_c=counter_c;
end //统计十字交叉点数目
endcase
end
end
……
假设定义在样本库中的指纹的3类特征统计数目为的 db_a,db_b,db_c,则定义匹配度:
(Wa,Wb,Wc为 3种特征在计算中的权重)
再设置匹配阈值,若 K≥KT,即判为匹配,为同一人指纹纹线。通过用户界面,给出相应的通过判别应答信号。
3 误差减小策略和改进
由于本设计是个勤务AFIS,数据库的体积较小。可以要求员工在输入指纹前先输入员工ID(或其他身份甄别标识),然后系统根据员工输入的ID,在指纹数据库中调用唯一的指纹数据,对员工下一步输入的指纹进行一对一的匹配,这样可以在一定范围提高匹配精度。目前有关外围电路,正在研究和完善中。
本文提出了一种小型的用于企业员工出勤管理的AFIS设计方案。对方案中所涉及的每一个模块给出了算法描述,硬件设计语言描述并进行了FPGA验证。论证结果符合预期。这个小型勤务系统设计方便、耗费资源少、工作速度快,完全可以满足企业中小班组考勤工作的需要。
[1]赵忠孝.基于生物识别技术的企业安全系统前景探析[J].电脑开发与应用,2009,22(4):66-68.
[2]周心明.图像处理中几种边缘检测算法的比较[J].现代电力,2000,17(3).
[3]Novas Software,Inc..Debussy handbook,2000.
[4]基于 FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版,2004.