完整资料进入【数字空间】查看——baidu搜索"writebug"
人脸识别软件(无外部API)
V2.0 基于DeepFace模型设计的人脸识别软件 V1.0 基于PCA模型设计的人脸识别软件
V2.0
- 更新时间:2018-08-15
- 在观看了吴恩达老师的“深度学习课程”,了解了深度卷积神经网络在人脸识别中的应用。其中提到的DeepFace模型在作业中有实现过程,故借此机会,将该模型应用到自己的人脸识别软件上。
- 引入 DeepFaceNet 模型,提高了识别准确率。同时解决了One-Shot问题。
新增文件
- dir 'deepface':包含了模型文件、识别函数、编码函数等
- 'deepface.h5' :DeepFace模型文件,采用Keras(Tensorflow backend)加载模型。
- 'fr_utils.py' :深度人脸识别接口,包含:模型编码人脸函数、人脸识别函数。
- 'inception_blocks.py':DeepFace模型接口文件,包含:加载模型函数、模型损失函数。
更新细节
- 'face_recognition.py'中新建了'DeepFaceRecognition'类,用于人脸识别。
- 增加识别细节的处理,未注册用户将会显示“Unknown”。
- 在图像预处理部分加入直方图均衡化,增加了在较暗处的识别准确率。
V1.0
- 起初,在数据库课程设计部分,我用C#设计了一个基于人脸识别的签到记录系统。这个系统中的人脸识别部分使用的是商汤科技 Face++ API。由于识别速度比较慢,还需要连网,我总想将其改为离线式识别。所以,就有了这一篇博客。
- 基于之前写过的一篇博客 《图像处理之人脸识别》 中介绍的基于PCA的训练模型方法得到了人脸模型。
- 基于人脸模型、Python设计了这个小软件。这样摆脱了使用第三方API的缺点,识别速度更快。不过,经过测试,该方法受到光照影响较大。
开发工具
环境
- windows 10
- Anaconda(Spyder)
语言
- 软件设计:Python
- 模型训练使用:Matlab
框架
- python-opencv
- 实现人脸检测功能,得到人脸区域
- numpy
矩阵运算
scipy
科学计算,加载模型文件
tkinter
GUI开发
功能简介
人脸识别
- 在本软件设计中,我们使用的模型文件为 Matlab 导出的 .mat 文件。文件里面保存了两个矩阵 mean_face 与 V,前者为 平均脸向量,后者为人脸空间矩阵。
- 该软件保存的用户人脸图像大小为 112 x 92。每次开启软件时,加载所有用户图像进入内存,并将二维图像拉伸为一维向量。 $v_{user}^{(i)}$代表用户$i$的人脸图像向量
- 然后,我们将所有用户图像向量组合为用户图像矩阵,该矩阵的每一列为用户图像向量:
$$U = \begin{bmatrix} (v_{user}^{(0)})^T \ (v_{user}^{(1)})^T \ \cdots \ (v_{user}^{(n)})^T \end{bmatrix}$$
- 将用户图像矩阵$U$中的每一列减去平均脸向量$v_{mean _ face}$,再将运算后的矩阵投影至模型空间更新矩阵$U$:
$$U = V^T \cdot (U .- \ v_{mean _ face})$$
- 如此一来,我们得到了降维后的用户人脸矩阵。
识别过程
- 采集人脸图像,提取人脸部分,并将图像转换为向量形式:$v_{input}$
- 将上一步得到的人脸向量按如下公式投影至模型空间: $$v_{pca}=V^T \cdot (v_{input} - v_{mean _ face})$$
- 将上一步得到的$v_{pca}$向量与$U$矩阵中的每一列计算 欧式距离,找到最近的一列即为识别目标。