人脸识别正变得越来越流行,我们大多数人甚至在没有意识到的情况下就已经在使用它。无论是简单的Facebook Tag建议或Snapchat过滤器,还是高级机场安全监控,Face Recognition都已发挥了魔力。中国已开始在学校中使用面部识别来监视学生的出勤情况和行为。零售商店已开始使用“面部识别”对客户进行分类,并隔离有欺诈历史的人。随着更多变化的进行,毫无疑问,该技术将在不久的将来随处可见。
在本教程中,我们将学习如何使用Raspberry Pi上的OpenCV库构建自己的人脸识别系统。在便携式Raspberry Pi上安装此系统的优点是您可以将其安装在任何地方以用作监视系统。与所有人脸识别系统一样,本教程将涉及两个python脚本,一个是Trainer程序,该程序将分析特定人员的一组照片并创建数据集(YML文件)。第二个程序是Recognizer程序会检测到人脸,然后使用此YML文件识别人脸并提及人名。我们将在这里讨论的这两个程序都适用于Raspberry Pi(Linux),但也可以在Windows计算机上运行,但只需要进行很小的改动即可。我们已经有面向OpenCV入门的系列教程,您可以在此处查看所有OpenCV教程。
先决条件
如前所述,我们将使用OpenCV库检测和识别人脸。因此,在继续本教程之前,请确保在Pi上安装OpenCV库。另外,请使用2A适配器为Pi供电,然后通过HDMI电缆将其连接到显示器,因为我们将无法通过SSH获得视频输出。
另外,如果您对学习图像处理感兴趣,那么我将不解释OpenCV的工作原理,然后查看此OpenCV基础知识和高级图像处理教程。您还可以在此图像分割教程中了解轮廓,斑点检测等。
人脸识别如何与OpenCV一起使用
在开始之前,重要的是要了解面部检测和面部识别是两件事。在“人脸检测”中,仅检测到人的脸部时,软件不会知道该人是谁。在人脸识别中,该软件不仅可以检测到人脸,还可以识别人。现在,应该很清楚,我们需要在执行面部识别之前执行面部检测。对于我来说,我无法解释OpenCV如何精确地检测到人脸或任何其他物体。因此,如果您想知道可以按照此对象检测教程进行操作。
来自网络摄像头的视频馈送无非是一长串静态图像的更新。这些图像中的每一个只是在其各自位置放在一起的不同值像素的集合。那么程序如何从这些像素中检测出人脸并进一步识别其中的人呢?它背后有很多算法,试图解释它们不在本文的讨论范围之内,但是由于我们使用的是OpenCV库,因此在不深入了解概念的情况下执行面部识别非常简单
在OpenCV中使用级联分类器进行人脸检测
只有能够检测到脸部,我们才能识别或记住它。要检测诸如人脸之类的对象,OpenCV使用称为“分类器”的东西。这些分类器是经过预训练的数据集(XML文件),在我们的案例中,可用于检测特定对象的面部。您可以在此处了解有关人脸检测分类器的更多信息。除检测面部外,分类器还可以检测其他对象,例如鼻子,眼睛,车牌,微笑等。案例分类器的列表可以从下面的ZIP文件中下载。
Python中对象检测的分类器
另外,OpenCV还允许您创建自己的分类器,可通过训练级联分类器来检测图像中的任何其他对象。在本教程中,我们将使用一个名为“ haarcascade_frontalface_default.xml”的分类器,该分类器将从前面的位置检测人脸。我们会看到