二、内容
1.什么是人脸识别
首先,我们先了解一下什么叫人脸识别:
通过上述文字,我们可以注意到三点:
(1)我们的数据必须是包含人脸的图像或者视频流(保证数据的有效性)
(2)第一步要检测和跟踪到图像或视频流中的人脸
(3)第二步才是对人脸进行面部识别
由于我们提供的所有数据集均包含了人脸,因此我们仅需完成第二和第三小点的工作。
2.实现步骤
使用python+OpenCV实现人脸识别系统,要求系统带有界面和菜单。人脸识别系统实现步骤如下:
1、搭建python编译环境,并预导入OpenCV库
(OpenCV是什么,有什么用已经在第二大部分有详细解释)
2、创建正面人脸图像采集和识别程序,该程序分为人脸图像采集和人脸图像识别2个部
(即在“什么是人脸识别”中我们提到的需要同学们完成的两个工作)
注意,该系统所用图像数据均为灰度图像(什么是灰度图像?为什么要使用灰度图像?针对该问题,同学们可以自行思考,然后百度查阅)。
3、人脸图像采集步骤,每个人至少采集5-7张正面图像
(图像数据均会提供,此处同学们可以思考一下5-7张图片,是否是硬性要求?增加和减少采集数量是否会对我们机器的学习产生影响):
方法一:
(1) 打开人脸图像并显示在界面上。
(2) 用鼠标选取人脸各个眼睛中心位置。
(3) 依据人眼坐标,用下图采集人脸区域,并对人脸区域进行几何归一化。
几何归一化的目的是使用图像缩放技术把原始人脸区域图像缩放到统一的像素大小。比如规定图像大小是64×64,则按照上图人脸区域缩放倍数为β=2d/128。这样通过固定人眼坐标,保证了其他部位如鼻、嘴、脸颊等位置都保持在相对标准的位置,体现人脸在图像平面内的尺度不变性。
上面说了一大堆,简而言之把所有图像标记好的人脸区域都改变成大小统一的图像,然后进行保存。该项目中,我建议大家统一保存为128×128的大小。
(4) 对归一化后的人脸区域图像进行灰度归一化。
灰度归一化的目的是去除一定条件下的光照影响,灰度归一化的方法很多,这里可以使用比较典型的直方图均衡化方法。
(5)对每个采集的人脸图像按人脸类别进行编号形成人脸库。
方法二:
使用我们之前提到的cv2,通过cv.CascadeClassifier()接口,帮助实现人脸的自动检测。这是opencv自带的模型,是官方已经训练好的模型。值得注意的是该方法的参数为字符串类型,指向了模型的存储路径,本项目中我建议将路径指向haarcascade_frontalface_alt.xml。
上述方法会为我们返回一个分类器,有了分类器就可以进行人脸检测了。通过分类器我们可以调用detectMultiScale使其给我们返回检测的结果。
具体的使用方法可以参考以下博客,博客中已经解释的非常的清楚了,这里不过多阐述
https://www.cnblogs.com/lyx2018/p/7073025.html