摘要:針對現(xiàn)今各類教育考試中替考等作弊問題,提出將指紋識別技術(shù)應(yīng)用到考試管理上,利用考生的指紋特征值來判別其真實身份,設(shè)計出基于指紋采集與校驗的考試管理系統(tǒng)體系結(jié)構(gòu),并解決在研究的過程中所遇到的關(guān)鍵問題,最后對整個系統(tǒng)進(jìn)行了實驗研究,驗證了該系統(tǒng)的可行性。
關(guān)鍵詞:指紋識別技術(shù);考試管理
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼: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 引言
在如今各類教育考試中,隨著高科技手段的發(fā)展,身份偽造的技術(shù)也愈加先進(jìn),替考也越來越成為考生作弊的一種常用手段。鑒別考生身份的真實性,也成為了當(dāng)前考試管理工作一大難點。目前,大多數(shù)地區(qū)對各類考試的考生的的管理還較落后,大多采用塑料卡片或紙片上印上考生姓名、照片等信息,由人工比對確定是否準(zhǔn)予進(jìn)入指定考場,其優(yōu)點是直接成本低,但也具有容易偽造、復(fù)制等不可克服的缺點。本系統(tǒng)通過指紋識別技術(shù),在考生報名時采集指紋特征存入數(shù)據(jù)庫,在考生進(jìn)入考場時校驗考生的指紋特征,從而達(dá)到鑒別考生身份的真實性。
2 指紋識別技術(shù)介紹
指紋識別技術(shù)是生物識別技術(shù)的一種,生物識別技術(shù)是通過人體的生物特征包括指紋、聲音、臉孔、視網(wǎng)膜、掌紋、骨架等等來進(jìn)行身份驗證的一種解決方案。它是通過獲取這些生物特征,并將之轉(zhuǎn)換為數(shù)字信息,存儲于計算機(jī)中,利用可靠的匹配算法來完成驗證與識別個人身份的過程。
指紋識別技術(shù)主要涉及四個功能:讀取指紋圖象、提取特征、保存數(shù)據(jù)和比對。在一開始,通過指紋讀取設(shè)備讀取到人體指紋的圖象,取到指紋圖象之后,要對原始圖象進(jìn)行初步的處理,使之更清晰。 接下來,指紋辨識軟件建立指紋的數(shù)字表示——特征數(shù)據(jù),一種單方向的轉(zhuǎn)換,可以從指紋轉(zhuǎn)換成特征數(shù)據(jù)但不能從特征數(shù)據(jù)轉(zhuǎn)換成為指紋,而兩枚不同的指紋不會產(chǎn)生相同的特征數(shù)據(jù)。軟件從指紋上找到被稱為“節(jié)點”的數(shù)據(jù)點,也就是那些指紋紋路的分叉、終止或打圈處的坐標(biāo)位置,這些點同時具有七種以上的唯一性特征。因為通常手指上平均具有70個節(jié)點,所以這種方法會產(chǎn)生大約490個數(shù)據(jù)。有的算法把節(jié)點和方向信息組合產(chǎn)生了更多的數(shù)據(jù),這些方向信息表明了各個節(jié)點之間的關(guān)系,也有的算法還處理整幅指紋圖像??傊?,這些數(shù)據(jù),通常稱為模板,保存為1K大小的記錄。最后,通過計算機(jī)模糊比較的方法,把兩個指紋的模板進(jìn)行比較,計算出它們的相似程度,最終得到兩個指紋的匹配結(jié)果。
3 系統(tǒng)設(shè)計
通過對需求的分析,本系統(tǒng)大致可以分為四個模塊,系統(tǒng)管理子模塊、采集子模塊、校驗子模塊和統(tǒng)計打印子模塊。系統(tǒng)的結(jié)果如圖1所示。
系統(tǒng)管理子模塊主要包含了用戶管理、權(quán)限管理、數(shù)據(jù)備份和數(shù)據(jù)恢復(fù)等功能。
采集子模塊主要包含了考生信息采集和考生指紋采集功能。考生信息采集方式為考生填涂報名信息卡,通過OMR設(shè)備采集至數(shù)據(jù)庫。指紋采集主要在考生報名后通過指紋采集設(shè)備,根據(jù)考生的報名信息準(zhǔn)確的將考生左、右手食指的指紋特征采集至數(shù)據(jù)庫。指紋采集流程圖如圖2所示。
校驗子模塊包含了考生信息查詢和考生指紋校驗功能??忌畔⒉樵児δ軐崿F(xiàn)了可以對考生報名信息和指紋采集信息進(jìn)行查詢。考生指紋校驗是在考生進(jìn)入考場前,通過指紋采集設(shè)備,實現(xiàn)了和報名時采集的考生指紋特征進(jìn)行比對校驗。指紋校驗流程圖如圖3所示。
統(tǒng)計打印子模塊包含了考生準(zhǔn)考證打印和考生報名信息統(tǒng)計功能。
4 系統(tǒng)實現(xiàn)
通過對系統(tǒng)的軟件需求、軟件規(guī)模和要求實現(xiàn)的功能分析,考慮到系統(tǒng)構(gòu)架要靈活實用,單機(jī)版、網(wǎng)絡(luò)版完全兼容, 便于短時間密集采集數(shù)據(jù), 要降低系統(tǒng)實施的復(fù)雜性和使用者的勞動強(qiáng)度。且由于經(jīng)費投入的問題系統(tǒng)要有較低的硬件要求, 整個系統(tǒng)采用Client/Server( 客戶/服務(wù)器) 工作模式, 以Mysql3.23.53 為后臺數(shù)據(jù)庫,Delphi7為前端開發(fā)工具。而前、后臺連接的中間件為BDE 與Mysql 專用數(shù)據(jù)接口。
4.1 關(guān)鍵問題和解決方案
指紋識別和校驗最主要的問題是拒真率和認(rèn)假率,拒真率(False Reject Rate,簡稱FRR):其含義是對于正式使用者的排他率。認(rèn)假率(False Accept Rate,簡稱FAR):其含義是對于非正式使用者的認(rèn)證率。本系統(tǒng)采用某公司先進(jìn)產(chǎn)品,其拒真率<0.02%,認(rèn)假率<0.0003%。拒真率(FRR) 其它性能指標(biāo)為:分辨率500dpi,指紋掃描時間0.1 s,指紋接受角度±30°,工作方式1:1 和1:N,傳感器有效面積18.2mm×12.8mm,通信接口USB。本系統(tǒng)通過該產(chǎn)品提供的SDK包,調(diào)用其DLL文件實現(xiàn)對考生的指紋的采集和校驗。
4.2 指紋采集程序?qū)崿F(xiàn)
首先定義函數(shù)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('設(shè)備校驗中 ...', clBlack);
YA202.CalibrateSensor
end;
if __CalibrateCount = 15 then __CalibrateCount := 0;
result := true
end else
result := 1
end;
用于初始化指紋識別儀,其次,根據(jù)選定的學(xué)?;蚩忌柗秶葪l件從數(shù)據(jù)庫選出需要進(jìn)行指紋采集的考生基本信息。根據(jù)選定的順序,考生依次進(jìn)行指紋采集,考生將食指按住指紋采集儀,系統(tǒng)調(diào)用
根據(jù)form上timer控件實施調(diào)用函數(shù)
procedure Tformzwcj.Timer1Timer(Sender: TObject);
var
Image: Integer;
begin
if dqcjcs>cjcs Then--如果當(dāng)前采集次數(shù)大于采集次數(shù)就退出
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 := 1;
Timer1.Enabled := 1;
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('提取指紋數(shù)據(jù)中...');
Template := YA202.ExtractTemplate(Image);--提取指紋采集儀采集的圖像
if Template <> 0 then
begin
Msg1('處理指紋數(shù)據(jù)中...');
SetTemplates(Template);
//__Templates[0] := Template;
YA202.GetImageProperties (Image,ER,CX,CY);--取得指紋圖像特征
If (ER
Begin
Msg1('請調(diào)整按指紋的姿勢!',clRed);
Sleep(1000);
_InProcessImage := 1 ;
Exit;
End;
Ac_SaveTemplatesExecute(self);
end
else
Msg1('系統(tǒng)錯誤!');
_InProcessImage := 1 ;
If (Editksh.CanFocus) And (cjcs=0) Then
Begin
Editksh.SelectAll ;
EditKsh.SetFocus
End;
end;
最后,采集的指紋信息存儲到系統(tǒng)的數(shù)據(jù)庫和圖像文件中。
procedure Tformzwcj.Ac_SaveTemplatesExecute(Sender: TObject);
var
ItemSize: Integer;
ItemBuf: array of Byte;
FS: TBlobStream;
B: Boolean;
begin
B := Timer1.Enabled;
Timer1.Enabled := 1;
--判斷考生是否已經(jīng)采集過指紋
If (Qryxszw.AsString >'0') and (dqcjcs=1) Then
If Application.MessageBox ('該考生已經(jīng)有指紋信息,是否覆蓋!',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 (' 1,0,1,''0'','''+yhdm+''',sysdate(),'''+getfingerpos+''',1,1) ');
Try
Qryrk.Execsql;
Except
Application.MessageBox ('數(shù)據(jù)庫存儲失敗!',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 :='指紋數(shù)據(jù)保存成功';
If dqcjcs<=cjcs Then
Begin
msg1('現(xiàn)在將采集考生下一枚指紋!');
RB7.Checked :=True;
End
Else
Begin
msg1('現(xiàn)在將采集下一個考生指紋!');
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指紋校驗程序?qū)崿F(xiàn)
指紋校驗不同于指紋采集,指紋校驗程序需要通過指紋采集儀采集的指紋特征到數(shù)據(jù)庫中進(jìn)行查找符合特征的考生。本系統(tǒng)在校驗之前將每個考生的指紋特征存儲到事先定義的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 := 1;
--調(diào)取考生指紋信息
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;
然后,考生在進(jìn)考場之前,通過指紋識別儀采集指紋,將采集的指紋特征與數(shù)據(jù)庫中的指紋特征進(jìn)行比對,驗證考生身份。
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('提取指紋數(shù)據(jù)中...');
Template := YA202.ExtractTemplate(Image);
if Template <> 0 then
begin
YA202.GetImageProperties (Image,ER,CX,CY);
If (ER
Begin
YA202.DeleteTemplate(Template);
Msg1('請調(diào)整按指紋的姿勢!',clRed);
Sleep(1000);
_InProcessImage := 1 ;
Exit;
End;
Msg1('處理指紋數(shù)據(jù)中...');
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 :='指紋已匹配,請確認(rèn)考勤!';
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 ('系統(tǒng)錯誤!',Pchar(Caption),Mb_OK);
_InProcessImage := 1 ;
xskq;
end;
5 系統(tǒng)實現(xiàn)效果
本系統(tǒng)在某次考試中實現(xiàn),采集的考生共2112人,每個考生均采集2枚指紋,其中男生581人,女生1531人。整個指紋采集工作歷時五天,平均指紋采集速度20秒/人,其中采集時間最短的為5秒,采集時間最長的為80秒。本系統(tǒng)共校驗了2090人,其中通過指紋校驗的人數(shù)為2079人,有12人未通過校驗,校驗的通過率為99.5%。在未通過校驗的考生中有2個考生在采集時未采集到指紋,有4個考生因為手指脫皮嚴(yán)重,有6人因為采集時指紋采集不清晰而導(dǎo)致校驗不通過。此次指紋校驗的平均速度為6秒/人,大部分考生4-5秒鐘即完成了校驗,少部分考生因為不同的原因需要更長的時間來通過校驗。
本系統(tǒng)根據(jù)指紋識別技術(shù)實現(xiàn)識別參加各類考試的考生身份,系統(tǒng)功能全面,操作方便,有效的遏制了考試中考生替考的現(xiàn)象,降低了現(xiàn)代考試考務(wù)管理難度,提高了工作效率,為考務(wù)現(xiàn)代化提供了一種科學(xué)有效的方法。
參考文獻(xiàn):
[1] 坎圖.Delphi7從入門到精通[M].羅征,譯.北京:電子工業(yè)出版社,2003.
[2] 張海卿,張占軍.Delphi7實用編程100例[M].北京:中國鐵道出版社,2003.
[3] 牛漢民.Delphi7開發(fā)基礎(chǔ)教程[M].北京:科學(xué)出版社,2005.
[4] Vasani V.MySQL 完全手冊——完全手冊叢書[M].徐小青,路曉村,譯.北京:電子工業(yè)出版社,2004.
[5] 杜波依斯.MysQL權(quán)威指南(原書第2版) [M].楊濤,譯.北京:機(jī)械工業(yè)出版社,2004.