嵌入式人工智能(13-基于树莓派4B的指纹识别-AS608)

1、指纹识别模块

指纹识别是一种生物识别技术,通过分析人体指纹的纹理特征来进行身份验证。每个人的指纹纹路都是独一无二的,通过将指纹与事先存储的指纹数据库进行比对,可以确定是否为同一人。指纹识别在安全领域得到广泛应用,例如手机指纹解锁、门禁系统和边境检查等。由于指纹识别准确度高、便捷快速,被认为是一种可靠的身份验证方法。

2、AS608指纹识别传感器

AS608指纹识别传感器是一种高性能的指纹识别模块。该模块采用高像素的光学传感器,能够快速、准确地识别指纹。它还配备了先进的算法,可以进行指纹图像的提取和比对。AS608指纹识别传感器具有以下特点:
(1)高性能:具备快速、准确的指纹识别能力,可以在极短的时间内完成指纹识别过程。
(2)高像素:采用高像素的光学传感器,能够捕捉到丰富的指纹信息,提高指纹识别的精确度。
(3)先进的算法:配备先进的指纹识别算法,可以对指纹图像进行提取和比对,提高识别的准确性和安全性。
(4)灵活应用:模块尺寸小巧,可以灵活嵌入各种设备中,如门禁系统、考勤机、安防设备等。
(5)高可靠性:具备良好的稳定性和抗干扰能力,适用于各种环境条件下的指纹识别。
总之,AS608指纹识别传感器是一种性能卓越的指纹识别模块,适用于各种应用场景,提供快速、准确的指纹识别功能。

仔细看下面的芯片,才能看清楚芯片是AS608。

3、AS608通过串口USB转换插树莓派USB口

请仔细看接线引脚说明。AS608的接线头有防呆口,插上即可,只用到4根线,VCC接USBToTTL的VCC(注意这里要接3.3V,否则容易损坏,将黄色的跳线帽连接5V与VCC引脚,AS608插到3.3上面),AS608的GND接USBToTTL的GND,AS608的TX接USBToTTL的RXD,AS608的RX接USBToTTL的TXD。接线完成后插入到树莓派的USB端口。

查看是否发现了设备,并且找到串口的设备号,该设备号为/dev/ttyUSB0 

 通过minicom软件设置下串口通信的波特率,我们设置小一点即可。sudo minicom -b 9600 -o -D /dev/ttyUSB0 

4、上位机测试程序

Windows系统下载一个上位机测试程序SynoDemo_v2.7,选择正确的串口,如果不知道你的串口号,到设备管理器里面查看。

我们可以先录入一个指纹,便于后续测试。

录入指纹:录入指纹就是录入到指纹库 点录入后选指纹ID号 选库里没有的 录好后指纹库会出现对应ID号指纹
连续录入:连续录入 就是连续录入指纹 ID号自动加1 连续录入
显示图像:勾选后指纹显示区域在录指纹后会显示指纹图片 去掉勾选后不显示
保持覆盖:勾选与去掉未发现什么区别 可交流讨论
指纹库:录好指纹后会有对应编号 也就是ID号
指纹处理:
单一对比:选中对应ID指纹 点单一对比后 把手指放到传感器上 ID号对应指纹和当前指纹一样 会显示对比通过
单一删除:选中ID指纹 点单一删除 当前指纹会被删除
搜索:点搜索 把手指放到传感器上 之后会在指纹库中找到与当前指纹一样的ID库指纹(前提是之前这个指纹有录入)在信息显示区域会显示对应ID号
连续搜索:同搜索 只是会不断去搜索
清空指纹库:同单一删除 只是这个会把所有指纹库全删除

录入指纹可以将波特率设置高点,不然写数据太慢。

5、基本指令

6、综合案例

由于在windows系统使用调试程序,将as608的指纹模块波特率设置为57600,注意这个串口的速度一定要和这个波特率匹配。

录入指纹等显示信息到OLED屏幕上,如果录入成功则LED灯亮1S,然后再检测,相当于指纹门禁啥的监控程序。

import binascii
import serial
import serial.tools.list_ports
import time
from PIL import Image  
from PIL import ImageDraw
from PIL import ImageFont
import RPi.GPIO as GPIO
import luma.oled as oled  
from luma.core.interface.serial import i2c    
from luma.oled.device import ssd1306  
from luma.core.render import canvas

#将GPIO编程方式设置为BOARD模式
GPIO.setmode(GPIO.BOARD)
#设置GPIO11输出模式
GPIO.setup(11,GPIO.OUT)

def load_device():
    WIDTH=128
    HEIGHT=64 
    # 创建I2C接口对象  
    serial = i2c(port=1, address=0x3C)  # 地址可能因显示屏型号而异,由命令行“sudo i2cdetect -y 1”得到
    # 创建OLED设备对象  
    device = ssd1306(serial, WIDTH, HEIGHT) 
    return device

def Oled_display(x,y,z):
	global device
	device = load_device()
	font = ImageFont.truetype('STKAITI.TTF',16)
	with canvas(device) as draw:
			draw.rectangle(device.bounding_box, outline=0, fill=0)
			draw.text((x,y),str(z),font=font, fill='white')
               
def recv(serial):
    while True:
        data = serial.read_all()
        if data == '':
            continue
        else:
            break
    return data

def Serial_Init():
    global serial
    serial = serial.Serial('/dev/ttyUSB0', 57600, timeout=0.5)  #/dev/ttyUSB0
    if serial.isOpen() :
        print("open success ")
    else :
        print("open failed   ")


if __name__ == '__main__':
    Serial_Init()
    try:
        while True:
            a = 'EF 01 FF FF FF FF 01 00 03 01 00 05'
            d = bytes.fromhex(a)
            serial.write(d)
            time.sleep(1)
            data =recv(serial)
            if data != b'' :
                data_con = str(binascii.b2a_hex(data))[20:22]
                if(data_con == '02'):
                    print("请按下手指")
                    GPIO.output(11,GPIO.HIGH)
                    Oled_display(0,0,"请按下手指")
                elif(data_con == '00'):
                    print("载入成功")
                    Oled_display(0,10,"载入成功")
                    buff = 'EF 01 FF FF FF FF 01 00 04 02 01 00 08'
                    buff = bytes.fromhex(buff)
                    serial.write(buff)
                    time.sleep(1)
                    buff_data = recv(serial)
                    buff_con = str(binascii.b2a_hex(buff_data))[20:22]
                    if(buff_con == '00'):
                        print("生成特征成功")
                        Oled_display(0,20,"生成特征成功")
                        serch = 'EF 01 FF FF FF FF 01 00 08 04 01 00 00 00 64 00 72'
                        serch = bytes.fromhex(serch)
                        serial.write(serch)
                        time.sleep(1)
                        serch_data = recv(serial)                  
                        serch_con = str(binascii.b2a_hex(serch_data))[20:22]
                        if (serch_con == '09'):
                            print("指纹不匹配")
                            Oled_display(0,30,"指纹不匹配 ")
                        elif(serch_con == '00'):
                            print("指纹匹配成功")
                            Oled_display(0,30,"指纹匹配成功")
                            GPIO.output(11,GPIO.LOW)
                            time.sleep(1)
                    #serial.close()
                    #exit()
                else:
                    print("不成功")
    except Exception as e:
        print(e)
    finally:
        serial.close()
        exit()
             

因为在设备指纹库里面我已经录入了一个指纹,ID为0,因此我在按下指纹时去库里比对正确,就返回指纹匹配成功。

AS608

7、其他

Python包有个Adafruit的CircuitPython Fingerprint指纹库,通过sudo pip install adafruit-circuitpython-fingerprint 安装

通过gitHub克隆Adafruit的CircuitPython Fingerprint脚本

git clone https://github.com/adafruit/Adafruit_CircuitPython_Fingerprint.git如果下载问题,可以到镜像站Links for adafruit-circuitpython-fingerprint下载adafruit-circuitpython-fingerprint-2.2.15.tar.gz,解压后也有examples的例子学习。注意树莓派的指纹案例文件名为fingerprint_simpletest_rpi.py

这样就可以录入、查找、删除指纹了。

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值