- 预装工具
- opencv,
- tensorflow
- keras(深度学习库)
- sklearn
- anaconda3 语言环境 python3.5
- 项目流程
- 配置、获取实时视频流
- 检测出人脸
- 为模型训练准备人脸数据
- 对数据进行处理及加载
- 利用Keras库训练人脸识别模型
- 从实时视频流中识别出我自己
文件说明
- catch_video.py:视频截取及按帧读取,完成项目流程中的前三步工作
- load_face_dataset.py:完成项目流程中的第四步工作
- face_train_use_keras.py:完成项目流程中的第五步工作
- face_predict_use_keras.py:完成项目流程中的最后一步工作
知识记录
- cv2.VideoCapture(0):
opencv内置函数,可以实现实时获取摄像头数据。一般参数为0,指的是电脑自带的摄像头。如果不能正确读出,可以试一下参数改为1(输出了倒置的图像),刚开始读取的图片就是倒着的,后来才发现坑在这儿 - Haarcascades类:
opencv自带的人脸特征分类器,里面有好多检测脸部器官的分类器。其中haarcascade_frontalface_alt_tree.xml是最严格的分类器,在我的程序里面我采用了\haarcascade_frontalface_alt2.xml - RGB:
通道代表顺序Red(红色)、Green(绿色)和Blue(蓝色) - detectMultiScale函数:
可以检测出图片中所有的人脸,并用vector(矢量)保存各个人脸的坐标、大小(用矩形表示)
参数:
第一个gray:待检测图片,一般为灰度图像以加快检测速度
第二个scaleFactor:(比例尺因子):表示在前后相继两次的扫描中,扫描窗口的比例系数,默认为1.1,即每次搜索窗口依次扩大10%。即图片缩放比例。因为离相机远近不同,人的大小也不同。
第三个minNeighbors:对特征检测点周边多少有效点同时检测,这样可避免因选取的特征检测点太小而导致遗漏
第四个minSize:用来限制得到的目标区域的范围(特征检测点的最小值) - categorical_crossentropy:
称作多分类的对数损失,注意使用该目标函数时,需要将标签转化为形如(nb_samples, nb_classes)的二值序列,即这个函数要求标签集必须采用one-hot编码形式。one-hot编码将数值变成了位置信息,使其向量化,这样更方便CNN操作。 - 卷积:加权求和
离散卷积操作又叫做滤波(权值),称作卷积核或滤波器。不同的滤波器起不同的作用。
滤波器要归一化,和为0。
可调整的滤波器是CNN的“卷积”那部分;如何调整滤波器则是CNN的“神经网络”那部分。 - Convolution2D:
参数:卷积核数量;卷积核尺寸;border_mode指定了对输出特征图大小的控制,若为‘same’,那么代码内部会通过适当padding保证输出特征图大小与输入特征图大小相同,若为‘valid’,那么就按通常情况处理,在这里通常情况的处理会使得输出特征图丢掉周围一圈的一个像素,因为3*3的卷积核的中心只能从第2行第2列开始,到第n-1行第n-1列结束;网络的第一层必须指定输入数据的形状,也就是input_shape。
池化层,如果pool_size即池化大小是2x2,方式为最大值池化。也就是对输入featuremap的每个2x2大小的窗,选取其中最大的一个值作为输出。池化可以使特征图的shape迅速缩小。 - 对CNN模型中我不太熟悉的层做一下重点介绍:
- Dropout层:随机断开一定百分比的输入神经元链接,以防止过拟合。Dropout的断开比例,一般而言在0.3~0.5之间即可。
- Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到(Convolution)全连接层(Dense)的过渡。
- 全连接层称为Dense,即“稠密的”。Dense层的一个必填参数就是当前层的神经元个数。
- cv2.VideoCapture(0):
- 参考资料:http://www.cnblogs.com/neo-T/p/6426029.html
基于Python的人脸检测及识别小程序文档说明
最新推荐文章于 2024-02-01 11:21:34 发布