安徽商贸职业技术学院 秦晓安 王 睿
基于协同过滤的面向移动终端身份识别系统研究
安徽商贸职业技术学院 秦晓安 王 睿
由于人体指纹的不变性和唯一性,指纹识别成为最可靠的身份验证方法,基于指纹识别技术的身份验证系统可以替代传统的基于密码和证件的安全系统。本课题是基于协同过滤移动终端的Xscale平台,在平台系统下通过串口连接与指纹识别平台实现身份证识别功能,并做相关的软件硬件设计。
协同过滤;移动终端;Xscale平台;身份识别
1.1 指纹识别简介
指纹识别是二十世纪六十年代兴起的。近年来指纹识别技术的应用以爆炸性的速度增长,在欧美等发达国家,指纹识别技术的应用非常普遍,国内的应用则刚刚兴起,在考勤、身份防伪、银行、金融证券、医疗、社会保险等诸多领域的应用前景非常广阔。目前使用的指纹识别技术大多是基于计算机实现的,在嵌入式领域特别是需要可移动性和小型化的场合。这种技术的使用受到很大的限制,指纹平台就是针对嵌入式应用而专门设计的。将指纹识别算法软件与先进的嵌入式硬件紧密结合固化成一个整体,使其可靠性、安全性、以及使用的灵活性都得到加强。
1.2 指纹识别的原理
指纹特征点(Minutiae):
指纹的纹线到处都有开始点(终止点)及分枝点,我们称之为特征点,而每个特征点都有大约七个特征,人十个手指最少产生4900个独立可测量的特征。,每个指头平均有一百个特征点,但是发现5~10个相同即可断定这两枚指纹是出于同一个指头所遗留下的。借着特征点法来鉴定指纹,称之为「同定」,目前此法广泛的被世界各国所采用。
图1 指纹识别区域
指纹识别过程:
指纹识别由两个过程组成,即注册过程和识别过程。原理框图如下图所示。
在登记过程中,用户需要先采集指纹,然后计算机系统将自动进行特征提取,提取后的特征将作为模板保存在数据库或其它指定的地方。
在识别或验证阶段,用户首先也要采集指纹,然后DSP系统将自动进行特征提取,提取后的待验特征将与数据库中的模板进行比对,给出比对结果。在很多场合,用户可能要输入其它的一些辅助信息,以帮助系统进行匹配,如帐号、用户名等。
此过程是一个通用的过程,对所有的生物特征识别技术都适用。
2.1 软件部份
软件实现功能如图2所示:
图2 指纹识别过程
图3 软件概要设计
软件部份其功能主要是实现串口通信。
2.2 硬件部份
硬件实现功能如图4所示:
图4 硬件的概要设计
其主要功能是电平转换,还有对模块的接口扩展其门禁系统功能等。
指纹识别模块是采购深圳市十指科技有限公司,型号为TF-MDM1。这指纹识别模块主要是应用于第二次开发的指纹识别模块,模块内集有指纹的采集、指纹存储、指纹比对等功能,模块是使用TTL电平使用的,因为模块不是集成在实验箱平台上,要使得工作就要进行电平转换,通过串口达成传输。因调试的过程中只是搭了一个简单的电平转换电路,要使安全工作,所以为这模块设计了扩展底板。
3.1 指纹模块接口
图5 指纹模块接口
3.2 实验箱扩展接口的对联设计
指纹模块的实验箱的扩展接口相连如下图;是通过MAX232电平转换实现通信。
图6 扩展接口的对联设计
3.3 PCB设计
采用了双层板设计,铺铜层为地。在设计期间最因难是量尺寸。电路板采用5V供电,5V电源或USB接口都可取电。指纹模块的门禁系统功能实验设计了,能扩展实现PCB设计图如图7所示:
图7 PCB设计图
主要分成三个大类,分别是CZWDlg、CWComm、CZWtp;CZWDlg:用户通过这个窗口类实现了与应用程序的交互,通过这个界面控制和使用指纹机。
CZWComm:应用程序可以通过CZWComm类的实体来实现对指纹机的串口控制。
CZWtp:应用程序可以通过指纹机通信协议类获得指定的发送命令的数据包。
4.1 打开串口
Win32 中用于打开串口的API 函数为CreateFile,其原型为:
HANDLE CreateFile
(
LPCTSTR lpFileName, //将要打开的串口逻辑名,如COM1 或COM2
DWORD dwAccess, //指定串口访问的类型,可以是读取、写入或两者并列
DWORD dwShareMode, //指定共享属性,由于串口不能共享,该参数必须置为0
LPSECURITY_ATTRIBUTES lpsa, //引用安全性属性结构,缺省值为NULL
DWORD dwCreate, //创建标志,对串口操作该参数必须置为OPEN EXISTING
DWORD dwAttrsAndFlags, //属性描述,用于指定该串口是否可进行异步操作,
//FILE_FLAG_OVERLAPPED:可使用异步的I/O
HANDLE hTemplateFile //指向模板文件的句柄,对串口而言该参数必须置为NULL
);
例如,以下程序是工程以异步读写方式打开串口COM5:
HANDLE m_hCom;
m_hCom = CreateFile(“COM5:”, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
4.2 配置串口
配置串口是通过改变设备控制块DCB(Device Control Block) 的成员变量值来实现的,接收缓冲区和发送缓冲区的大小可通过SetupComm函数来设置。
以下程序将串口设置为:波特率为19200,数据位数为8位,停止位为1 位,无校验,接收缓冲区和发送缓冲区大小均为1024个字节。
DCB dcb = {sizeof(DCB), };
//设置通讯属性
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.BaudRate = CBR_19200;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (! SetCommState(m_hCom, &dcb))
{
SendNoti(-1,_T("串口配置失败.... "));
return 0;
}
if (!SetupComm(m_hCom, 1024, 1024))
{
SendNoti(-1,_T("设置串口缓冲失败.... "));
return 0;
}
4.3 超时设置
超时设置是通过改变COMMTIMEOUTS结构体的成员变量值来实现的,COMMTIMEOUTS的原型为:
typedef struct _COMMTIMEOUTS
{
DWORD ReadIntervalTimeout; //定义两个字符到达的最大时间间隔,单位:毫秒
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS, *LPCOMMTIMEOUTS;
设置超时的函数为SetCommTimeouts,其原型中接收COMMTIMEOUTS的指针为参数:
BOOL SetCommTimeouts
(
HANDLE hFile, // handle to communications device
LPCOMMTIMEOUTS lpCommTimeouts // pointer to comm time-out structure
);
以下是本程序将串口操作的超时的设定:
COMMTIMEOUTS stTimoutes = {100, 0, 2000, 0, 2000};
if (! SetCommTimeouts(m_hCom, &stTimoutes)) //设置超时
{
SendNoti(-1,_T("设置事件和超时时间失败.... "));
return 0;
}
4.4 读写串口
(1)读串口
对串口进行读取所用的函数和对文件进行读取所用的函数相同,读函数原型如下:
BOOL ReadFile
(
HANDLE hFile, // handle of fi le to read
LPVOID lpBuffer, // pointer to buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // pointer to number of bytes read
LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/O
);
(2)写串口
对串口进行写入所用的函数和对文件进行写入所用的函数相同,写函数原型如下:
BOOL WriteFile
(
HANDLE hFile, // handle to fi le to write to
LPCVOID lpBuffer, // pointer to data to write to fi le
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/O
);
4.5 关闭串口
利用API 函数实现串口通信时关闭串口非常简单,只需使用CreateFile 函数返回的句柄作为参数调用CloseHandle 即可:
BOOL CloseHandle(
HANDLE hObject // handle to object to close
);
总体来说面向移动终端的身份识别系统,难度不算太大,但也存在核心关键技术。相对来说,协议部份比较简单。难处在于是EVC++软件编程,虽然语言环境和VC++一样,但是实际运用起来还是比较复杂,基类库复杂繁多。硬件底板使用了新的布线方法,就是手工布线,工业上电路板布线都是是使用手工的,没用自动布线,因为自动布线不合理也不美观。
[1]刘青文.基于协同过滤的推荐算法研究[J].中国科学技术大学,2013-05-01.
[2]Greiner R.Structural Extension to Logistic Regression- discriminative Parameter Learning of Belief Net Classifiers.pdf. Machine Learning,2005.
[3]余泓.基于移动终端的移动互联网服务质量及用户行为分析研究[J].安徽大学,2014-04-01.
[4]孙瀚.基于指纹识别身份验证的数据采集系统设计与实现[J].电子科技大学,2005-02-01.
Research on mobile terminal identity recognition system based on collaborative f i ltering
Qin Xiao-an,Wang Rui
(Anhui Business College of Vocational Technology,Anhui Wuhu 241002)
Due to the uniqueness and invariance of the fi ngerprint, fi ngerprint recognition has become the most reliable metho d of authentication, security system can replace the password and certi fi cate authentication system based on fi ngerprint identi fi cation technology. This topic is based on collaborative fi ltering mobile terminal Xscale platform, in the platform system through the serial port connection and fi ngerprint identi fi cation platform to realize the ID card recognition function, and make the relevant software and hardware design.
Collaborative fi ltering ;Mobile terminal; Xscale platform; identity
秦晓安(1982-),男,安徽明光人,安徽商贸职业技术学院,硕士,讲师,主要从事数据库、程序算法方面的研究。
安徽省高校自然科学研究重点项目,项目编号:KJ2017A590;安徽省高校自然科学研究一般项目,项目编号:KJSM201602;安徽商贸职业技术学院“三平台两基地”2017 年应用研究项目,项目编号:2017ZDX04。