未来智讯 > 人脸语音识别论文 > 教育招生考试中指纹识别身份认证系统的设计和实现

教育招生考试中指纹识别身份认证系统的设计和实现

发布时间:2018-05-09 11:34:00 文章来源:未来智讯    
    关键词:指纹识别技术;考试管理
    中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2009)15-4004-06
    
    Fingerprint Identity Authentication System in Education Enroll Examination Design and Implementation
    XU Fei
    (Anhui Education Examinations Authority, Hefei 230022, China)
    Abstract: For all types of education today, such as cheating in examinations proxy issues fingerprint recognition technology will be applied to the examination of management, the use of fingerprint characteristics of candidates to determine the value of his true identity, the design of fingerprint-based test management and validation system architecture, and resolve in the course of the study the key issues encountered by the end of the whole system were studied to verify the feasibility of the system.
    Key words: fingerprint recognition technology; test management
    
    1 引言
    
    在如今各类教育考试中,随着高科技手段的发展,身份伪造的技术也愈加先进,替考也越来越成为考生作弊的一种常用手段。鉴别考生身份的真实性,也成为了当前考试管理工作一大难点。目前,大多数地区对各类考试的考生的的管理还较落后,大多采用塑料卡片或纸片上印上考生姓名、照片等信息,由人工比对确定是否准予进入指定考场,其优点是直接成本低,但也具有容易伪造、复制等不可克服的缺点。本系统通过指纹识别技术,在考生报名时采集指纹特征存入数据库,在考生进入考场时校验考生的指纹特征,从而达到鉴别考生身份的真实性。
    
    2 指纹识别技术介绍
    
    指纹识别技术是生物识别技术的一种,生物识别技术是通过人体的生物特征包括指纹、声音、脸孔、视网膜、掌纹、骨架等等来进行身份验证的一种解决方案。它是通过获取这些生物特征,并将之转换为数字信息,存储于计算机中,利用可靠的匹配算法来完成验证与识别个人身份的过程。
    指纹识别技术主要涉及四个功能:读取指纹图象、提取特征、保存数据和比对。在一开始,通过指纹读取设备读取到人体指纹的图象,取到指纹图象之后,要对原始图象进行初步的处理,使之更清晰。 接下来,指纹辨识软件建立指纹的数字表示――特征数据,一种单方向的转换,可以从指纹转换成特征数据但不能从特征数据转换成为指纹,而两枚不同的指纹不会产生相同的特征数据。软件从指纹上找到被称为“节点”的数据点,也就是那些指纹纹路的分叉、终止或打圈处的坐标位置,这些点同时具有七种以上的唯一性特征。因为通常手指上平均具有70个节点,所以这种方法会产生大约490个数据。有的算法把节点和方向信息组合产生了更多的数据,这些方向信息表明了各个节点之间的关系,也有的算法还处理整幅指纹图像。总之,这些数据,通常称为模板,保存为1K大小的记录。最后,通过计算机模糊比较的方法,把两个指纹的模板进行比较,计算出它们的相似程度,最终得到两个指纹的匹配结果。
    
    3 系统设计
    
    通过对需求的分析,本系统大致可以分为四个模块,系统管理子模块、采集子模块、校验子模块和统计打印子模块。系统的结果如图1所示。
    系统管理子模块主要包含了用户管理、权限管理、数据备份和数据恢复等功能。
    采集子模块主要包含了考生信息采集和考生指纹采集功能。考生信息采集方式为考生填涂报名信息卡,通过OMR设备采集至数据库。指纹采集主要在考生报名后通过指纹采集设备,根据考生的报名信息准确的将考生左、右手食指的指纹特征采集至数据库。指纹采集流程图如图2所示。
    校验子模块包含了考生信息查询和考生指纹校验功能。考生信息查询功能实现了可以对考生报名信息和指纹采集信息进行查询。考生指纹校验是在考生进入考场前,通过指纹采集设备,实现了和报名时采集的考生指纹特征进行比对校验。指纹校验流程图如图3所示。
    统计打印子模块包含了考生准考证打印和考生报名信息统计功能。
    
    4 系统实现
    
    通过对系统的软件需求、软件规模和要求实现的功能分析,考虑到系统构架要灵活实用,单机版、网络版完全兼容, 便于短时间密集采集数据, 要降低系统实施的复杂性和使用者的劳动强度。且由于经费投入的问题系统要有较低的硬件要求, 整个系统采用Client/Server( 客户/服务器) 工作模式, 以Mysql3.23.53 为后台数据库,Delphi7为前端开发工具。而前、后台连接的中间件为BDE 与Mysql 专用数据接口。
    4.1 关键问题和解决方案
    指纹识别和校验最主要的问题是拒真率和认假率,拒真率(False Reject Rate,简称FRR):其含义是对于正式使用者的排他率。认假率(False Accept Rate,简称FAR):其含义是对于非正式使用者的认证率。本系统采用某公司先进产品,其拒真率<0.02%,认假率<0.0003%。拒真率(FRR) 其它性能指标为:分辨率500dpi,指纹扫描时间0.1 s,指纹接受角度±30°,工作方式1:1 和1:N,传感器有效面积18.2mm×12.8mm,通信接口USB。本系统通过该产品提供的SDK包,调用其DLL文件实现对考生的指纹的采集和校验。
    4.2 指纹采集程序实现
    首先定义函数function Tformzwcj.Calibrate(Image: Integer): Boolean;
    begin
    if YA202.TestImageQuality(Image) = 2 {Y_SENSOR_NEED_CALIBRATION} then begin
    Inc(__CalibrateCount);
    if __CalibrateCount = 3 then
    begin
    Msg1('设备校验中 ...', clBlack);
    YA202.CalibrateSensor
    end;
    if __CalibrateCount = 15 then __CalibrateCount := 0;

         result := true
    end else
    result := false
    end;
    用于初始化指纹识别仪,其次,根据选定的学校或考生号范围等条件从数据库选出需要进行指纹采集的考生基本信息。根据选定的顺序,考生依次进行指纹采集,考生将食指按住指纹采集仪,系统调用
    根据form上timer控件实施调用函数
    procedure Tformzwcj.Timer1Timer(Sender: TObject);
    var
    Image: Integer;
    begin
    if dqcjcs>cjcs Then--如果当前采集次数大于采集次数就退出
    Begin
    SetImage(0);
    TrackBar1.SelEnd := 0;
    Msg1('', clBtnFace);
    __CanExtract := true;
    TakePhoneButtonClick(sender);
    Exit;
    End;
    Image := YA202.CaptureImage;--初始化指纹图像
    if Image <> 0 then--判断手指是否按在指纹识别仪上
    begin
    if __CanExtract then
    begin
    SetImage(Image);
    if not Calibrate(Image) then
    begin
    TrackBar1.SelEnd := DiffToTrack(YA202.LastCaptureDiff);
    TrackBar1.Update;
    if TrackBar1.SelEnd >= TrackBar1.Position then
    begin
    __CanExtract := false;
    Timer1.Enabled := false;
    ProcessImage(__Image);
    Timer1.Enabled := true;
    Msg1('请将手指移开!', clGreen);
    end
    else
    Msg1('请将手指按紧指纹仪并保持!', 107*256+203)
    end
    end
    end
    else
    begin
    SetImage(0);
    TrackBar1.SelEnd := 0;
    Msg1('请将手指按在指纹仪上!', cl3DDkShadow);
    __CanExtract := true ;
    end;
    end;
    procedure Tformzwcj.ProcessImage(Image: Integer);
    var
    Template: Integer;
    ER,CX,CY: Integer;
    begin
    if _InProcessImage then
    Exit;
    _InProcessImage := true;
    Msg1('提取指纹数据中...');
    Template := YA202.ExtractTemplate(Image);--提取指纹采集仪采集的图像
    if Template <> 0 then
    begin
    Msg1('处理指纹数据中...');
    SetTemplates(Template);
    //__Templates[0] := Template;
    YA202.GetImageProperties (Image,ER,CX,CY);--取得指纹图像特征
    If (ERTCX) OR (abs(CY)>TCY) Then
    Begin
    Msg1('请调整按指纹的姿势!',clRed);
    Sleep(1000);
    _InProcessImage := false ;
    Exit;
    End;
    Ac_SaveTemplatesExecute(self);
    end
    else
    Msg1('系统错误!');
    _InProcessImage := false ;
    If (Editksh.CanFocus) And (cjcs=0) Then
    Begin
    Editksh.SelectAll ;
    EditKsh.SetFocus
    End;
    end;
    最后,采集的指纹信息存储到系统的数据库和图像文件中。
    procedure Tformzwcj.Ac_SaveTemplatesExecute(Sender: TObject);
    var
    ItemSize: Integer;
    ItemBuf: array of Byte;
    FS: TBlobStream;
    B: Boolean;
    begin
    B := Timer1.Enabled;
    Timer1.Enabled := false;
    --判断考生是否已经采集过指纹
    If (Qryxszw.AsString >'0') and (dqcjcs=1) Then
    If Application.MessageBox ('该考生已经有指纹信息,是否覆盖!',Pchar(Caption),MB_OKCanCel) <>IDOK ThenExit;
    Qryrk.Close;
    Qryrk.Sql.Clear ;
    --指纹特征入库
    Qryrk.Sql.Add ('replace into xx_ygzwxxb values('''+DBedit7.Text+''','+inttostr(dqcjcs)+',');
    Qryrk.Sql.Add (' null,0,null,''0'','''+yhdm+''',sysdate(),'''+getfingerpos+''',null,null) ');
    Try
    Qryrk.Execsql;
    Except
    Application.MessageBox ('数据库存储失败!',pchar(caption),MB_OK);
    Exit;
    End;
    Qryzw.Close;
    Qryzw.Sql.Clear;
    Qryzw.Sql.Add ('select * from xx_ygzwxxb where ygh='''+DBEdit7.Text+''' and zwxh='+inttostr(dqcjcs)+' ');
    Qryzw.Open;
    Qryzw.Edit;
    FS := nil;
    try
    FS := TBlobStream.Create(Qryzwzwxx as TblobField, BmWrite);
    ItemSize := YA202.GetTemplateSaveSize(__Templates[0]);
    SetLength(ItemBuf, ItemSize);
    if YA202.SaveTemplateToMemory(__Templates[0], ItemBuf[0], ItemSize) <> ItemSize then
    raise Exception.Create(Format('SaveTemplateToMemory: %d', [YA202.LastErrorCode]));

         FS.WriteBuffer(ItemBuf[0], ItemSize);
    Qryzwzwcd.AsInteger := ItemSize;
    qryzw.Post;
    FS.Free;
    Ac_SaveImageAsBMP.Execute ;
    Qryxs.Edit;
    Qryxszw.AsString:=inttostr(dqcjcs);
    Qryxs.post;
    dqcjcs:=dqcjcs+1;
    StatusBar1.Panels [0].Text :='指纹数据保存成功';
    If dqcjcs<=cjcs Then
    Begin
    msg1('现在将采集考生下一枚指纹!');
    RB7.Checked :=True;
    End
    Else
    Begin
    msg1('现在将采集下一个考生指纹!');
    RB4.Checked :=true;
    End;
    Shape1.Brush.Color := clLime;
    Shape1.Update ;
    sleep(500);
    beep();
    Shape1.Brush.Color := clBtnFace;
    Shape1.Update ;
    except on E: Exception do
    begin
    ShowMessage(E.Message);
    FS.Free
    end;
    End;
    Timer1.Enabled := B
    end;
    4.3指纹校验程序实现
    指纹校验不同于指纹采集,指纹校验程序需要通过指纹采集仪采集的指纹特征到数据库中进行查找符合特征的考生。本系统在校验之前将每个考生的指纹特征存储到事先定义的Templates中,
    procedure TFormverify.LoadTemplates(Copies: Integer);
    var
    Templates: T_HandleList;
    NumItems: integer;
    ItemSize: Integer;
    ItemBuf: array of Byte;
    aaa: TBlobStream;
    i: Integer;
    B: Boolean;
    begin
    B := Timer1.Enabled;
    Timer1.Enabled := false;
    --调取考生指纹信息
    with Qryzw Do
    Begin
    Close;
    Sql.Clear;
    Sql.Add ('select * from xx_ygzwxxb ');
    Open;
    NumItems := rowsaffected;
    Qryzwzwxx.Transliterate :=False;
    End;
    aaa := nil;
    Templates := nil;
    setlength(ksh,NumItems);
    SetLength(Templates, NumItems);
    i:=1;
    try
    while i <= NumItems do
    begin
    if (Qryzwzwcd.AsInteger<>0)Then
    Begin
    aaa := TBlobStream.Create(Qryzwzwxx as TblobField, bmread);
    ItemSize :=Qryzwzwcd.AsInteger ;
    SetLength(ItemBuf, ItemSize);
    aaa.Read(ItemBuf[0], ItemSize);
    Templates[i-1] := ya202.LoadTemplateFromMemory(ItemBuf[0], ItemSize);
    if Templates[i-1] = 0 then
    raise Exception.Create(Format('LoadTemplateFromMemory: %d', [YA202.LastErrorCode]));
    ksh[i-1]:=Qryzwygh.ASString;
    aaa.Free;
    End;
    Qryzw.Next ;
    i:=i+1;
    end;
    SetTemplates(Templates);
    except
    on E: Exception do begin
    ShowMessage(E.Message);
    aaa.Free
    end
    end;
    Timer1.Enabled := B
    end;
    然后,考生在进考场之前,通过指纹识别仪采集指纹,将采集的指纹特征与数据库中的指纹特征进行比对,验证考生身份。
    procedure TFormverify.ProcessImage(Image: Integer);
    var
    Template: Integer;
    S: String;
    i, R, MC: Integer;
    PT: T_ProcessTime;
    ER,CX,CY: Integer;
    begin
    if _InProcessImage then
    Exit;
    _InProcessImage := true;
    
    Msg1('提取指纹数据中...');
    Template := YA202.ExtractTemplate(Image);
    if Template <> 0 then
    begin
    YA202.GetImageProperties (Image,ER,CX,CY);
    If (ERTCX) OR (abs(CY)>TCY) Then
    Begin
    YA202.DeleteTemplate(Template);
    Msg1('请调整按指纹的姿势!',clRed);
    Sleep(1000);
    _InProcessImage := false ;
    Exit;
    End;
    Msg1('处理指纹数据中...');
    PT := T_ProcessTime.Create;
    S := '';
    MC := 0;
    YA202.SetTestTemplate(Template);
    PT.Update;
    ppksh := nil;
    for i := Low(__Templates) to High(__Templates) do
    begin
     R := YA202.MatchSampleTemplate(__Templates[i]);
    if R > bdxsd {Y_RCMD_MATCH_THRESHOLD} then
    begin
    Inc(MC);
    setlength(ppksh,Length(ppksh)+1);
    ppksh[High(ppksh)]:=ksh[i];
    end;
    end;
    If MC>0 Then
    Begin
    Labelzt.Caption :='指纹已匹配,请确认考勤!';
    Formxzyg.ShowModal ;
    End
    Else Labelzt.Caption :='指纹匹配不正确,请重新按指纹!';
    YA202.DeleteTemplate(Template);
    Shape1.Brush.Color := clLime;
    Shape1.Update ;
    sleep(500);
    Shape1.Brush.Color := clBtnFace;
    Shape1.Update ;
    end
    else
    Application.MessageBox ('系统错误!',Pchar(Caption),Mb_OK);
    _InProcessImage := false ;
    xskq;
    end;
    
    5 系统实现效果
    
    本系统在某次考试中实现,采集的考生共2112人,每个考生均采集2枚指纹,其中男生581人,女生1531人。整个指纹采集工作历时五天,平均指纹采集速度20秒/人,其中采集时间最短的为5秒,采集时间最长的为80秒。本系统共校验了2090人,其中通过指纹校验的人数为2079人,有12人未通过校验,校验的通过率为99.5%。在未通过校验的考生中有2个考生在采集时未采集到指纹,有4个考生因为手指脱皮严重,有6人因为采集时指纹采集不清晰而导致校验不通过。此次指纹校验的平均速度为6秒/人,大部分考生4-5秒钟即完成了校验,少部分考生因为不同的原因需要更长的时间来通过校验。
    本系统根据指纹识别技术实现识别参加各类考试的考生身份,系统功能全面,操作方便,有效的遏制了考试中考生替考的现象,降低了现代考试考务管理难度,提高了工作效率,为考务现代化提供了一种科学有效的方法。
    
    参考文献:
    [1] 坎图.Delphi7从入门到精通[M].罗征,译.北京:电子工业出版社,2003.
    [2] 张海卿,张占军.Delphi7实用编程100例[M].北京:中国铁道出版社,2003.
    [3] 牛汉民.Delphi7开发基础教程[M].北京:科学出版社,2005.
    [4] Vasani V.MySQL 完全手册――完全手册丛书[M].徐小青,路晓村,译.北京:电子工业出版社,2004.
    [5] 杜波依斯.MysQL权威指南(原书第2版) [M].杨涛,译.北京:机械工业出版社,2004.

转载请注明来源。原文地址:https://www.7428.cn/page/2018/0509/16221/
 与本篇相关的热门内容: