人脸识别的简单介绍(含Python代码)
介绍
你是否意识到,每当你上传照片到Facebook上,平台都会用人脸识别算法来识别图片中的人物?目前还有一些政府在用人脸识别技术来识别和抓捕罪犯。此外,最常见的应用就是通过自己的脸部解锁手机。
计算机视觉的子领域应用得非常广泛,并且全球很多商业活动都已经从中获益。人脸识别模型的使用在接下来的几年内还会继续增长,所以一起来了解如何从零开始构建人脸识别模型吧!
本文首先会介绍人脸识别模型的内部工作原理。随后结合一个简单的案例,我们将通过Python进行案例实践。在本文的最后部分,你将完成你的第一个人脸识别模型!
目录
理解人脸识别的工作原理
案例学习
Python应用
理解Python代码
人脸识别算法的应用
理解人脸识别的工作原理
为了理解人脸识别算法工作原理,我们首先来了解一下特征向量的概念。此处的特征向量指机器学习的概念,不同于矩阵理论。)
(译者注:
每个机器学习算法都会将数据集作为输入,并从中学习经验。算法会遍历数据并识别数据中的模式。例如,假定我们希望识别指定图片中人物的脸,很多物体是可以看作模式的:
脸部的长度/宽度。
由于图片比例会被调整,长度和高度可能并不可靠。然而,在放缩图片后,比例是保持不变的——脸部长度和宽度的比例不会改变。
脸部肤色。
脸上局部细节的宽度,如嘴,鼻子等。
显而易见,此时存在一个模式——不同的脸有不同的维度,相似的脸有相似的维度。有挑战性的是需要将特定的脸转为数字,因为机器学习算法只能理解数字。表示一张脸的数字(或训练集中的一个元素)可以称为特征向量。一个特征向量包括特定顺序的各种数字。
举一个简单的例子,我们可以将一张脸映射到一个特征向量上。特征向量由不同的特征组成,如:
脸的长度(cm)
脸的宽度(cm)
脸的平均肤色(R,G,B)
唇部宽度(cm)
鼻子长度(cm)
当给定一个图片时,我们可以标注不同的特征并将其转化为如下的特征向量:
如此一来,我们的图片现在被转化为一个向量,可以表示为(23.1,15.8,255,224,189,5.2,4.4)。当然我们还可以从图片中衍生出无数的其他特征(如,头发颜色,胡须,眼镜等)。然而在这个简单的例子中,我们只考虑这五个简单的特征。
现在,一旦我们将每个图片解码为特征向量,问题就变得更简单。明显地,当我们使用同一个人的两张面部图片时,提取的特征向量会非常相似。换言之,两个特征向量的“距离”就变得非常小。
此时机器学习可以帮我们完成两件事:
提取特征向量。由于特征过多,手动列出所有特征是非常困难的。一个机器学习算法可以自动标注很多特征。例如,一个复杂的特征可能是:鼻子长度和前额宽度的比例。手动列出所有的这些衍生特征是非常困难的.
匹配算法:一旦得到特征向量,机器学习算法需要将新图片和语料库中的特征向量进行匹配。
既然我们对人脸识别如何工作有了基本的理解,让我们运用一些广泛使用的Python库来搭建自己的人脸识别算法。
案例学习
首先给定一些人物脸部的图片——可能是一些名人,如Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan等,并把这些人脸看作我们的语料库。现在,我们给定一些其他名人的新图片(“新人物”),并判断这些“新人物”是否在语料库中。
以下是语料库中的图片: