内容正文:
2.2“认识”一个人
要了解机器如何识别人脸,我们先从人类的人脸识别过程入手。当我们看到一张人脸,会通过眼睛、鼻子、嘴巴等显著生物特征来区分人脸,将提取到的特征放到记忆中去比对,最终调取身份信息,输出判断结果。而机器则是通过数学模型学习轮廓等细节,将这些机器选择出来的细节表示为特征,从而当这些人脸图像中有了这些特征,会将它输入到分类模型中进行分类,从而识别人脸。总结来说,人脸识别就是将采集的图像特征和数据库中的人脸特征进行比对,最终输出判断结果。
与人脸检测定位仅仅是发现面孔标注面孔不同,人脸识别是一个可以找到人脸并且可以分辨出谁是谁的程序。因此,它不仅仅是提供检测信息,还需要我们自己收集数据、自己训练机器,以便它们知道人脸以及它们是谁,在这个过程中,我们是教机器学习的人。
OpenCV自带了三个人脸识别算法:EigenFace、FisherFaces以及LBPH(局部二进制编码直方图),这节课我们不去深究这些算法的具体内容,直接演示如何使用LBPH识别器来进行人脸识别的训练。
第一步,我们需要安装LBPH识别器,这个识别器由OpenCV扩展库提供,需要提前安装此扩展模块。安装方法和第一节安装OpenCV方法相同,这里就不赘述了。
第二步:安装完识别器后,我们开始编写程序代码进行人脸识别训练。
首先引入OpenCV模块给计算机安装上“眼睛”。
import cv2
接着,我们引入Numpy库(numerical Python缩写,是一个开源的Python科学计算库),用于处理数据、进行数组计算。
Import numpy as np
第三步:现在,我们进行下一步,在这里我们将导入图片收集数据并使用它们来训练我们的程序。
首先,我们需要创建一个空列表作为储存图像的容器,并将其命名为images。(这里,我们简单了解一下列表的概念——列表是Python中内置有序可变序列,列表中的所有元素,放在一对中括号“[ ]”中,并使用都好分隔开。一个列表中的数据类型可以各不相同,也可以同时分别为整数、实数、字符串等基本类型。创建列表,使用“=”直接将一个列表赋值给变量即可,创建列表对象。例如images=[])
Images = [ ]
然后,我们先用强大的imread()函数读取两张同一个人的人脸图片,再用append函数将读取到的图片依次增加到images列表中。在编写这一段代码时,要注意图片的文件名要和文件夹中名字保持一致,才能成功读入图片。
Images.append(cv2.imread(‘img01.jpg’,cv2.IMREAD_IMREAD_GRAYSCALE)
Images.append(cv2.imread(‘img02.jpg’,cv2.IMREAD_IMREAD_GRAYSCALE)
做完这一步,我们创建一个标签列表,给读入的同一个人的人脸图片设置一个相同标签,方便我们后续标识出不同的人脸数据。
Labels=[0,0]
第四步:到这里所有的数据都准备完成,接下来要做的就是训练机器了。
首先,我们加入LBPH识别器。
Recognizer=cv2.face.LBPHFaceRecognizer_create()
然后,我们进行识别训练。
Recognizer.train(images,np.array(labels))
整个的人脸识别训练代码就完成了,同学们打开书56页,将相应的解释记在代码旁边。然后进入代码编程环境,将完整的代码写一遍。
提前写完代码的同学,翻开书自行探究一下如何进行多个不同的人脸识别训练。
学科网(北京)股份有限公司
$ “认识“一个人
时间:XXXX.XX.XX
1
学
习
了解机器学习的过程。
了解基于图片的人脸识别训练过程
目
标
2
一、如何从图片“认识”一个人
提取特点
分析特点
Face Recognition
人脸识别
我们如何识别人脸
钱学森
基于图片的人脸识别训练过程如下图
3.获得特征
2.机器训练
LBPH算法
1.输入训练图片
机器如何识别人脸
5.输出结果
4数据比对
数据库
XXX
LBPH
三种
人脸
识别
算法
EigenFace
FisherFace
局部二进制
编码直方图
7
二、识别训练
识别训练
二
下面用同一个人的两张图片“img01.jpg”和“img02.jpg”来训练。这两张图片上是同一个人,标签为“0”。
步骤一:准备工作
做一做:在命令窗口安装LBPH模块(局部二进制编码直方图)
在这里输入命令后敲一下回车键
等待安装完成
安装命令: pip install opencv-contrib-python
10
步骤一:准备工作
做一做:
在浏览器中下载两张钱学森先生的照片保存在文件接收柜中。
将两张图片的