基于卷积神经网络的人脸识别

完整代码、数据请见:https://download.csdn.net/download/weixin_43521269/12837110

人脸识别,是基于人的脸部特征信息对人的身份进行识别的技术。随着世界的发展,人脸识别已成为非常重要的技术手段,如确定一个人是否为罪犯,寻找失踪者的踪迹,更为重要的是应用于线上支付的保密手段。
学习目标:
1.了解人脸识别的研究现状
2.掌握采集人脸的思路与方法
3.掌握提取人脸的方法
4.掌握属于预处理的流程
5.掌握cnn人脸识别模型的构建
6.掌握调用模型进行实时识别的方法

操作环境:
Jupyter Notebook (Anaconda3)
python 3.76
tensorflow 2.2.0(初始接触建议装cpu版即可)
opencv-python 4.4.0.40
Keras 2.4.3
numpy 1.18.5
一人脸采集
通过 opencv调用电脑摄像头拍取约10个人的人脸照片,每人拍600张。为拍照的10个人分别建立一个文件夹,并将其所拍照片統一放置该文件夹中,文件夹以其名字拼音命令,将这10个文件夹统一放置于个总文件夹中,并以 facelmages命名。
将获取到的图片进行面部提取操作,并将提取山来的面部照片转成灰度图。对处理后的照片进行整理,并将总件夹命名为 facelmageGray。
1.了解并安装opencv包
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。使用opencv调用摄像头对人脸进行拍摄。
基础操作:

2.进行拍摄人脸
对十个人进行人脸拍摄,每人拍摄600张,每隔0.05s拍一张,需30s。

3.提取人脸
主要函数使用faces = facec.detectMultiScale(img)、cv2.rectangle()提取出每张图片的人脸,由于可能出现检测不到人脸的情况,导致返回为空,造成数据丢 失,由于照片数据是连续不断拍摄,人脸变动位置很小,可认为人脸位置与上一张图片人脸位置一致,由此提取出600张人脸。

二数据预处理
将人脸的图片数据整理成numpy中的 ndarray格式,并将整理后的数据按8、2 划分成训练集和测试集。
1.将人脸数据灰度化
拍摄的照片为彩色图片,通道数为3,将其灰度化,使之成为单通道,方便运算。再将人脸的维度统一大小为2828。
2.将人脸数据归一化,使后面训练收敛速度加快,并为人脸设置标签为0-9
人脸数据为每个像素数据大小集合,像素大小0-255,将数据除以255即可实现 归一化。标签则新建一个与data对应的labels数组,方便识别。

3.将所有数据集合为face_data,face_labels,将数据划分训练集与测试集
总共10个人,每人600张图片,则有6000张图片。将其聚合为face_data,大 小为6000
28*28,对应标签为face_labels,大小为6000。
使用sklearn对数据进行划分,主要函数为train_test_split(),参数data为 划分的数据,labels为标签,test_size为划分的比例

三模型构建
将训练集样本放入模型进行训练,用测试集样本进行模型性能测试,并将训练好 的模型进行保存,模型文件夹命名为model
1.cnn的认识
卷积神经网络分为卷积层,池化层,全连接层:
卷积层,对输入信号进行加工,然后在连接层实现与输出目标之间的映射。每个 卷积层都包含多个特征映射,每个特征映射是一个由多个神经元构成的“平面”,通 过一种卷积滤波器提取输入的一种特征。
池化层(采样层),基于局部相关性原理进行亚采样,从而在减少数据量的同时保 留有用信息。
全连接层,类似BP神经网络,完成识别任务

2.keras卷积神经网络主要函数

3.构建模型并测试,保存
构建一个具有两层卷积层,两层池化层,一个flatten层,一个dropout层,两 个全连接层的人脸识别模型,输入训练人脸数据为[4800,28,28,1],标签为[4800], 输出训练的结果与交叉熵大小,并保存模型。再将测试集代入测试

四模型测试
使用之前拍摄人脸代码抓拍实时人脸,再提取人脸,预处理,最后代入模型即可。
拍摄十张图片,设置好标签,最后与预测结果进行比较。

五总结
1.模型结果展示
(1)以下为训练集的交叉熵与准确率:
最终为0.9971,识别效果很好,只有几张被错分。

(2)以下为测试集的交叉熵与准确率:
模型与参数情况如下,将1200张图片代入识别,准确率为0.9983,基本能够完 全识别出来,交叉熵也只有0.0074

(3)实时拍摄识别
准确率为1,交叉熵为0.2977

2.小结
演示了使用cnn进行人脸识别,粗略的了解了如何去使用python对数据进行处理的步骤与方法,了解一些关于机器学习与深度学习的方法,并进行实操,加深自身的理解,但也有不足之处,使用的数据集过于简单,拍摄人脸基本变化不大,使得特征很明显就提取出来,训练与测试的效果也十分好,同样的道理,如果人脸出现了一些变化,如拍摄环境改变,就会影响到识别的效果,属于一种过拟合的识别,这是有数据集导致的。完成本次实验后也可去网上寻找其他数据集进行实验。

六参考阅读
本文讲述了代码实现,关于卷积神经网络可见:
通俗理解卷积神经网络:
https://blog.csdn.net/v_JULY_v/article/details/51812459
卷积神经网络详解 - 卷积层逻辑篇:https://blog.csdn.net/tjlakewalker/article/details/83275322

基于卷积神经网络的人脸识别(自我拍摄获取数据集)相关推荐

  1. python人脸识别系统界面设计_基于卷积神经网络的人脸识别系统的设计(Python)

    基于卷积神经网络的人脸识别系统的设计(Python)(论文10000字,外文翻译,参考代码,流程图,人脸图像库) 摘要:随着社会的进步与发展,个人信息的保护变得十分重要.传统的密码保护方式已经不再满足 ...

  2. 博士论文——基于卷积神经网络的人脸识别研究 __张燕红

    论文题目 作者 年份 关键词 链接 备注 基于卷积神经网络的人脸识别研究 张燕红 2018 人脸识别:卷积神经网络:特征提取:分块策略:正则化 博士论文 摘要:随着信息技术的蓬勃发展,人们的学习和生活 ...

  3. 基于卷积神经网络的人脸识别算法

    摘要:近年来,随着科学技术的不断发展,人脸识别技术日渐成熟,使得人脸识别技术的使用率不断增大.例如:门禁.ATM机.公安系统以及新兴起的人机交互等领域,都应用到了人脸识别系统.在人脸识别研究领域中,深 ...

  4. 基于深度卷积神经网络进行人脸识别的原理是什么?

    原文:https://www.zhihu.com/question/60759296 基于深度卷积神经网络进行人脸识别的原理是什么? 这里的人脸识别包括但不限于:人脸检测,人脸对齐,身份验证识别,和表 ...

  5. 基于卷积神经网络的人脸表情识别应用--AR川剧变脸(二)

    本项目将在Android上实现一种通过识别表情类别,从而给人脸戴上不同样式脸谱的AR软件,效果如下: 基于表情识别的脸谱换脸AR安卓APP效果演示 想要实现这样一个软件,核心就是两部分: 1)使用卷积 ...

  6. 基于卷积神经网络的人脸表情识别应用--AR川剧变脸(一)

    1.摘要 本项目将在Android上实现一种通过识别表情类别,从而给人脸戴上不同样式脸谱的AR软件,效果如下: 基于表情识别的脸谱换脸AR安卓APP效果演示 通过深度学习和Keras训练一个人脸表情识 ...

  7. 基于递归神经网络的人脸识别探究

    摘要 本文首先简介了人工神经网络的发展史,继而介绍了递归神经网络的理论以及百度在基于递归神经网络的应用研究,最后探讨了递归神经网络在人脸识别中的应用. 1.    人工神经网络发展史[1][2] 人工 ...

  8. PyTorch实现基于卷积神经网络的面部表情识别

    基于卷积神经网络的面部表情识别(Pytorch实现)----台大李宏毅机器学习作业3(HW3) 一.项目说明 给定数据集train.csv,要求使用卷积神经网络CNN,根据每个样本的面部图片判断出其表 ...

  9. 【转】干货|孙启超:卷积神经网络在人脸识别技术中的应用

    2018-08-27 21:45:01 随着 iPhone X 的发布,Face ID 人脸识别技术开始进入人们的日常生活中,当我们拿起手机并看着它的时候就可以实现手机解锁的功能.而人脸识别中的关键技 ...

最新文章

  1. python使用argparse解析命令行参数
  2. Windows下编辑的(脚本)文本copy到linux下带个^M结尾
  3. mysql实现汉字转拼音
  4. 构建器模式_我喜欢构建器模式的三个原因
  5. Katy Perry - E.T.
  6. 动手学深度学习(PyTorch实现)(八)--AlexNet模型
  7. linux下截图软件 shutter
  8. PL/SQL数据类型
  9. 火箭是这样连胜的(转载)
  10. 如何重装电脑win10系统 电脑重装Win10系统操作教程
  11. web中常见的敏感信息
  12. PHP1c型GNAS,【临床研究与实践】儿童假性甲状旁腺功能减退症20例临床特征与GNAS基因缺陷分析...
  13. 融新聚力,筑梦畅行|云畅科技“融云计划”第一期集训营圆满结营
  14. linux监控工具 go实现,安装和使用gotop进行Linux系统进程监控的方法
  15. Java复习攻略02
  16. CentOS7.5 远程桌面设置
  17. MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程
  18. 提示the windows installer service could not be accessed
  19. Hololens2初入——解决HL真机到PC图像传输的实时性问题
  20. 绩效考核的哲学窘境【人人都是产品经理:9030】

热门文章

  1. 解决移动端点击屏幕变蓝的问题
  2. Django创建超级用户(超级管理)
  3. java aa 咖啡怎样冲泡_常见的咖啡冲泡方法
  4. “量子+生成式AI”!IBM联合生物制药公司Moderna进行疫苗研究
  5. 人生信条:不要太乐观,不要太悲观
  6. jdk 1.8 配置与sql server 2008 连接 ( win10 64位)
  7. Java生成小程序二维码并带参数
  8. 腾讯云学生服务器搭建wordpress个人网站
  9. 【OpenCV】文字绘制 putText
  10. zookeeper+kafka