让我们在树莓派单板计算机上解锁生物识别控制功能吧!生物识别技术利用每个人独有的、不易复制的生理或行为特征进行身份验证。地球上每个人的指纹都是独一无二的,让我们一起来探索指纹的奇妙用途吧!本文将介绍如何以最快的方式将指纹扫描仪直接安装到树莓派单板计算机上,并进行编程和使用。本指南将帮助您快速在任何项目中添加指纹检测、采集和验证功能。
下图是今天我们将使用的指纹扫描仪,它连接到了树莓派4 Model B上,右侧则是扫描仪在3D打印壁挂式外壳中搜索指纹的情景。我们今天要探索的这款特定扫描仪是Adafruit光学指纹传感器,它配备了插座头电缆和电子元件。
其中一个组件是DSP(数字信号处理器)芯片,它负责该模块的所有渲染、计算、指纹特征查找和搜索工作。这款DSP芯片能够在板载闪存中存储300个独特指纹。这意味着,即使系统断电,硬件仍会记住所有已注册的指纹。

任何连接的微控制器(如Arduino Uno)或微处理器(如树莓派4 Model B)都可以通过TTL(UART)串行通信与其进行交互。发送的数据可以启动新指纹的注册过程、创建所采集指纹的数字图像或报告检测到的指纹。这意味着您可以使用指纹来控制与GPIO连接的硬件。GPIO(通用输入输出)引脚可用于控制几乎无限数量的传感器和机制,如用于解锁门的电磁阀、照亮您一天的LED灯或项目所需的任何组件。以下是我的《用树莓派单板计算机控制12V电磁阀》的指南,该电磁阀可轻松由Adafruit指纹扫描仪触发。
本指南将演示如何注册新指纹以及如何使用指纹控制GPIO连接的硬件。此外,还将展示如何拍摄指纹的数字图像。本指南的内容如下:
所需材料
硬件组装
软件设置
运行主指纹脚本
使用已知指纹脚本激活GPIO
后续步骤(创建扫描指纹的数字图像)
下载资源
此处创建的系统是一种生物识别认证形式。指纹认证会自动将用户的指纹与存储的指纹模板进行比较,以验证用户身份。目前主要有三种指纹识别器:光学、超声波和电容式。光学指纹传感器是传统方法,也是本指南中使用的方法。它依靠类似摄像头的设备拍摄放置在固定距离玻璃层上的指纹图像。为了增强安全性,一些光学传感器还配备了额外组件或运行简单的人工智能算法,以确认放置在读取器上的是活体手指。电容式指纹传感器常见于手机解锁。电容式传感器有两种类型:被动扫描,指纹上的凸起脊线构成电容器的另一极板;或主动扫描,传感器具有两个极板,指纹脊线会改变预期的电容。这些传感器需要特殊构造,以确保高压静电不会损坏传感电子元件。超声波指纹传感器是最新的指纹识别方法,仅在少数高端应用中出现。它们使用超声波来感知指纹的更深真皮层。这意味着,脏污或划伤的手指不会影响正确的指纹识别。
考验你英语听力的时候到了,你可以直接观看视频!
所需材料
以下是设置树莓派以使用光学指纹扫描仪所需的所有材料:
树莓派掌上计算机(我使用的是树莓派4 Model B 2GB,但使用较低配置的树莓派,如树莓派Zero 2,也能完美完成)
Adafruit指纹扫描仪
用于将系统连接到显示器的Micro-HDMI转HDMI线
鼠标和键盘
硬件组装
第一步是小心地将提供的电线与扫描仪上的8针1毫米间距连接器对齐并连接,如下图所示。请注意,不要接反。另外请注意,母连接器侧与板子不完全平行,且较为脆弱。为防止损坏,请仅握住连接器部分,轻轻而稳固地将这两部分推在一起。连接后,电线不易脱落。
然后,我们将把从扫描仪引出的四根电线连接到树莓派单板计算机上,连接方式与下图完全相同。如果需要,请右键点击图片并在新标签页中打开,以便轻松放大图片。有四根电线从指纹扫描仪中引出,它们将不与任何东西连接。红线为3.3V电源,应连接到树莓派的3.3V电源引脚上。白线连接到树莓派的TX GPIO 14引脚。黄线连接到树莓派的RX GPIO 15引脚。黑线为接地线,应连接到树莓派的接地引脚上。如果将此指纹扫描仪连接到5V电源,它将会损坏,因此在启动系统前,请务必再次检查是否已将电源连接到3.3V引脚上。
完成上述步骤后,插入刷有树莓派操作系统的Micro-SD卡,并将其作为台式计算机使用。添加鼠标、键盘和HDMI显示器。然后,通过插入USB-C电源来启动树莓派系统。一旦启动,指纹扫描仪将立即亮起。请参见下图,其中展示了所有这些部件以及鼠标和键盘的连接情况。
至此,硬件组装完成!
软件设置
在全新的树莓派操作系统版本上,需要安装一些软件包并更改设置。这将使指纹扫描仪与树莓派之间能够进行正确通信。将电源接入系统并完成(新的)首次启动向导后,您将看到树莓派桌面。如果您在此阶段需要额外帮助,请点击此处查看相关指南。
第一步是开启串口连接功能,这将使树莓派单板计算机能够通过TTL UART串行通信与指纹扫描仪进行通信。默认情况下,在树莓派操作系统上,此通信方法是关闭的。要开启此功能,请打开树莓派配置菜单(通过左上角菜单并滚动到首选项找到),然后在接口选项卡下启用串口连接。在此处,请确保串行控制台已关闭。请参见下图中的操作。
现在,系统已重新启动并连接到互联网,请通过点击屏幕左上角的黑色按钮打开一个新的终端窗口。这将打开一个终端窗口。请参见下图中的操作以及指向已点击的终端按钮的大红箭头。
这个终端窗口将使我们能够从互联网上下载所需的软件包。现在,在终端中输入以下命令并按回车键,以获取所需的所有软件包。如果提示继续/确认安装,请输入Y并按回车键。请参见下文中的一个命令下载并请求确认的图像。
sudo pip3 install adafruit-circuitpython-fingerprint pyfingerprintgitclonehttps://github.com/adafruit/Adafruit_CircuitPython_Fingerprint.gitgitclonehttps://github.com/bastianraschke/pyfingerprint.git
完成后,我们就已完全设置好树莓派单板计算机,以使其与指纹扫描仪配合使用。
运行主指纹脚本
如果您已按照上述软件部分的操作进行,那么我们要运行的Python脚本应该已经在系统上了。我们要运行的特定脚本名为fingerprint_simpletest_rpi.py。请参见下图中的脚本目录位置/home/pi/Adafruit_CircuitPython_Fingerprint/examples,以及该文件被右键点击并在Thonny IDE中打开的情况。请按照相同步骤操作,以便在Thonny IDE中打开此脚本。
现在,我们需要对fingerprint_simpletest_rpi.py Python脚本进行轻微调整,以便其能够与我们的设置配合使用。通过在行首添加#符号来注释掉第14行。通过删除#符号来取消注释第17行。确保在完成此操作后保存脚本。请参见下图中的操作。
完成上述步骤后,我们现在可以点击大大的绿色运行按钮了!这将向shell输出一些信息,并提供几个选项。让我们将手指注册到系统中。为此,请输入e并按回车键。然后,输入1并按回车键,以将此指纹索引为第一个。每个指纹都将有一个与之关联的索引号,您可以拥有300个索引指纹。请参见下文中的操作。
按下回车键后,它将引导您完成一个基于文本的向导,以添加新手指。当扫描仪亮起时,您需要将手指按在扫描仪上两次。按照文本提示操作,您的第一个指纹将在10秒内注册完成。
然后,我们可以通过测试系统来检查它是否已正确注册。在此阶段,请输入f并按回车键。然后,将同一根手指放在扫描仪上。确认shell输出的信息与我的相似,如下图所示。如果是这样,您就已成功注册了手指,并成功识别了您的指纹!太棒了!它甚至提供了一个0到255的置信度值。在我的情况下,我得到了183的置信度分数。仅当您的项目需要更高安全性时,才应将置信度分数纳入考虑。如果扫描仪确认检测到指纹,您可以对此充满信心。
使用已知指纹脚本激活GPIO
现在,让我们使用指纹来控制一些GPIO。我使用面包板将一个LED和电阻串联连接到树莓派单板计算机的GPIO21和接地引脚上。这里的目标是根据我们正确识别的指纹来点亮LED。GPIO是连接外部世界的门户,这个LED只是代表您想要连接的任何硬件的占位符。
脚本名为LED-Fingerprint-Control.py。您可以从下面复制并粘贴它,或者从页面底部的zip文件中下载本指南中提到的所有脚本。以前面的相同方式在Thonny IDE中打开它。
#!/usr/bin/env python# -*- coding: utf-8 -*-"""PyFingerprintOriginally a Bastian Raschke ExampleModified by Tim for GPIO LED Control"""importhashlibfrompyfingerprint.pyfingerprintimportPyFingerprintfrompyfingerprint.pyfingerprintimportFINGERPRINT_CHARBUFFER1#LED is attached to the GPIO numbered belowPin =21#Import Time, and set up the GPIO, stop warnings, and activate the LED GPIO as an output (defaults to LOW Voltage)importtimeimportRPi.GPIOasGPIOGPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)GPIO.setup(Pin, GPIO.OUT)## Search for a finger#### Tries to initialize the sensortry: f = PyFingerprint('/dev/ttyS0',57600,0xFFFFFFFF,0x00000000) if( f.verifyPassword() ==False): raiseValueError('The given fingerprint sensor password is wrong!')exceptExceptionase: print('The fingerprint sensor could not be initialized!') print('Exception message: '+str(e)) exit(1)## Gets some sensor informationprint('Currently used templates: '+str(f.getTemplateCount()) +'/'+str(f.getStorageCapacity()))## Tries to search the finger and calculate hashtry: print('Waiting for finger...') ## Wait that finger is read while( f.readImage() ==False): pass ## Converts read image to characteristics and stores it in charbuffer 1 f.convertImage(FINGERPRINT_CHARBUFFER1) ## Searchs template result = f.searchTemplate() positionNumber = result[0] accuracyScore = result[1] if( positionNumber == -1): print('No match found!') exit(0) #This Else statement is only reached when an Index Finger is Detected else: print('Found template at position #'+str(positionNumber)) print('The accuracy score is: '+str(accuracyScore))#Because we have reached this else statement we had detected an enrolled finger#This means we can now toggle the LED. This is done with the three lines below. GPIO.output(Pin, GPIO.HIGH) time.sleep(1) GPIO.output(Pin, GPIO.LOW) ## OPTIONAL stuff ## ## Loads the found template to charbuffer 1 f.loadTemplate(positionNumber, FINGERPRINT_CHARBUFFER1) ## Downloads the characteristics of template loaded in charbuffer 1 characterics =str(f.downloadCharacteristics(FINGERPRINT_CHARBUFFER1)).encode('utf-8') ## Hashes characteristics of template print('SHA-2 hash of template: '+ hashlib.sha256(characterics).hexdigest())exceptExceptionase: print('Operation failed!') print('Exception message: '+str(e)) exit(1)
在Thonny IDE中打开脚本后,您应该就可以开始操作了。如果遇到错误,请仔细检查脚本中任何出现/dev的地方是否都类似于/dev/ttyS0。这将定位到正确的通信串口。指纹扫描仪的灯将亮起,现在您可以将手指放在指纹扫描仪上了。一旦您这样做,它将尝试识别您的指纹,如果识别出已索引的指纹,它将点亮LED一秒。请参见下图中的操作。
现在,这不仅仅是一个LED,它可以很容易地变成一个用于解锁门或大门的电磁阀,一旦接收到正确的指纹,电磁阀就会打开。这只是两个想法,您可以将这个概念带到任何您想象的地方!以您的生物识别技术为控制杠杆。
后续步骤(创建扫描指纹的数字图像)
我真的很想看看通过指纹扫描仪看到的我的指纹图像是什么样的。脚本example_downloadimage.py可以在本文底部的可下载zip文件中找到,或者在下图下方完整写出。每当您运行此脚本(使用Thonny IDE,与以前相同)并将手指按在扫描仪上时,它将导出一个BMP格式的指纹图像。这大约需要10秒钟的时间。请参见下面(为安全起见已修改)的我的指纹图像!
#!/usr/bin/env python# -*- coding: utf-8 -*-#PyFingerprint##Copyright (C) 2015 Bastian Raschke#All rights reserved.importtempfilefrompyfingerprint.pyfingerprintimportPyFingerprint## Reads image and download it#### Tries to initialize the sensortry: f = PyFingerprint('/dev/ttyS0',57600,0xFFFFFFFF,0x00000000) if( f.verifyPassword() ==False): raiseValueError('The given fingerprint sensor password is wrong!')exceptExceptionase: print('The fingerprint sensor could not be initialized!') print('Exception message: '+str(e)) exit(1)## Gets some sensor informationprint('Currently used templates: '+str(f.getTemplateCount()) +'/'+str(f.getStorageCapacity()))## Tries to read image and download ittry: print('Waiting for finger...') ## Wait that finger is read while( f.readImage() ==False): pass print('Downloading image (this take a while)...') imageDestination = tempfile.gettempdir() +'/fingerprint.bmp' f.downloadImage(imageDestination) print('The image was saved to "'+ imageDestination +'".')exceptExceptionase: print('Operation failed!') print('Exception message: '+str(e)) exit(1)
非常感谢Bastian Raschke提供此脚本,要查看他的更多作品,请点击此处查看他的GitHub页面。
https://github.com/bastianraschke
掌握了这项技术,您很快就能收集到所有朋友的指纹了。因此,如果您有一天醒来,感觉每个人都被一个长得一模一样的双胞胎替换了,您可以使用指纹数据来证实或反驳这一假设。毕竟,同卵双胞胎的指纹并不匹配。
原文地址:
https://core-electronics.com.au/guides/raspberry-pi/fingerprint-scanner-raspberry-pi/
-
传感器
+关注
关注
2567文章
53278浏览量
770020 -
指纹识别
+关注
关注
43文章
1749浏览量
103502 -
树莓派
+关注
关注
122文章
2054浏览量
107830
发布评论请先 登录
求助!!指纹识别。。。FPS200传感器
新唐指纹识别
【7寸HDMI显示屏申请】基于指纹识别的的智能门禁系统
【TG401_EVB开发板申请】基于arm的指纹识别算法实现
指纹识别技术原理及发展
求一种使用挂锁的指纹识别模块方案
手机指纹识别有什么用?
如何700元用树莓派自己做一个相机?

评论