36

厉害吧!Python都能做指纹识别播报了

 5 years ago
source link: http://www.freebuf.com/articles/ics-articles/176990.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

指纹识别技术是目前最成熟且价格便宜的生物特征识别技术。目前来说指纹识别的技术应用最为广泛,我们不仅在门禁、考勤系统中可以看到指纹识别技术的身影,市场上有了更多指纹识别的应用:如笔记本电脑、手机、汽车、银行支付都可应用指纹识别的技术。

指纹识别技术把一个人同他的指纹对应起来,通过比较他的指纹和预先保存的指纹进行比较,就可以验证他的真实身份。每个人(包括指纹在内)皮肤纹路在图案、断点和交叉点上各不相同,是唯一的,依靠这种唯一性和稳定性,我们才能创造指纹识别技术。每个人包括指纹在内的皮肤纹路在图案、断点和交叉点上各不相同,呈现唯一性且终生不变。

下面带大家做一个自己的指纹识别系统——包括指纹图像获取、处理、特征提取和比对,把现场采集到的指纹与一个己经登记的指纹进行一对一的比对,从而来确认身份。

一、 实验器材

1.TPYBoard v 102开发板   1块

2.指纹识别模块  1块

3.语音播报模块  1块

mUZjii6.jpg!web

二、 AS608光学指纹识别模块

InIjeeJ.jpg!web

指纹模块为集成了光路和指纹处理部分的一体化指纹处理模块,具有体积小、功耗低、接口简单的特点,可靠性高、识别速度快、干湿手指适应性好,指纹搜索速度快。通讯接口为USB和UART两种通信接口。

1、指纹特征

指纹算法从获取的指纹图像中提取的特征,代表了指纹的信息。指纹的存储、比对和搜索等都是通过操作指纹特征来完成的。

2、指纹处理包含两个过程:指纹登录过程和指纹匹配过程[其中指纹匹配分为指纹比对(1:1)和指纹搜索(1:N)两种方式] 。

指纹登录时,对每一枚指纹录入 2 次,将 2 次录入的图像进行处理,合成模板存储于模块中。

指纹匹配时,通过指纹传感器,录入要验证指纹图像并进行处理,然后与模块中的指纹模板进行匹配比较(若与模块中指定的一个模板进行匹配,称为指纹比对方式,即 1:1 方式;若与多个模板进行匹配,称为指纹搜索方式,即1:N方式) ,模块给出匹配结果(通过或失败) 。

3、技术参数

供电电压: DC  3.3V

供电电流: 工作电流:<60mA

峰值电流:<60mA

指纹图像录入时间:<1.0秒

窗口面积: 15.3╳ 18.2 mm

分辨率:500dpi

三、SYN6288语音播报 模块

bYNZRre.jpg!web

SYN6288语音模块是通过异步串口接收待合成文本,实现文本到声音(TTS)的转换。它有以下功能特点:

支持任意中文文本的合成,可以采用GB2312、GBK、BIG5 和Unicode 四种编码方式;

具有文本智能分析处理功能,对常见的数值、电话号码、时间日期、度量衡符号等格式的文本;

可以自动对文本进行分析,判别文本中多音字的读法并合成正确的读音;

可实现10级数字音量控制,音量更大,更广;

内集成了77首声音提示音和14首和弦音乐;

支持多种文本控制标记,提升文本处理的正确率;

支持多种控制命令,包括:合成、停止、暂停合成、继续合成、改变波特率等;

支持多种方式查询芯片的工作状态;

两种通讯模式:芯片支持UART、SPI两种通讯方式;

支持Power Down 模式。使用控制命令可以使芯片进入Power Down 模式;

支持的通讯波特率:4800bps,9600bps,57600bps、115200bps。

四、 硬件接线图

下面带大家先把指纹模块和语音播报模块接起来,接线方法很简单,大家可以按照下面的接线方式将硬件连接起来。

