背景知识视频教程

深度学习:Python中的卷积神经网络 - 国外课栈​viadean.comf98f585fc69f41528468dd09b5e32df3.pngOpenCV深度学习简介 - 国外课栈​viadean.comad979ff5b81bc6ebbd16a1f6da7d629e.pngPython:用于预测性分析 - 国外课栈​viadean.com1d5d0563df1ce26e303e70f73a69649b.png

在本文中,您将学习如何使用以下方法在图像和视频流中执行面部识别:

OpenCV

Python

Deep Learning

如我们所见,我们今天将在此处使用的基于深度学习的面部嵌入技术(1)高度准确,并且(2)能够实时执行。

使用Python,OpenCV和深度学习

我们将简要讨论基于深度学习的面部识别的工作原理,包括“深度度量学习”的概念。

于此,我将安装实际执行面部识别所需的库。

最后,我们将对静止图像和视频流实施人脸识别。

我们将发现,我们的人脸识别实现将能够实时运行。

了解深度学习人脸识别嵌入

秘诀是一种称为深度度量学习的技术。

如果您有任何深度学习的经验,那么您就会知道我们通常会训练网络以:

接受单个输入图像

并为该图像输出分类/标签

但是,深度度量学习是不同的。

相反,我们试图输出单个标签(甚至是图像中对象的坐标/边界框),而是输出一个实值特征向量。

对于dlib面部识别网络,输出特征向量是128-d(即128个实值数字的列表),用于量化面部。使用三胞胎来训练网络:

在这里,我们向网络提供了三个图像:

这些图像中的两个是同一个人的示例面孔。

第三张图片是我们数据集中的一张随机面孔,与其他两张图片不是同一个人。

作为示例,让我们再次考虑上面的图,其中提供了三张图片:一张是Chad Smith,另一张是Will Ferrell。

我们的网络对人脸进行量化,为每个人构建128维嵌入(量化)。

通常的想法是,我们将调整神经网络的权重,以使两个Will Ferrel的128天测量值彼此更接近,而距Chad Smith的测量值则更远。

我们用于人脸识别的网络体系结构基于He等人的“深度残差图像识别学习”论文中的ResNet-34,但层数更少,滤镜数量减少了一半。

该网络本身是由戴维斯·金(Davis King)训练的,具有约300万张图像的数据集。在野外贴标(LFW)数据集上,网络与其他最新方法进行了比较,达到了99.38%的准确性。

Davis King(dlib的创建者)和Adam Geitgey(face_recognition模块的作者,我们将很快使用)都写了详细的文章,介绍基于深度学习的面部识别的工作原理:

深度度量学习提供高质量的人脸识别 (Davis)

深度学习的现代人脸识别(Adam)

我强烈建议您阅读以上文章,以获取有关深度学习面部嵌入如何工作的更多详细信息。

安装人脸识别库

为了使用Python和OpenCV执行人脸识别,我们需要安装两个附加的库:

dlib

face_recognition

由戴维斯·金(Davis King)维护的dlib库包含我们对“深度度量学习”的实现,该学习用于构建用于实际识别过程的人脸嵌入。

由Adam Geitgey创建的face_recognition库包含了dlib的面部识别功能,使其更易于使用。

假设您的系统上已安装OpenCV。

在此,开始安装dlib和face_recognition软件包。

注意:对于以下安装,如果您正在使用Python虚拟环境,请确保您在其中。 我强烈建议使用虚拟环境隔离项目-这是Python的最佳做法。 如果您已遵循OpenCV安装指南(并安装了virtualenv + virtualenvwrapper),则可以在安装dlib和face_recognition之前使用workon命令。

安装不支持GPU的dlib

安装支持GPU的dlib

安装face_recognition包

安装imutils

人脸识别数据集

人脸识别项目结构

使用OpenCV和深度学习对人脸进行编码

识别图像中的人脸

识别视频中的人脸

使用OpenCV和深度学习

使用Python,OpenCV和dlib的面部标志

实时面部标志检测

检测眼睛,鼻子,嘴唇和下颚

睡意检测

眨眼检测

脸部齐整

快速面部标志检测

源代码

面部识别 - 国外课栈​viadean.com5eea3ebfe01b664bca551457664d84ef.png

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