毕业设计项目 人脸识别系统
文章目录0 简介1 人脸识别 - 常用实现技术1.1 基于几何特征的人脸识别方法1.2 初级神经网络方法。1.3 深度学习方法。2 人脸识别算法缺陷3 人脸识别流程3.1 相关数据集3.2 对齐3.3 仿射变换3.4 人脸目标检测3.5 人脸特征提取3.5.1 分类模型有哪些3.5.2 度量学习模型——FaceNet为例3.6 人脸识别特征分类3.6.1 欧氏距离3.6.2 余弦距离3.6.3 Joint Bayesian 方法4 实现过程4.1 自己构建人脸数据集4.1.1 拍照程序4.2 预处理4.3 人脸特征提取5 识别效果0 简介今天学长向大家介绍一个机器视觉的毕设项目基于深度学习的人脸识别系统项目运行效果毕业设计 opencv人脸识别系统项目分享见主页任意置顶文章1 人脸识别 - 常用实现技术人脸识别主要研究的是如何获得高效的特征 并利进行人脸匹配的计算。 至今为止人脸识别的算法已经很多。1.1 基于几何特征的人脸识别方法该方法所考虑的特征相对朴。 所谓的几何特征是指人脸图像上各器官等的相对位置或相对距离所组成的矢量 具体指利用人工方式标出人脸图像特征点位置 对标定好的特征点计算相对距离 将所得的多个距离按照预定顺序组成一个矢量 该矢量即为几何特征。 Nicholas Roeder 和 Xiaobo Li 对几何特征的提取进行了详细研究 由于几何特征只是粗略的描述的人脸图像 因此效果并不如人意。1.2 初级神经网络方法。Intrato将无监督/监督混合神经网络应用到人脸识别问题上该方法比传统的 BP 神经网络提取的特征更有效。 Cottrell 应用级联 BP 神经网络较好的解决了人脸遮挡和光照变化的问题。 W.Shiqian Wu 将 RBF 和 DCT 神经网络应用到人脸识别问题上。 E.Osuna 将支持向量机(SVM)应用到人脸识别问题。 Kung 和Lin 结合神经网络和统计学方法 提出了基于概率决策的神经网络(PDBNN),此方法也获得了很好的结果 这些方法都取得了较好的效果。 神经网络方法虽然简化了特征提取的工作 学习到更加有效的特征 但是神经网络往往有数目众多的神经元组成因此训练耗时且难于收敛。1.3 深度学习方法。其实深度学习早在 20 世纪 90 年代就已经提出 但是由于当时计算机技术的限制 深度学习 并没得到很大的重视和发展。 直到 2012 年由 AlexKrizhevsky 提出的 AlexNet 卷积神经网络在 ILSVRC 图像分类竞赛中表示异常突出从此深度学习尤其是其中的卷积神经网络得到了人们的广泛关注和深入的研究。 除了在香港中文大学的 DeepID 系列 还有 Google 提出 FaceNet 网络 [25] 牛津大学提出的VGG 网络等许多不同的网络 这些网络都取得了很好的效果。深度学习具有特征自动学习 泛化能力强和所学特征表现里强等优点 因此深度学习在人脸识别问题上的应用极大的推动的人脸识别的发展。 但是深度学习也具有所需训练数据巨大、 训练耗时长和难于收敛等缺点。2 人脸识别算法缺陷(学长在这里推荐大家可以优化这些点然后作为课题的创新点)光照是影响人脸识别的重要原因。 现有的数字图像处理技术都是基于图像的像素值进行计算的 因此即使是同一个人但由于光照变化引起的像素值的差异使的最终计算结果差异很大 这极大的影响了人脸识别的性能。姿态是左右人脸识别另一个关键点。 在实际问题中人脸数据的采集往往是一种随意行为 不能保证每次采集到是正脸。 上一节提到的各种方法往往只能适应一种姿态对于姿态不同的图像识别问题经常是力不从心。 因此找到一种对姿态变化具有很强的鲁棒性的方法也是非常重要的。数据规模庞大也影响人脸识别性能。 在深度学习应用到人脸识别问题之前 所提出的方法由于受到计算复杂度限制 往往在小数据集(包含几十人或几百人)性能良好但是在大规模数据上性能很差。 深度学习由于其具有较强的泛化能力 因此在较大规模的数据集上表现比传统方法改善了许多。 但是深度学习的泛化能力也是相对而言较强 其受训练集的影响很大。 目前世界上有超过 60 亿人 而且每个地区的人面部差异较大 在获取训练数据集时无法包含所有人 这会对最终的泛化能力有很大影响比如训练数据集中包括的全部是西方人(大部分是这种情况) 训练得到的网络对于东方人的泛化能力就较低 因此即使利用深度学习也无法区分世界上所有人。计算复杂度高对人脸识别也有影响。 计算复杂度往往随着人脸识别任务复杂度的提高和训练数据的增加而急速增加。 利用深度学习进行人脸识别 随着神经网络规模加深 参数量也逐渐增大 也增加计算复杂度。 计算复杂度的增加不仅使训练时间增加 算法难以收敛 容易出现过拟合问题 而且也增加了测试阶段所耗时间 这不利用算法的实际应用。3 人脸识别流程3.1 相关数据集主要有以下几种数据集其中仅MultiPIE需要购买其余的申请即可。3.2 对齐通过确定人脸中的标定点landmark的位置进行人脸对齐。找3个点即可一般找5个点鼻子、眼睛、嘴角两端对齐后可以找到一个二维坐标平面进行下一步仿射变换。3.3 仿射变换原理二维坐标到二维坐标之间的线性变换不共线的三对对应点决定了一个唯一的仿射变换3.4 人脸目标检测使用神经网络比如使用的DCNN进行回归对标定点进行检测。其中输入原始画像后进行4*4卷积后在进行池化卷积…最后使用两个全连接得到最终结果。这里面采用了一个级联思想实现CNN组合级联思想实现细节如下图3.5 人脸特征提取3.5.1 分类模型有哪些DeepfaceDeepIDVGGResNetFaceNet3.5.2 度量学习模型——FaceNet为例学长以常用的FaceNet为例下图是FaceNet的简略示意图例如输入三张图片Anchor、与Anchor不同类的Negative、与Anchor同类的Positive通过一系列学习后实现同类相近异类相远。距离计算公式前半部分为与同类positive之间的距离后半部分计算与不同类negative的距离。最终实现效果如下图所示距离1.1即可认为相互之间为不同人即使一个人不同角度也可以被识别为同一人。3.6 人脸识别特征分类人脸识别中的人脸验证问题即是验证两张图片是否来自同一个人。主要有以下三种方法欧氏距离和余弦距离方法是工业中常用的验证方法Joint Bayesian方法常用在学术研究中。首先假定两张人脸图片提取的特征向量为量为 xj→ 和 xk→ 。3.6.1 欧氏距离距离差越大相似度越小。3.6.2 余弦距离3.6.3 Joint Bayesian 方法其中(∆) 是差异 ∆ 的函数(H1)为先验概率(Δ|H1) 为似然概率($_1|∆)是后验概率是人脸相似性的度量。4 实现过程数据集来源网络搜索我选取了几名大家认识的人物有Biden、chenglong、mayun、Trump、yangmi、zhaoliying等。每个人物放入3-4张图片如下图获得此图像数据集我们将为数据集中的每个人脸创建 128 维嵌入使用这些嵌入来识别图像和视频流中人物的面部4.1 自己构建人脸数据集或者你有自己的想法构建一个自己的数据集可以的话记得开源给学长手动狗头4.1.1 拍照程序想要识别自己单有别人的数据集还是不行的还需要自己人脸的照片才行。这就需要我们收集自己的照片然后和上面的那个数据集一起来训练模型。在拿着手机自拍的过程中我想到问什么不写一个程序用电脑的摄像头自拍呢随便还能研究下怎么用opencv实现拍照的功能。经过一番实验其实还是费了好长时间终于写了一个拍照程序。程序的功能就是打开电脑摄像头当P键按下P是拍照的首字母还是Photo的首字母还是Picture的首字母的时候保存当前帧的图像。简单到没朋友竟然耗费了那么久。while(1){char keywaitKey(100);capframe;imshow(frame,frame);string filenameformat(D:\\pic\\pic%d.jpg,i);switch(key){casep:i;imwrite(filename,frame);imshow(photo,frame);waitKey(500);destroyWindow(photo);break;default:break;}}然后我们就可以运行程序不停地按下p键对自己一通狂拍了。4.2 预处理在得到自己的人脸照片之后还需要对这些照片进行一些预处理才能拿去训练模型。所谓预处理其实就是检测并分割出人脸并改变人脸的大小与下载的数据集中图片大小一致。人脸检测在之前的博客中已经做了介绍这里就不再赘述。详情参考OpenCV人脸检测C/Python)。用ROI分割即可。检测出人脸之后改变大小使之与ORL人脸数据库人脸大小一致。通过加断点在Locals里面或者是ImageWatch可以看到ORL人脸数据库人脸的大小是92 x 112。这里只需要对检测后得到的ROI做一次resize即可。这两步的代码如下std::vectorRectfaces;Mat img_gray;cvtColor(img,img_gray,COLOR_BGR2GRAY);equalizeHist(img_gray,img_gray);//--Detect faces face_cascade.detectMultiScale(img_gray,faces,1.1,3,CV_HAAR_DO_ROUGH_SEARCH,Size(50,50));for(size_t j0;jfaces.size();j){Mat faceROIimg(faces[j]);Mat MyFace;if(faceROI.cols100){resize(faceROI,MyFace,Size(92,112));stringstrformat(D:\\MyFaces\\MyFcae%d.jpg,i);imwrite(str,MyFace);imshow(ii,MyFace);}waitKey(10);}4.3 人脸特征提取在识别图像和视频中的人脸之前我们首先需要量化训练集中的人脸。 请记住我们实际上并不是在这里训练网络——网络已经被训练为在大约 300 万张图像的数据集上创建 128 维嵌入。当然可以从头开始训练网络甚至可以微调现有模型的权重。但一般情况使用预训练网络然后使用它为我们数据集中的 29张人脸中的每一张构建 128 维嵌入更容易。然后在分类过程中我们可以使用一个简单的 k-NN 模型 投票来进行最终的人脸分类。 其他传统的机器学习模型也可以在这里使用。新建 encode_faces.py# import the necessary packagesfromimutilsimportpathsimportface_recognitionimportargparseimportpickleimportcv2importos dataset_pathdatasetencodings_pathencodings.pickledetection_methodcnn# 获取数据集中输入图像的路径print([INFO] quantifying faces...)imagePathslist(paths.list_images(dataset_path))# 初始化已知编码和已知名称的列表knownEncodings[]knownNames[]# 遍历图像路径for(i,imagePath)inenumerate(imagePaths):# 从图片路径中提取人名print([INFO] processing image {}/{}.format(i1,len(imagePaths)))nameimagePath.split(os.path.sep)[-2]# 加载输入图像并从 BGR 转换OpenCV 排序# 到 dlib 排序RGBimagecv2.imread(imagePath)rgbcv2.cvtColor(image,cv2.COLOR_BGR2RGB)# 检测边界框的 (x, y) 坐标# 对应输入图像中的每个人脸boxesface_recognition.face_locations(rgb,modeldetection_method)# 计算人脸的嵌入encodingsface_recognition.face_encodings(rgb,boxes)# 遍历 encodingsforencodinginencodings:# 将每个编码 名称添加到我们的已知名称集中# 编码knownEncodings.append(encoding)knownNames.append(name)代码关键点解释dataset_path数据集的路径。encodings_path 我们的人脸编码被写入这个参数指向的文件路径。detection_method 在我们对图像中的人脸进行编码之前我们首先需要检测它们。 或者两种人脸检测方法包括 hog 或 cnn 。现在我们已经定义了我们的参数让我们获取数据集中文件的路径以及执行两个初始化输入数据集目录的路径来构建其中包含的所有图像路径的列表。在循环之前分别初始化两个列表 knownEncodings 和 knownNames 。 这两个列表将包含数据集中每个人的面部编码和相应的姓名。 这个循环将循环 19次对应于我们在数据集中的 19张人脸图像。然后将面部的边界框转换为 128 个数字的列表。这称为将面部编码为向量而 face_recognition.face_encodings 方法会处理它。 编码和名称附加到适当的列表knownEncodings 和 knownNames。然后将继续对数据集中的所有 19张图像执行此操作。# dump the facial encodings names to diskprint([INFO] serializing encodings...)data{encodings:knownEncodings,names:knownNames}fopen(args[encodings],wb)f.write(pickle.dumps(data))f.close()构造了一个带有两个键的字典—— “encodings” 和 “names” 。 将名称和编码转储到磁盘以备将来调用。[INFO]quantifying faces...[INFO]processing image1/19[INFO]processing image2/19[INFO]processing image3/19[INFO]processing image4/19[INFO]processing image5/19[INFO]processing image6/19[INFO]processing image7/19[INFO]processing image8/19[INFO]processing image9/19[INFO]processing image10/19[INFO]processing image11/19[INFO]processing image12/19[INFO]processing image13/19[INFO]processing image14/19[INFO]processing image15/19[INFO]processing image16/19[INFO]processing image17/19[INFO]processing image18/19[INFO]processing image19/19[INFO]serializing encodings...Process finishedwithexit code0正如输出中看到的我们现在有一个名为 encodings.pickle 的文件——该文件包含我们数据集中每个人脸的 128 维人脸嵌入。5 识别效果项目运行效果毕业设计 opencv人脸识别系统项目分享见主页任意置顶文章

相关新闻

CODESYS中ANY类型:从类型安全到动态灵活的工业自动化编程实践

CODESYS中ANY类型:从类型安全到动态灵活的工业自动化编程实践

1. 项目概述:从“类型安全”到“动态灵活”的跨越在工业自动化编程领域,尤其是使用像CODESYS这样的主流IEC 61131-3平台时,我们长期被“类型安全”这一铁律所塑造。每一个变量都必须预先声明其精确的数据类型——BOOL,INT,REAL,ARRAY[1..10] …

2026/8/6 16:00:39 阅读更多 →
率零和嘎嘎降AI哪个划算?1万字论文实测:价格/达标率/用时全对比

率零和嘎嘎降AI哪个划算?1万字论文实测:价格/达标率/用时全对比

率零和嘎嘎降AI哪个划算?1万字论文实测:价格/达标率/用时全对比 这两款工具经常被一起比较,因为都是国内降AI工具里知名度比较高的。实际用下来差异不小。这篇文章用同一篇1万字论文分别测了两款,把结果整理出来。 基本参数对比…

2026/8/6 16:00:39 阅读更多 →
每日热门skill-35万次下载!这款Skill让AI Agent装上“自省基因“,从此告别重复犯错

每日热门skill-35万次下载!这款Skill让AI Agent装上“自省基因“,从此告别重复犯错

今日主角:self-improving(ivangdavila) 标签:#AI Agent #自我进化 #记忆管理 #零依赖 一、当AI Agent开始"认错" 想象一个场景。 周一,你让AI Agent帮你把三个季度的销售表合并,跑出环比增长图…

2026/8/6 15:59:38 阅读更多 →

最新新闻

跨境厨房清洁用品营销策略:三层漏斗模型解析

跨境厨房清洁用品营销策略:三层漏斗模型解析

1. 项目背景与市场洞察最近两年跨境厨房清洁用品赛道出现了一个有趣的现象:传统铺货模式ROI持续走低,而通过海外社交媒体内容营销的品牌却逆势增长。我在操盘多个家居类目出海项目时发现,单纯依赖头部KOL的"大爆款"策略已经失效&am…

2026/8/6 16:51:07 阅读更多 →
如何3分钟获取中小学电子课本?这款智能教材下载工具为您解决下载难题

如何3分钟获取中小学电子课本?这款智能教材下载工具为您解决下载难题

如何3分钟获取中小学电子课本?这款智能教材下载工具为您解决下载难题 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容…

2026/8/6 16:51:07 阅读更多 →
2024阀门网站建设指南:如何通过专业的阀门网站建设打造行业爆款

2024阀门网站建设指南:如何通过专业的阀门网站建设打造行业爆款

说句实在话,在这个互联网流量红海都快变成蓝海的今天,如果你还在问“阀门网站建设到底有没有用”,那我可能得先请你喝杯茶,咱俩坐下来好好聊聊。我是真心想帮那些做阀门生意的老板们一把,因为我知道,这一行太难了。以前咱们靠关系、靠饭局、靠跑客户,现在不行了,客户还…

2026/8/6 16:51:07 阅读更多 →
G-Helper终极指南:释放华硕笔记本潜能的免费轻量控制神器

G-Helper终极指南:释放华硕笔记本潜能的免费轻量控制神器

G-Helper终极指南:释放华硕笔记本潜能的免费轻量控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…

2026/8/6 16:51:07 阅读更多 →
Julia实现MIT 18.06 线代计算器

Julia实现MIT 18.06 线代计算器

最近又遇到一个跟DeepSeek较劲半天的代码,DS写julia实在费劲,我又是新学的jl连变量都看不懂,就先把目前好不容易搞出来的MCP线代计算器复盘写篇文章留档。目前支持的是MIT 18.06 线代 Linear Algebra 1-3章节的消元-解方程-逆矩阵。 大背景是…

2026/8/6 16:51:07 阅读更多 →
Unity项目YooAsset缓存清理全攻略:提升开发效率与构建稳定性

Unity项目YooAsset缓存清理全攻略:提升开发效率与构建稳定性

1. 项目概述:为什么Unity项目需要清理YooAsset缓存?做Unity项目开发,尤其是涉及到热更新和资源管理的项目,YooAsset几乎是绕不开的一个强大工具。它帮我们解决了资源打包、加载、更新等一系列繁琐问题,但用久了&#x…

2026/8/6 16:50:07 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →