使用树莓派进行面部检测与识别
摘要
在当今世界,面部识别是安全与监控领域的重要组成部分。因此,需要一种高效且成本低廉的系统。我们的目标是探索基于树莓派的面部识别系统的可行性,使用传统的面部检测和识别技术,如哈尔检测和主成分分析。本文旨在将面部识别提升到一个新的水平,使该系统能够替代密码和射频IC卡,用于高安全系统和建筑物的访问控制。通过使用树莓派套件,我们力求使系统具备高性能、低成本且易于使用的特性。
关键词 —面部识别,面部检测,哈尔检测,主成分分析,树莓派
1. 引言
信息时代正在迅速改变交易的完成方式。人们迫切需要一种更快、更准确的用户识别与身份验证方法。
面部识别已成为最重要的用户识别方法之一。文献调查统计显示,面部识别系统的研究正处于蓬勃发展的时期,在过去四十年中,该领域的研究呈指数级增长 [1]。
面部识别技术通过智能计算模拟人眼的面部检测能力,创建包含70个节点的“面部簇”。从面部提取特征并保存为模板,然后将这些模板与检测到的面部进行比对。在本研究中,我们将液晶显示屏、摄像头和电机连接到树莓派板上。我们开发了一个实时应用程序,将扫描结果与存储在树莓派中的记录进行比较,从而用作门禁通行证,显示被检测人员的姓名。
在液晶显示屏上显示,并且电机将旋转以指示门的开启和关闭。
2. 使用Haar级联的面部检测
基于Haar特征的级联分类器进行物体检测是一种由保罗·维奥拉和迈克尔·琼斯提出的一种有效方法[2, 3]。
这是一种基于自适应机器学习的方法,其中级联函数通过大量正样本图像(正向图像)和负样本图像(负向图像)进行训练。然后该函数被用于在其他图像中检测物体。最初,该算法需要大量的正样本图像(人脸图像)和负样本图像(非人脸图像)来训练分类器。然后从中提取特征。
每个特征是通过从黑色矩形区域下的像素总和中减去白色矩形区域下的像素总和得到的一个单一数值。然后使用每个核的所有可能大小和位置来计算大量特征。为了计算每个特征,需找到白色和黑色矩形区域下的像素总和 [2, 3]。
3. 使用特征脸方法的人脸识别
此处使用的面部识别算法是主成分分析(PCA)。
它涉及一种数学方法,通过正交变换[3]将一组可能相关的变量转换为一组不相关的变量,称为主成分。
特征脸方法有助于减小识别测试图像所需的数据库大小。根据阈值决定是否保留从特征向量协方差矩阵计算出的特征值,从而构建人脸空间[3, 4,和5]。通过计算权重和欧氏距离进行比较,找到匹配结果[5]。这种传统的特征脸方法已被集成到树莓派的ARM Cortex中,利用Python代码中的面部识别模块实现面部识别。
4. 方法
该系统的主要功能可分为以下几个步骤。
a. 使用连接到树莓派板ARM Cortex的摄像头进行人脸注册和检测。
b. 在液晶显示屏以及运行在VGA(视频图形阵列)显示器上的终端上显示匹配状态。
c. 使用Python语言进行编程。该代码导入了一些模块,以实现面部识别、GPIO模块等功能。
d. 在获得当前状态后,驱动电机顺时针和逆时针方向转动。
识别和认证技术通过以下四个阶段进行操作:[6]
a. 捕获:在注册以及识别或验证过程中,系统会捕获物理或行为样本
b. 提取:从样本中提取唯一数据,并创建模板
c. 比较:将该模板与现有样本进行比较
d. 匹配/不匹配:系统判断从新样本中提取的特征是否匹配,并相应地接受/拒绝
输入/输出模块与树莓派2连接。输入部分,键盘和鼠标用于向树莓派传递命令,网络摄像头用于捕获图像,图像存储在安全数字卡中,并用于与数据库中存储的图像进行比对。
另一方面,输出部分包括液晶显示屏、直流电机及其驱动器L293D。此处使用的电机转速最高可达10,000转每分钟。
初始化系统所需的步骤包括创建一个数据库,然后使用该数据库作为参考来比对实时测试点。在启动树莓派后,需要考虑以下事项,例如连接液晶显示屏,以验证网络摄像头捕获的图像,该图像将用于检测目标实体。
向树莓派2输入基于Linux的命令,以将图像保存到外部SD卡中。为所捕获的图像维护了两个独立的目录,即正向和负向。正向目录保存无错误捕获的参考图像,而存在最小到最大缺陷的图像则存储在负向目录中。
5. 系统设计
硬件设计:
包括树莓派2开发套件、连接线缆、液晶显示屏、直流电机驱动 IC、直流电机、电源、USB键盘、USB鼠标和USB网络摄像头。
1. 树莓派2
树莓派是一种小型计算机,它在运行游戏、图像文件和文档时表现出较高的效率。可以根据用户需求以不同的配置进行生产。
它的运行频率为700MHz,配备约256MB内存,并具有板载显卡功能。树莓派2被认为是少数低功耗中央处理器之一[7]。
树莓派2的基本布局包括 1. 输入/输出。 2. 内存 3. 中央处理器/图形处理器 4. USB集线器 5. 以太网 6. HDMI端口
2. 液晶显示屏
此处使用的液晶显示屏是16 x 2字符型液晶显示屏。它是一个非常基础的模块,克服了七段显示器以及多位段液晶显示屏的缺点。它包含命令寄存器用于执行用户定义的指令,以及数据寄存器用于在液晶显示屏上显示数据。
3. 直流电机驱动器
L293D 电机驱动器提供的电压范围为5伏至36伏,每个通道的输出电流为1安培。L293D提供双向电流,并可在高达70摄氏度的温度下运行。
4. 直流电机
通过改变电压水平可以调节电机的转速。此处电机以10000转/分钟的速度顺时针和逆时针方向旋转,分别代表闸门的开启和关闭。
软件设计:
对于硬件设置的编码,使用Python语言[8]。要访问编辑器需要Linux终端。面部检测和识别部分通过以下特定的Linux命令来完成:
• sudo su # 切换到根用户。
• python capture-positive.py # 用于创建图像数据库。
• ctrl+c # 用于在采集到所需数量的人脸图像后,通过键盘中断停止图像采集。
• python train.py # 用于训练捕获的图像,并从中提取特征,通过将人脸(正样本图像)与背景或非人脸图像(负样本图像)分离,从而生成一个.xml文件。
• python project2.py # 用于检测并识别出现在网络摄像头前的是哪个人脸。它计算置信度值并匹配标志状态。如果某个人脸连续10次对应某个标志,则系统将识别该人脸,并在终端和液晶显示屏上显示“在场”状态,同时电机顺时针旋转15秒,然后逆时针旋转5秒,表示门的开启和关闭。
6. 输出结果
为了识别正确的面部,必须与现有的标签至少匹配10次。
当捕获人脸图像并进行训练后,会生成若干正向和负向图像。在获得置信度值后,首先会创建Capture.pgm、positive.png、negative.png和mean.png文件。
a. 负样本图像 b. 正样本图像
a. 均值图像 d. Capture.pgm
如果人脸被正确识别,则液晶显示屏会亮起并显示检测到的人名以及“Present”状态。同样,在个人计算机的终端上会显示人名和“presentOk”状态。
4万+

被折叠的 条评论
为什么被折叠?



