基于DeepFace模型设计的人脸识别软件
资源下载地址:https://download.csdn.net/download/sheziqiong/85601096
人脸识别软件(无外部API)
V2.0 基于DeepFace模型设计的人脸识别软件
V1.0 基于PCA模型设计的人脸识别软件
V2.0
- 在观看了吴恩达老师的“深度学习课程”,了解了深度卷积神经网络在人脸识别中的应用。其中提到的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。每次开启软件时,加载所有用户图像进入内存,并将二维图像拉伸为一维向量。
vuser(i)v_{user}^{(i)}vuser(i)代表用户iii的人脸图像向量然后,我们将所有用户图像向量组合为用户图像矩阵,该矩阵的每一列为用户图像向量:
U=[(vuser(0))T(vuser(1))T⋯(vuser(n))T]U = \begin{bmatrix} (v_{user}^{(0)})^T \ (v_{user}^{(1)})^T \ \cdots \ (v_{user}^{(n)})^T \end{bmatrix}U=[(vuser(0))T (vuser(1))T ⋯ (vuser(n))T]
- 将用户图像矩阵UUU中的每一列减去平均脸向量vmean_facev_{mean \_ face}vmean_face,再将运算后的矩阵投影至模型空间更新矩阵UUU:
U=VT⋅(U.−vmean_face)U = V^T \cdot (U .- \ v_{mean \_ face})U=VT⋅(U.− vmean_face)
- 如此一来,我们得到了降维后的用户人脸矩阵。
识别过程
采集人脸图像,提取人脸部分,并将图像转换为向量形式:vinputv_{input}vinput
将上一步得到的人脸向量按如下公式投影至模型空间:
vpca=VT⋅(vinput−vmean_face)v_{pca}=V^T \cdot (v_{input} - v_{mean \_ face})vpca=VT⋅(vinput−vmean_face)将上一步得到的vpcav_{pca}vpca向量与UUU矩阵中的每一列计算 欧式距离,找到最近的一列即为识别目标。
识别函数代码
def __recognize(self, image, face):"""the system approves the user's identity according to his face"""name = ''try:(x, y, w, h) = faceimage = Image.fromarray(image).crop((x, y, x+w, y+h)).resize(self.img_size)img_vec = self.V.T.dot(np.array(image).reshape([-1, 1]) - self.mean_face)distances = [la.norm(img_vec - self.user_matrix[:, j].reshape([-1, 1])) \for j in range(self.user_matrix.shape[1])]min_dis = np.min(distances)index = np.where(distances == min_dis)[0][0]# print(min_dis, index)name = self.user_names[index]except:passreturn name
人像导入
主要是为了方便导入用户人像,故加入该功能。
在界面中选择导入文件夹路径后,循环处理文件夹中的所有图像。提取人像部分并转换为灰度图片,保存至软件存储人像的相对路径下。
拍照录入
- 为了录入用户人像信息,用户可以在开启摄像头、输入姓名后,点击界面上的拍照按钮,即可保存人像信息至软件文件夹下。
软件缺陷
- 光照问题
- 比如:在光线比较亮的地方录入人像后,用户在光线暗的地方就容易被识别错误。
- 尝试解决问题的办法是:图像预处理部分使用了直方图均衡化,不过只起到了一部分作用。
- 因此使用时,应尽可能地保持录入环境与检测环境一致。
资源下载地址:https://download.csdn.net/download/sheziqiong/85601096
基于DeepFace模型设计的人脸识别软件相关推荐
- 基于PYQT编写一个人脸识别软件(2)
前言 以前在博客:基于PYQT编写一个人脸识别软件 中给出了我自己用PYQT编写的一个小软件.鉴于使用的是开源库--face_recogniton,尽管使用很简单,但是还有些问题,比如:识别黄种人时效 ...
- 基于PYQT编写一个人脸识别软件
转载请注明出处:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/ 文章链接:http://blog.csdn.net/hongbin_xu ...
- 基于Android系统的人脸识别签到软件
项目名称: 基于Android系统的人脸识别签到软件 目 录 1 项目介绍..... 1 1.1 项目背景.... 1 1.2 产品特点.... 2 1.3 可行性分析.... 2 1.3.1 ...
- win10环境下基于face_recognition搭建自己的人脸识别软件
在win10环境下安装face_recognition,了解face_recognition中api的使用,如人脸截取.人脸矫正.人脸特征提取.人脸关键点提取.人脸mask获取.人脸特征比对等功能.最 ...
- 《繁凡的论文精读》(一)CVPR 2019 基于决策的高效人脸识别黑盒对抗攻击(清华朱军)
点我一文弄懂深度学习所有基础和各大主流研究方向! <繁凡的深度学习笔记>,包含深度学习基础和 TensorFlow2.0,PyTorch 详解,以及 CNN,RNN,GNN,AE,GAN, ...
- 上交AI研究院副院长马利庄:基于大数据的人脸识别技术进展与展望
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 转自 | 中国人工智能学会 本篇大家整理的是来自上海交通大学人工智能研究院副院长.华东师范大学特聘教授 ...
- 开发基于深度学习的人脸识别【考勤/签到】系统
开发基于深度学习的人脸识别[考勤/签到]系统 人脸识别介绍 平台环境需求 技术点 系统流程 细节设计 人脸检测 人脸关键点定位 人脸特征提取 模型的训练 模型的部署 MySQL数据库的使用 MFC工程 ...
- 基于深度学习的人脸识别考勤系统设计
写在前面:本文是本科阶段参加的第三次科创比赛项目,当时只有一个人做,能力精力有限,很多预期的功能都没有实现.最后的可展示程度不高,没有走得很远.本文是申报书部分,可以为除此参加科创的同学提供思路,可以 ...
- 【毕业设计/课程设计】基于opencv的高精度人脸识别考勤系统设计与实现
文章目录 0 项目说明 1 需求分析 2 总体设计 3 详细设计 4 程序运行结果测试与分析 5 实验心得 6 项目源码 0 项目说明 基于opencv的高精度人脸识别考勤系统设计与实现 提示:适合用 ...
最新文章
- ASP.NET文件的下载
- MapReduce中Client提交Job源码分析
- 那个能力很强的程序员学历造假,被辞退了!
- 怎么做网络营销在网站优化中能快速提升搜索引擎信任的方法!
- hikvision v2.3控件网页demo_昆山UI网页设计师专业培训班 UI设计好就业吗?
- 【jQuery】在表单提交前触发事件(数据校验/执行计算等)
- QQ尾巴病毒的Visual C++实现探讨
- phpstudy命令行中数据表插入中文显示不了的问题
- Java 什么是静态内部类
- 【机器学习】输出层的设计
- opencv成员函数data,step,at的使用
- 三角波c语言编程,51单片机简易波形发生器(正弦波 锯齿波 三角波)仿真+源程序+电路原理图...
- 【转载】提问的智慧(How To Ask Questions The Smart Way)
- Sublime text3常用的快捷键—骚骚的编辑器
- 李沐《动手学》-kaggle-房价预测-submission
- 地上半地下储罐的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 迪士尼正在寻找一个区块链实习生
- Pybulle中确定UR机械臂末端姿态方法
- java连接数据库用户 'sa' 登录失败。 ClientConnectionId:解决方法
- 区间dp——合并金币