[计算机毕业设计]opencv的人脸面部识别

article/2025/10/26 9:37:12

前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

本次分享的课题是

🎯opencv的人脸面部识别

课题背景与意义

现在,面部识别已成为生活中的一部分。我们在手机、平板电脑等设备中使用人脸信息进行解锁的时候,这时就要求获取我们的实时面部图像,并将其储存在数据库中以进一步表明我们的身份。

通过对输入图像进行迭代和预测可以完成这个过程。同样,实时人脸识别可与OpenCV框架python的实现配合使用。再将它们组合在一个组合级别中,以实现用于实时目的的模型。

课题实现技术思路

OpenCV 有三种人脸识别的算法:

  • Eigenfaces 是通过 PCA(主成分分析)实现的,它识别人脸数据集的主成分,并计算出待识别图像区域相对于数据集的发散程度(0~20k),该值越小,表示差别越小,0值表示完全匹配。低于4k~5k都是相当可靠的识别。

  • FisherFaces 是从 PCA发展而来,采用更复杂的计算,容易得到更准确的结果。低于4k~5k都是相当可靠的识别。

  • LBPH 将人脸分成小单元,并将其与模型中的对应单元进行比较,对每个区域的匹配值产生一个直方图。它允许待检测人脸区域可以和数据集中图像的形状、大小不同,更方便灵活。参考值低于50则算是好的识别,高于80则认为比较差。

当然,除了这三种预定义的算法外,我们可以自己写深度学习算法或者其他机器学习的分类算法来进行人脸识别,这里不再详述。

不管使用哪种算法都需要有训练集。从视频或者动图创建训练集的效率比较高。我从网上下载了一些明星的动图,然后分解,检测人脸区域,全部存为200X200的灰度图,存入对应的文件夹中,创建训练集。

from PIL import Imageimport osimport cv2def gifSplit2Array(gif_path):    import numpy as np    img = Image.open(gif_path)    for i in range(img.n_frames):        img.seek(i)        new = Image.new("RGBA", img.size)                      new.paste(img)        arr = np.array(new).astype(np.uint8)  # image: img (PIL Image):        yield arr[:,:,2::-1] # 逆序(RGB 转BGR), 舍弃alpha通道, 输出数组供openCV使用     def face_generate(img):       gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)       front_face_cascade = cv2.CascadeClassifier(r'E:\Python36\MyPythonFiles\my OpenCV\face_detection\cascades/haarcascade_frontalface_default.xml')#检测正脸    faces0 = front_face_cascade.detectMultiScale(gray, 1.02, 5)       #eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')#检测眼睛    eye_cascade = cv2.CascadeClassifier(r'E:\Python36\MyPythonFiles\my OpenCV\face_detection\cascades/haarcascade_eye_tree_eyeglasses.xml')#检测眼睛    for (x, y, w, h) in faces0:        face_area = gray[y: y+h, x: x+w] # (疑似)人脸区域        quasi_eyes = eye_cascade.detectMultiScale(face_area, 1.03, 5, 0)#在人脸区域检测眼睛        if len(quasi_eyes) ==0: continue        quasi_eyes = tuple(filter(lambda x : x[2]/w>0.18 and x[1]<0.5*h, quasi_eyes)) # ex,ey,ew,eh; ew/w>0.18 #尺寸过滤 ,且眼睛在脸的上半部        if len(quasi_eyes) <1 : continue        yield cv2.resize(face_area, (200,200))i = 0for gif_path in ("Yangme5.gif","Yangme6.gif","Shishi.gif","Shishi2.gif","Shishi3.gif","Shishi3.gif" ,"Yangzi.gif","Yangzi2.gif","Yangzi3.gif","Zhenshuang.gif","ZDY.gif", "ZDY2.gif"):    print(gif_path)    for img in gifSplit2Array(gif_path):        for face in face_generate(img):            cv2.imwrite("./dataset/%s.pgm" % (i), face)            print(i)            i += 1

我们可以剔除掉其中一些效果不好的图片。

接着我们加载数据集,训练模型:

def load_dataset(datasetPath):    names = []    X = []    y = []    ID = 0    for name in os.listdir(datasetPath):        subpath = os.path.join(datasetPath, name)        if os.path.isdir(subpath):            names.append(name)            for file in os.listdir(subpath):                im = cv2.imread(os.path.join(subpath,file), cv2.IMREAD_GRAYSCALE)                X.append(np.asarray(im, dtype = np.uint8))                y.append(ID)            ID += 1    X = np.asarray(X)    y = np.asarray(y, dtype = np.int32)    return X, y, names  datasetPath =".\dataset"    X, y , names = load_dataset(datasetPath)#报错找不到face模块是因为只安装了主模块#pip uninstall opencv-python,   pip install opencv0-contrib-python#创建人脸识别模型(三种识别模式)#model = cv2.face.EigenFaceRecognizer_create() #createEigenFaceRecognizer()函数已被舍弃#model = cv2.face.FisherFaceRecognizer_create()model = cv2.face.LBPHFaceRecognizer_create() #model.train(X, y)

最后我们将待预测的图像中的人脸区域与训练集中的图像进行比对预测:

def recognize(img):    global model, names    gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    front_face_cascade = cv2.CascadeClassifier(r'E:\Python36\MyPythonFiles\my OpenCV\face_detection\cascades/haarcascade_frontalface_default.xml')#检测正脸    faces0 = front_face_cascade.detectMultiScale(gray, 1.025, 5)    eye_cascade = cv2.CascadeClassifier(r'E:\Python36\MyPythonFiles\my OpenCV\face_detection\cascades/haarcascade_eye_tree_eyeglasses.xml')#检测眼睛    for (x, y, w, h) in faces0:        #print(x,y,w,h)        face_area = gray[y: y+h, x: x+w] #疑似人脸区域        quasi_eyes = eye_cascade.detectMultiScale(face_area, 1.03, 5, 0)#在人脸区域检测眼睛        if len(quasi_eyes) ==0: continue        quasi_eyes = tuple(filter(lambda x : x[2]/w>0.15, quasi_eyes)) # ex,ey,ew,eh; ew/w>0.18 #尺寸过滤        #print(quasi_eyes)        if len(quasi_eyes) <1 : continue#if len(quasi_eyes) <2 : continue        cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2) #画红色矩形框标记正脸        roi = cv2.resize(face_area, (200,200), interpolation = cv2.INTER_LINEAR) #尺寸缩放到与训练集中图片的尺寸一致        cv2.imwrite("e.pgm", roi) #若识别错误,可以添加到正确的数据集,提高后续的识别率        ID_predict, confidence = model.predict(roi)#预测!!!        name = names[ID_predict]        print("name:%s, confidence:%.2f"%(name, confidence))        text = name if confidence <70 else "unknow" #10000 for EigenFaces #70 for LBPH        cv2.putText(img, text , (x, y-20), cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)#绘制绿色文字    return img    imgPath = "AA.jpg"img = cv2.imread(imgPath)cv2.imshow(imgPath, recognize(img))cv2.waitKey()cv2.destroyAllWindows()

下面是一些预测结果的展示:

单人照:

伪双人照:

三人照(杀马特的诗诗......):

胡歌不在数据集中,所以肯定会识别错误,我们需舍弃置信度过差的结果:

当然,真实的识别效果没这么理想,识别的准确度主要取决于我们的数据集的优劣。

🚀海浪学长的作品示例:

大数据算法项目

机器视觉算法项目

 

微信小程序项目

Unity3D游戏项目

最后

🏆为帮助大家节省时间,如果对开题选题,或者相关的技术有不理解,不知道毕设如何下手,都可以随时来问学长,我将根据你的具体情况,提供帮助。


http://chatgpt.dhexx.cn/article/rBMI468c.shtml

相关文章

OpenCV人脸检测及识别(深度学习)

简介 最近做了一个人脸检测以及识别的程序&#xff0c;很多的文章都有比较详细的叙述&#xff0c;可以自行查找。但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干&#xff08;不是否认质量&#xff09;&#xff0c;是侧重点问题。所以结合我遇到了一些问题&…

使用OpenCV简单实现人脸识别

简介 OpenCV是一个非常强大的计算机视觉库&#xff0c;现有的一系列特征检测和特征匹配算法&#xff0c;有很大一部分都已经在OpenCV的库中得以实现&#xff0c;故此我们只需调用OpenCV库中函数即可简单实现人脸识别。 开发环境 版本&#xff1a;Python 3.6 编辑器&#xff…

OpenCv 之(图片人脸识别)和 (摄像头读入)

##先来张人脸识别效果图&#xff1a; ##1、概述 人脸识别&#xff0c;是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流&#xff0c;并自动在图像中检测和跟踪人脸&#xff0c;进而对检测到的人脸进行脸部的一系列相关技术…

(项目笔记)opencv人脸识别

Haar级联&#xff1a; Haar特征&#xff1a;边缘特征&#xff0c;线性特征&#xff0c;中心环绕特征&#xff0c;对角线特征 这些特征组合为特征模板&#xff0c;特征模板里有白色和黑色矩形&#xff0c;模板特征即为白色矩形像素和减去黑色矩形像素和。 Haar 特征的提取简…

【opencv】基于opencv实现人脸识别,原理代码部分

上一部分我们解决了环境问题&#xff0c;这一部分我们可以开始上代码&#xff0c;环境没有配好的可以参照上一篇博客&#xff1a;环境搭建解决&#xff1a; 下面先说一下原理&#xff1a; 一.原理部分 本文基于opencv来实现人脸识别&#xff0c;大致实现流程可以描述为&#…

基于opencv的人脸识别和检测

人脸识别作为一个热门项目&#xff0c;目前有多种方法实现&#xff0c;利用python和opencv来实现&#xff0c;是一个比较简单的项目。 1.环境配置 windows平台 python版本&#xff1a;3.8.6 pycharm版本&#xff1a;2019.1.2 Opencv版本&#xff1a;4.5.3 安装了python后…

C++ OpenCV【人脸识别人眼识别】

此文章仅对人脸位置进行检测&#xff0c;使用haar级联的方法[OpenCV自带] #include <iostream> #include <opencv2/opencv.hpp> #include <vector> #include <cstdio> using namespace std; using namespace cv;//定义7种颜色&#xff0c;用于标记人脸…

通过opencv实现简单的人脸识别

文章目录 通过opencv实现简单的人脸识别1.环境配置2.收集数据集3.人脸数据的处理4.通过神经网络训练模型5.进行人脸识别6.总结 通过opencv实现简单的人脸识别 ​ 网上有很多通过opencv实现的简单人脸识别&#xff0c;本文于其他文章差别不大&#xff0c;仅为作者复现代码后的一…

基于OpenCv的人脸识别(Python完整代码)

实验环境&#xff1a;python 3.6 opencv-python 3.4.14.51 建议使用 anaconda配置相同环境 背景 人脸识别步骤 图1&#xff1a;人脸识别流程图 人脸采集 采集人脸图片的方法多种多样&#xff0c;可以直接从网上下载数据集&#xff0c;可以从视频中提取图片&#xff0c;还可以…

使用opencv实现简单的人脸识别

一、opencv模块的使用 1、简介 opencv-python是一个python绑定库&#xff0c;旨在解决计算机视觉问题。使用opencv模块&#xff0c;可以实现一些对图片和视频的操作。 2、安装 安装opencv之前需要先安装numpy, matplotlib。然后使用pip安装opencv库即可。 3、导入 使用im…

opencv实现人脸识别(c++实现)

1 说明 本文章基于opencv VS2015 实现人脸检测 2 效果 可以直接打开摄像头对人脸进行识别&#xff0c;这些标识框也会跟随你的人脸移动。隐私问题&#xff0c;我这里对图片进行了识别。 3 相关类及函数介绍 opencv中文文档 3.1 cv::VideoCapture 官方文档说明 功能 &am…

11 OpenCV图像识别之人脸识别

文章目录 1 Eigenfaces1.1 建模流程1.2 示例代码 2 Fisherfaces2.1 建模流程2.2 示例代码 3 Local Binary Histogram3.1 建模流程3.2 示例代码 OpenCV 提供了三种人脸识别方法&#xff1a; Eigenfaces Eigenfaces是一种基于PCA&#xff08;Principal Component Analysis&#…

OpenCV人脸识别

OpenCV人脸识别与口罩检测 下载文件 人脸检测 人脸检测的检测方法主要有两类:基于知识(根据眼睛,眉毛,嘴巴,鼻子等器官特征及相互几何位置关系来检测)和基于统计(将人脸看作一个二维像素矩阵,通过大量人脸图像样本构造人脸模式空间,由相似度量判断人脸是否存在). 基于知识的…

【OpenCV】 人脸识别

目录 一&#xff1a;前言 二&#xff1a;人脸识别案例 实现步骤及完整代码 步骤1 灰度化处理 步骤2 将灰度图再次进行 行列压缩 步骤3 直方图均值化 步骤4 使用模型 对每一个像素点遍历 图像甄别 人脸识别案例 源码分享 结果测试&#xff1a;可对人脸框选识别 三&…

OpenCv人脸识别开发实战

一、OpenCV简介 OpenCV&#xff08;全称&#xff1a;Open Source Computer Vision Library&#xff09;&#xff0c;是一个跨平台的计算机视觉库。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。 ​ OpenCV用C语言编写&#xff0c;它的主要接口也是C语言&#…

opencv-人脸识别

人脸识别即程序对输入的图像进行判别是否有人脸&#xff0c;并识别出有人脸的图像所对应的人。即我们常说的人脸识别一般包含了人脸检测和人脸识别两部分。下面对其在opencv中的相应模块进行分别介绍。 在opencv官网中&#xff0c;有许多推荐人脸在线数据集&#xff1a;http:/…

基于opencv的人脸识别

目录 一、OpenCV的简介 1、应用场景 二、人脸识别 1、人脸识别简介 2、人脸识别系统基本组成 三、人脸识别流程 四、主要代码注释 1、人脸采集函数 2、人脸训练函数 3、人脸识别函数&#xff08;注取消语音播报识别会流畅多&#xff09; 五、功能实现 六、演示视频…

最简单体验opencv人脸识别

所需软件&#xff1a;PyCharm 所需硬件&#xff1a;一台电脑 如果没有安装PyCharm&#xff0c;csdn上面搜一下安装教程就行&#xff0c;很简单的。 打开PyCharm&#xff0c;如果没有装opencv&#xff0c;则点击最下面的terminal&#xff0c;在终端下输入pip install opencn-p…

基于opencv的人脸识别(适合初学者)

简单易懂的人脸识别&#xff0c;学不会直接跪倒&#xff01; 一、人脸识别步骤 二、直接上代码 &#xff08;1&#xff09;录入人脸.py import cv2face_name cjw # 该人脸的名字# 加载OpenCV人脸检测分类器 face_cascade cv2.CascadeClassifier("D:/BaiduNetdiskDow…

手把手教你opencv做人脸识别(附源码+文档)

文章目录 一、环境二、使用Haar级联进行人脸检测三、Haar级联结合摄像头四、使用SSD的人脸检测五、 SSD结合摄像头人脸检测六、结语 一、环境 pip install opencv-pythonpython3.9 pycharm2020 人狠话不多&#xff0c;直接上代码&#xff0c;注释在代码里面&#xff0c;不说废…