在这文章中,将详细解释我是如何使用机器学习(ML)算法制作人脸识别锁系统的。
项目目的:该项目旨在通过使用人脸识别技术访问受限的私人房间或私人保险箱,仅限允许访问的人员。
如果想开门的人已经注册到系统中,系统识别到这个人,则开门;如果想开门的人未被识别,则系统不会开门,电子邮件会自动发送,并带有“陌生人要开门”字样和门口人员的照片。
注:本项目使用树莓派 3 Model B+ 板、电磁锁、5V 继电器板、USB 摄像头、12V 电池。
使用 5V 继电器板和 12V 电池将电磁门锁连接到树莓派。因为;树莓派的 GPIO 引脚可以输出 3.3V,但电磁锁需要 7-12V 才能工作。因此,我们需要使用外部电源和继电器来操作。
系统的总体结构:
USB 摄像头连接到树莓派板。
并且树莓派已连接到电源。
在我们自己的计算机上进行必要的安装后,树莓派与 VNC Viewer 连接。
在 Raspbian 操作系统上编写了人脸识别系统操作所需的 Python 代码。
1.人脸检测和数据收集过程在软件中完成。
2.对我们的模型进行训练。训练后,模型将能够检测人脸。
3.模型训练完成后,编写人脸识别代码,模型识别之前学习的人脸并打印人脸名称。
4.编写代码允许模型在发现陌生人的时候发送电子邮件。
5.模型为它认识的人解锁,但不为陌生人解锁,并通过从相机拍摄该人的图像发送电子邮件。
系统工作原理
继电器模块有六个引脚,一侧三个,另一侧三个。底部有三个引脚,信号、5V 和接地。我们将这些引脚与树莓派连接起来。另一边是 5V 继电器的 NC、COM 和 NO 输出引脚。在那里,我们将连接我们的 12V 电磁锁中的输出设备。
VCC 连接到树莓派上的 5V 引脚。
GND 连接到树莓派上的接地引脚。
IN 引脚连接到树莓派 GPIO26 引脚。
继电器、电池和电磁锁连接
我们暂时跳过这一部分,因为我将在下一篇文章中解释树莓派操作系统 raspbia 的安装过程:)
我们将使用 Python 的 openCV 和 numpy 库。
1.OpenCV
OpenCV(开源计算机视觉)是一个开源图像处理库。
OpenCV 库中有超过 2500 种用于图像处理和机器学习的算法。
可以轻松执行矩阵运算的 Numpy 库通常是仅次于 OpenCV 库的选择。
2.numpy
NumPy 是 Python 中科学计算的基本包。它是一个 Python 库,提供多维数组对象、各种派生对象(如矩阵)和一组例程,包括数学、逻辑、形状操作、排序、I/O,用于对数组进行快速操作。
3.HAAR级联分类器
Haar Cascade 是一种对象检测算法。
在最基本的意义上,首先将希望根据某种算法找到的对象引入计算机并训练模型。然后它用于检测其他图像中的对象。
OpenCV 提供了预训练的 Haar Cascade 算法,这些算法根据它们正在训练的图像组织成类别(面部、眼睛等)。
4.SMTP(简单邮件传输协议)
它是一种 TCP/IP 协议,用于在服务器之间发送和接收电子邮件。
服务器是专门设计用于响应互联网环境中的请求计算机的计算机。从这些在 Internet 上提供数据共享的特殊计算机发出请求的计算机称为客户端。由于这些高性能计算机在短时间内执行操作,因此整个过程在几秒钟内完成。
我们需要使用 smtplib 和 email 模块来使用 Python 发送邮件。邮件服务器使用 smtp 协议发送和接收电子邮件。为了发送邮件,我们需要连接到 smtp 邮件服务器。
在发布之前,你必须允许不太安全的应用程序连接到你的 Google 帐户。
树莓派 GPIO 操作
我们不仅可以将树莓派用作迷你电脑,还可以用作电子电路中的控制卡。我们通过对树莓派上的 GPIO 引脚进行编程来提供此功能。
Raspberry Pi 板上有 40 个 GPIO 引脚。其中2个5V,2个3.3V,8个GND,2个预留给EEPROM。其余 26 个引脚是输入/输出引脚。
GPIO 编号和 GPIO 引脚的物理顺序
增加 GPIO 库;
import RPi.GPIO as GPIO
设置GPIO引脚阵列;
树莓派的 GPIO 引脚命名有两种不同的序列,分别是 BCM 序列和 BOARD 序列。
BCM 阵列由分配给引脚的 GPIO 编号组成。这些不是序列号。
BOARD 阵列是引脚的物理编号。它由从 1 到 40 的连续数字组成。
在对 GPIO 引脚进行编程时,我们必须首先设置 GPIO 引脚数组。
以下代码用于此目的:
GPIO.setmode(GPIO.BCM)
或
GPIO.setmode(GPIO.BOARD)
将引脚设置为输入或输出
GPIO.setup(pin_numarasi,GPIO.IN) ## giriş pini
GPIO.setup(pin_numarasi,GPIO.OUT) ## çıkış pini
使引脚 Logic-1 或 Logic-0
GPIO.output(pin_numarasi,True)
##veya
GPIO.output(pin_numarasi,False)
至此,已经详细解释了安装和定义。
让我们在下一篇文章中研究最令人兴奋的部分,“人脸识别”代码!
参与评论
登录后参与讨论 0/1000