指纹识别系统设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指纹识别系统
程
序
设
计
实
习
报
告
设计名称:指纹识别系统程序设计
姓名:WYP
班级:软件08-1
指导老师:XXX
设计学时:6周
设计时间:2010年11月15日至2010年12月26日
目录
课程实习准备工作 (2)
程序实习项目及目的 (2)
一、项目 (2)
二、目的 (2)
程序设计内容 (2)
一、目标 (2)
二、功能 (3)
三、功能实现的基本思路 (3)
指纹识别系统的代码实现 (5)
结论 (12)
致谢 (13)
➢课程实习准备工作
1、确定课程设计题目,明确设计内容。
2、根据课程设计内容,查找有关编程资料。
3、根据设计内容的编程特点,准备实验环境和开发工具、文档书写工具。
➢程序实习项目及目的
一、项目
课题为:《指纹识别系统》
二、目的
当代社会,身份鉴别越来越重要,传统的身份鉴别方法(如身份证、信用卡、口令、密码等)可能会丢失、被盗或忘记。同时,传统的身份鉴别手段与用户并不惟一绑定,一旦他人获得,将拥有和失主同样的权力。而指纹特征是人所固有的生理特征,具有惟一性和终生不变性的特点。因此指纹认证在身份认证和身份识别中成为重要的手段。
➢程序设计内容
一、目标
本指纹识别系统主要是对用户指纹进行提取将采集的指纹模板
数据写入数据库,将实时采集的指纹图像作为指纹样板和数据库中的指纹模板逐一对,从而确认指纹样板身份。
二、功能
指纹识别系统是一个典型的模式识别系统,包括指纹图像获取、处理、特征提取和比对等模块。
指纹图像获取:通过专门的指纹采集仪可以采集活体指纹图像。目前,指纹采集仪主要有活体光学式、电容式和压感式。对于分辨率和采集面积等技术指标,公安行业已经形成了国际和国内标准,但其他还缺少统一标准。根据采集指纹面积大体可以分为滚动捺印指纹和平面捺印指纹,公安行业普遍采用滚动捺印指纹。另外,也可以通过扫描仪、数字相机等获取指纹图像。
指纹图像压缩:大容量的指纹数据库必须经过压缩后存储,以减少存储空间。
指纹图像处理:包括指纹区域检测、图像质量判断、方向图和频率估计、图像增强、指纹图像细化等。
本系统主要功能包括指纹采集、指纹识别、人员认证、人员登记。
三、功能实现的基本思路
(1)模块化设计
模块化是面向对象编程中的一个特征。把特定应用设计为一个模块,并从属性和方法两方面设计成为一个类模块。把类模块设置在不
同的名字空间就可以用这类相同的类对应不同的应用。即使添加一个同样的类也不会影响不同名字空间的其他同类成员。
(2)可扩充设计
面向对象编程从本质上支持可扩充性。在不影响或极少影响已有代码的情况下,添加加一种功能。它的好处是新加代码无需大量发动已有代码。
(3)封装设计
由于功能被封装在类中,且类是作为一个独立实体而存在的,因此只要提供该类库,用户就可在无需知道该方法类详细实现的细节情况下,调用该功能,以达到重用代码的目的。
➢指纹识别系统的代码实现
一、主要窗体的布局设计
二、主窗体功能的代码实现
void LiveMatch::OnButtonCreate() //创建指纹数据库
{
CFileDialog dlg(TRUE,"txt",".txt",OFN_HIDEREADONL Y | OFN_OVERWRITEPROMPT,"Text (*.txt)|*.TXT||");
if (dlg.DoModal() != IDOK) return;
DatabasePath = dlg.GetPathName();
FPA_CreateDatabase(DatabasePath, IndexList, &ListSize);
}
void LiveMatch::OnButtonSave() //保存指纹数据库
{
// TODO: Add your control notification handler code here
FPA_SaveDatabase(DatabasePath, IndexList, ListSize);
}
void LiveMatch::OnButtonLoad() //导入指纹数据库
{
CFileDialog dlg(TRUE,"txt",".txt",OFN_HIDEREADONL Y | OFN_OVERWRITEPROMPT,"Text (*.txt)|*.TXT||");
if (dlg.DoModal() != IDOK) return;
DatabasePath = dlg.GetPathName();
FPA_LoadDatabase(DatabasePath, IndexList, &ListSize);
CString msg;
msg.Format("Number of Record: %d", ListSize);
AfxMessageBox(msg);
}
void LiveMatch::OnButtonAdd() //保存指纹数据库
{
// TODO: Add your control notification handler code here
CString FolderName = DatabasePath;
int t = FolderName.ReverseFind('\\');
FolderName = FolderName.Left(t);
CString IDStr, FingerIndexStr;
GetDlgItemText(IDC_EDIT_ID, IDStr);
GetDlgItemText(IDC_EDIT_FINGERINDEX, FingerIndexStr);
int ID = atoi((LPCSTR)IDStr);
int FingerIndex = atoi((LPCSTR)FingerIndexStr);
int Size;
BYTE lpFeature[430];
FPA_AnalyzeFeature_File(LiveFilePath, lpFeature, &Size);
int ret = FPA_AddEntry(FolderName, ID, IndexList, &ListSize, FingerIndex, lpFeature);
if (ret == 0)
SetDlgItemText(IDC_STA TIC_ADDSTATUS, "添加成功");
else
SetDlgItemText(IDC_STA TIC_ADDSTATUS, "添加失败,请改变ID");
}
void LiveMatch::OnButtonIdentify() //开始识别
{
if (ListSize >= 0) bIdentify = true;
}
void LiveMatch::OnButtonNidentify() //停止识别
{
bIdentify = false;
}
void LiveMatch::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default