高中时,有一次分班,来了位新同学,男生,聪明,学习好,个子比我还矮,浑身透着精明。闲聊中,他说会看手相。这些东西在我看来无非是哄骗女孩子的把戏,于是我故意问他“为什么不给自己看看?”他伸出左手,我看过去大吃一惊,只见他手上如同蚯蚓般的疤痕沟壑综合,掌纹早已不见踪影 ……. 后来听说江湖上的说法:知晓未来的人上帝会故意让他”缺一门”,算是特别的记号。
指纹具有唯一性【参考1】,这就使得它可以作为身份识别的特征,除此之外还有人体测量(基本原则是:每个人的骨骼结构和尺寸都不一样,并且从20岁起,人的骨骼几乎保持不变。据此,测量身高、坐高、臂长、头长、头宽、耳长、耳宽、左中指和左小指的长度、左脚长度等数十项指标,来区分个体【参考2】),相比之下指纹更简单和可靠。 一般情况下,人体会分泌油脂,这使得指纹痕迹会附着在一些光滑的物体上。我们也经常在各种影片中看到使用指纹来进行侦破。
我入手的是 FM-70 光学指纹模块,可能是因为玩的人比较少,淘宝价格在110左右,算是比较贵的模块。
使用上来说,使用指纹工作之前,需要进行指纹的“登记注册”。我不清楚具体的算法,不过根据一些文献推断,方法提取你指纹上的特征,比如:纹路有多少分叉之类的。从这里也能看出,人类识别方法和计算机的处理方法有明显的不同。几天前,在阅读指纹的文档时,我还看到一篇教如何用手指识别麻将牌的方法,搓麻将时摸到来牌不用看就知道是什么会让你在牌桌上的气势更胜一筹。具体的方法并不是让你描述和想象摸到的图形,而是进行特征识别。比方说,摸到圆滚滚的,应该是一饼;摸到一横,应该是一万;倘若什么都没有,一定是白板。登记过程与此类似,模块会将你的指纹特征总结成256Bytes的信息。获取两次这样的信息即可组成一个512 Bytes的“指纹模板”。最终的存储,比对和搜索都是通过指纹特征来实现的。 该模块在使用上,有两种处理过程:登记指纹的过程和匹配搜索指纹的过程(这个过程又分为指纹对比1:1和指纹搜索1:N两种方式)。 下面再介绍基本的技术指标【参考3】。 首先:电气特性方面,供电电压 3.8-7V,这意味着3.3v的Arduino无法驱动.工作电流<65mA,看起来我们也不能直接用IO供电了(Arduino Uno IO Pin最大输出在40ma) ,但是直接Uno 上面的5V 是可以的。 特征文件 256字节,前面提到过;模板文件是 512字节;一共可以存储1000个指纹模板。安全等级一共有5个。接口是串口,默认是57600bps。 系统资源: 每次扫描指纹,会生成一个 256x288的图像,因此模块内有 72K Byte 大小的存放这个图像的RAM,称作图像缓冲区ImageBuffer。这个ImageBuffer可以通过串口进行下载,比如:你对这个模块的算法不满意,希望用自己的算法处理提取特征,即可把指纹图像下载到PC上;这个ImageBuffer还支持上传的内容。比如:你之前存过指纹的原始照片,就可以传进去让模块提取特征。 除此之外,还有2个 512 Bytes的特征文件缓冲区CharBuffer1和CharBuffer2。 特别注意,上面的这些缓冲区断电后不保存内容。 在模块的Flash空间上有指纹模板存放区,又叫做指纹库。这个区域掉电后内容不丢失。前面提到,这个空间可以存放1000个指纹的信息。 下面我们就进行简单的实验测试一下模块。根据Spec,我们选择 0x50/0x51,分别是打开背景灯和关闭背景灯的命令。连接方法是使用USB转串口模块,指纹模块使用串口输出的5v电。查阅Datasheet开灯和关灯的指令分别为下面的两条。特别注意的是:指令Checksum的计算和发送高低位的顺序。 OpenLed EF 01 FF FF FF FF 01 00 03 50 00 54 CloseLed EF 01 FF FF FF FF 01 00 03 51 00 55 我使用指纹模块默认的比特率 56700,然后每次发送指令(绿色框标记)后还会有一个返回值(蓝色框)。
这是开灯之后的照片。
有了指纹模块,我们可以用来鉴别用户的身份,从而会有很多有意思的玩法,后面我会继续介绍。 参考: 3.光学指纹模块用户手册
|