TPYBoard v102 AS608光学指纹识别模块 SYN6288语音播报模块 3V3 U+ GND GND X1 RX X2 TX VIN VDD Y1 RXD Y2 TXD GND G

五、动手写代码

我们接线成功后,就要编写代码了,因为我们用到了指纹识别模块和语音播报模块,所以我们要动手编写AS608.py、syn6288.py和main.py。

1. 编写AS608.py脚本

from pyb import UART
from pyb import delay
import syn6288
import  pyb
class FIG:
def __init__(self,uart):
self.uart = UART(uart, 57600)
self.sendcmd(link)
self.sendcmd(readflash)
self.sendcmd(readmould)
self.sendcmd(readindex)
self.sendcmd(readindex1)
delay(500)

def sendcmd(self,cmd):
self.uart.write(head)
self.uart.write(cmd)
def searchfig(self):
hc=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
self.uart.read()
self.sendcmd(cmd_search)
hc=self.uart.read()
while hc[11]!=0xa:
self.sendcmd(cmd_search)
hc=self.uart.read()
self.sendcmd(cmd_upload)
def savefig(self,addr):
print('请按手指')
syn6288.sendspeak(6,9600,'请按手指'.encode('utf-8'))
self.searchfig()
self.sendcmd(cmd_gen1)
pyb.delay(2000)
print('请再按手指')
syn6288.sendspeak(6,9600,'请再按手指'.encode('utf-8'))
pyb.delay(1000)
self.searchfig()
self.sendcmd(cmd_gen2)
self.sendcmd(cmd_reg)
add=cmd_save+bytearray([addr,0,addr+0xe])
self.sendcmd(add)
print('存入成功')
syn6288.sendspeak(6,9600,'存入成功'.encode('utf-8'))
pyb.delay(1500)

def disfig(self):
print('请按手指')
syn6288.sendspeak(6,9600,'请按手指'.encode('utf-8'))
self.searchfig()
print('识别中')
syn6288.sendspeak(6,9600,'正在识别'.encode('utf-8'))
self.uart.read()
pyb.delay(20)
self.sendcmd(cmd_gen1)
self.sendcmd(cmd_dis)
pyb.delay(10)
hc=self.uart.read()
pyb.delay(10)
if hc[9]==9:
return 0
else :
return hc[11]

2. 编写syn6288.py脚本

from pyb import UART

def sendspeak(uart,baud,data):

u2=UART(uart,baud)

eec=0

buf=[0xfd,0x00,0,0x01,0x01]

buf[2]=len(data)+3

buf+=list(data)

for i in range(len(buf)):

eec^=int(buf[i])

buf.append(eec)

u2.write(bytearray(buf))

3. 编写main.py脚本

import pyb

import AS608

from pyb import UART

import syn6288

buf=[0xFD,0x00,0x07,0x01,0x01,0x5B,0x74,0x35,0x5D,0xBD]

u6=UART(6,9600)

u6.write(bytearray(buf))

fig=AS608.FIG(4)

fig.savefig(37)

user=fig.disfig()

if(user==0):

syn6288.sendspeak(6,9600,'读取失败'.encode('utf-8'))

print('读取失败')

else :

syn6288.sendspeak(6,9600,'读取成功'.encode('utf-8'))

print('找到用户',user)

模块和代码都准备好了,你只需要接起线来将代码写入即可,TPYBoard v102的程序写入方法超级简单,插入电脑会有个盘符,只需要将这3个脚本直接拖进盘符即可,然后rst开发板就完事了。

六、成果展示

这就是我们生活中的指纹识别系统的原理,通过采集指纹,保存指纹,把采集到的指纹同指纹数据库中的指纹逐一对比,从中找出与现场指纹相匹配的指纹的过程,用python开发一个应用真的是非常方便,语言简洁,上手快,库的种类很多,这只是很简单的硬件应用,再做一个页面,进行一些逻辑判断,就是很好玩的产品啦,大家可以动手一起来玩耍。

* 本文作者:_橙子 ゝ,转载请注明来自FreeBuf.COM


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK