软件工程课程设计报告模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程
课程设计报告
题目基于cv的人脸识别匹配
学院:信息科学技术学院
专业:计算机科学与技术
班级: XXX班
姓名:王XXX
学号: 202415612546
报告内容
(1)课程设计要求
要求:
(1)设计背景:
随着科技的不断发展,人工智能技术在各个领域得到了广泛的
应用。
人脸识别技术作为一种生物特征识别技术,具有高安全性、
便捷性和实用性等特点,已逐渐成为现代社会中不可或缺的一部分。
为了提高人脸识别的准确性和实时性,本设计要求基于计算机视觉
库(OpenCV)开发一套人脸识别匹配系统。
(2)对采集到的人脸图像进行预处理;
(3)提取人脸特征;
(4)进行人脸识别匹配;
(5)输出识别结果;
(6)训练自己的识别图集;
(2)相关人工智能方法阐述和数据集
(1)利用OpenCV库中的Haar级联分类器,通过加载预训练模型来快速且有效地检测图像中的正面人脸。
在人脸识别的应用中,OpenCV库提供了一系列强大的工具和算法。
我首先采用了Haar级联分类器来检测图像中的面部区域。
这种方法通过加载预训练的Haar级联模型,能够有效地识别图像中的正面人脸。
Haar级联分类器是一种基于机器学习的方法,它通过训练大量的正面和负面图像来创建一个能够识别特定目标的模型。
这个模型是一系列级联的弱分类器,每个分类器都基于图像的Haar特征,即图像中相邻区域的亮度差异。
级联设计允许快速排除非面部区域,从而提高检测效率。
(2)我们使用OpenCV库对灰度图像进行多尺度扫描,通过缩放和进行像素分析,以适应不同尺寸和距离的面部,从而提高人脸识别的准确性。
我运用OpenCV库中的函数对灰度图像进行多尺度扫描,以检测不同大小的面部。
这种多尺度扫描方法通过对图像进行缩放和像素扫描,来查找可能的面部区域。
一旦找到潜在的匹配,它就会使用更复杂的分类器来确定是否真的是一个面部。
这种方法能够适应不同距离和不同尺寸的面部,从而提高识别的准确性。
(3)在人脸识别过程中,提取面部ROI并转换为灰度图像是为了减少计算量,集中处理与人脸相关的关键信息,并加速识别过程。
在检测到面部区域后,代码提取了每个面部的兴趣区域(ROI),并将其转换为灰度图像。
这一步骤是必要的,因为颜色信息对于人脸识别不是必需的,而灰度图像可以减少计算量,从而提高识别的效率。
通过提取ROI,我们能够将注意力集中在图像中与人脸识别相关的部分,从而减少无关信息的干扰。
同时,灰度图像只有一个通道(亮度),而不是彩色图像的三个通道(红色、绿色和蓝色),这使得处理速度更快,同时减少了存储和计算的需求。
(4)在识别过程中,我运用了LBPH方法来进行特征提取。
LBPH(局部二值模式直方图)是一种特征提取方法,它通过比较图像中每个像素与其邻域像素的亮度差异来创建一个特征向量,从而捕捉局部纹理信息。
(5)置信度阈值。
置信度阈值是一种人工智能方法,用于评估预测结果的可靠性。
当预测的置信度低于预设的阈值时,系统会将面部识别为未知,从而确保识别结果的准确性。
(3)人脸识别模型设计
1. 模型加载
首先,我们加载了预先训练好的LBPH人脸识别模型。
这个模型是在一个含有多个不同人脸部图片的数据集上训练得到的,每个脸部图片都有一个对应的ID。
模型的训练过程涉及到了特征提取和人脸图片的分类。
2. 人脸检测
接着,我们使用Haar级联分类器来检测图像中的面部区域。
Haar级联是一种基于机器学习的方法,用于对象检测,特别是面部检测。
3. 图像预处理
对于待识别的图像,首先将其转换为灰度图像,以便进行后续处理。
灰度转换可以减少计算复杂性,并提高识别准确性。
4. 人脸识别
在检测到的面部区域中,我们使用LBPH算法提取特征,并预测面部对应的ID和置信度。
置信度表示预测的可靠性,值越低表示预测越准确。
5. 结果判断与展示
我们设定了一个阈值来判断是否为未知面部。
如果置信度低于阈值,则认为是未知面部。
最后,在原图上绘制识别结果,并显示给用户。
(4)人脸识别训练模型设计
为了训练一个人脸识别模型,我们采用了OpenCV库中的局部二值模式直方图(LBPH)人脸识别算法。
该算法因其计算效率高和对于光照变化、面部表情变化具有一定的准确性而被广泛应用于人脸识别领域。
1. 数据准备
首先,我们需要准备一个包含多个人脸图像的数据集。
每个图像都有一个对应的标签(ID),表示图像中的人是谁。
数据集应该包含足够多的样本,以确保模型能够学习到不同人的面部特征。
2. 特征提取
在训练之前,我们需要从每个面部图像中提取特征。
这里我们使用Haar级联分类器来检测图像中的面部区域,并将检测到的面部区域保存下来。
3. 模型训练
接下来,我们使用LBPH算法训练一个面部识别模型。
在训练过程中,模型会学习从数据集中提取的特征,并将每个特征与对应的标签(ID)关联起来。
4. 模型保存
训练完成后,我们将训练好的模型保存到一个XML文件中,以便后续用于人脸识别。
(5)训练和结果分析
在训练过程中,我们使用了LBPH算法,这是一种在面部识别中广泛使用的算法,因为它对光照变化和面部表情变化具有一定的鲁棒性。
我们首先从数据集中提取了面部特征,然后使用这些特征来训练我们的模型。
训练过程包括调整模型参数,以最小化预测标签和实际标签之间的差异。
运行程序识别图片中的人脸:
我把一张图片放入训练图集路径进行训练并取名为lina,如果正确运行会生成一个yml文件。
●可以看到训练完成,文件也成功生成:
●开始进行人脸识别,这里我用三张人脸图像生成了一个视频,我们直接
对视频进行人脸识别:
●Lina成功被识别出来,出现的别的人脸识别为unkonw。
●Lina成功被识别出来,出现的别的人脸识别为unkonw。
运行成功。
在分析结果时,我们可能会发现一些问题。
例如,模型可能在某些特定条件下表
现不佳,如光照变化、面部遮挡等。
(5)总结及体会(包括:设计过程中出现的问题及解决方法)
遇到的问题:
问题:代码中设置的置信度阈值为80,这个值可能对于不同的人脸数据集来说过于严格或者不够严格。
解决方法:需要根据实际训练的数据集调整这个阈值,以便更好地平衡识别的准确性和错误拒绝率。
问题:使用haarcascade_frontalface_alt2.xml作为人脸检测的特征分类器可能会受到光线、角度等因素的影响,导致检测不准确。
解决方法:可以尝试使用其他的人脸检测模型。
问题:程序中没有异常处理机制,如果在读取视频或者处理图像时遇到问题,程序将会崩溃。
解决方法:添加异常处理结构,比如try-except,来确保程序的稳定运行。
体会:
选择合适的人脸检测和识别算法对程序的准确性和效率至关重要。
传统的特征分类器在面对光线、角度变化时识别可能不够准确。
我深刻体会到不断学习和自我提升的重要性。
面对挑战时,我认识到独立解决问题的能力、创新思维和注重细节对于取得成功至关重要。