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

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

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

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

一、实验器材

1.TPYBoard v 102开发板 1块

2.指纹识别模块 1块

3.语音播报模块 1块

二、AS608光学指纹识别模块

指纹模块为集成了光路和指纹处理部分的一体化指纹处理模块,具有体积小、功耗低、接口简单的特点,可靠性高、识别速度快、干湿手指适应性好,指纹搜索速度快。通讯接口为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语音播报**模块**

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 UARTfrom pyb import delayimport syn6288import  pybclass 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 0else :return hc[11]

2. 编写syn6288.py脚本

from pyb import UARTdef sendspeak(uart,baud,data):u2=UART(uart,baud)eec=0buf=[0xfd,0x00,0,0x01,0x01]buf[2]=len(data)+3buf+=list(data)for i in range(len(buf)):eec^=int(buf[i])buf.append(eec)u2.write(bytearray(buf))

3. 编写main.py脚本

import pybimport AS608from pyb import UARTimport 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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏峰会SaaS大佬云集

更新c++学习笔记 第一章

参加了几次笔试,发现有很多c++方面的问题被卡了。从现在开始进攻c++。之后会陆续更新c++学习笔记。

411
来自专栏程序猿DD

领域驱动设计

关于领域驱动设计 这篇文章参考了Eric Evans《领域驱动设计》一书以及Jimmy Nilsson《以C# .NET为例运用领域驱动设计和模式》,二者详细描...

4399
来自专栏程序员的SOD蜜

由微服务,领域事件,分布式事件谈“业务分析三维度理论”的实践

今天读了在微服务中使用领域事件 这篇文章,通过分布式,订单系统直接将事件推送给订阅此事件的账户系统,然后账户系统再处理,整个系统设计很好。 ? 不过,我觉得所...

22910
来自专栏HBStream流媒体与音视频技术

借用PortAudio采集和播放音频,实现双路混音器

4225
来自专栏GreenLeaves

Builder生成器(创建型模式)

一、使用场景: 1、假设要创建一个House设施,该设施的创建由若干个部分组成,而且这若干个部分经常变化。 如果用最直观的设计方式,每一个房屋部分的变化,都将导...

1956
来自专栏PPV课数据科学社区

【工具】深入对比数据科学工具箱:Python和R之争

文章目录 概述 应用场景对比 应用Python的场景 应用R的场景 数据流编程对比 参数传递 数据传输与解析 基本数据结构 MapReduce 矩阵操作 数据框...

3654
来自专栏数据科学与人工智能

【Python环境】Python 开发者节省时间的 10 个方法

Python 是一个美丽的语言,可以激发用户对它的爱。所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我推荐你尝试Pytho...

2577
来自专栏MyBlog

软件工程攻略

由于软件的开发存在这么多的问题, 其主要原因是规模太大并且缺少一种有效的方法来进行整个软件的开发 从而引出软件工程

1142
来自专栏C语言及其他语言

学习C语言编译器的选择

很多初学C语言的同学可能遇到的首要问题,就是选择编译器,用什么编程软件? 然而通过了解之后发现有那么多编程软件,什么VC6.0,Dev ,CodeBlocks,...

4017
来自专栏WeTest质量开放平台团队的专栏

60帧的丝般顺畅 - QQ飞车手游优化点滴

加入项目组的这段时间主要是承担性能优化这块的工作,同时也会去实现一些场景材质、特效材质以及工具。今天就性能优化这块分享一下个人的经验。

1252

扫码关注云+社区

领取腾讯云代金券