毕业设计-机器学习人眼检测活体检测-opencv

news2024/12/24 21:39:32

目录

前言

课题背景和意义

实现技术思路

实现效果图样例


前言


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

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

大家好,这里是海浪学长毕设专题,本次分享的课题是

🎯机器学习人眼检测活体检测

课题背景和意义

小朋友用妈妈的一寸照片通过了人脸识别,打击了小度音箱的家长监督机制。

活体检测没做好。

公交车身广告上的董明珠头像,被宁波交警系统拍了照,判定成“违法闯红灯”。

活体检测没做好。

实现技术思路

活体检测,可以检测些什么?

一是纹理分析 (Texture Analysis) 。皮肤的纹理特征是重要的依据,给2D照片拍照,比起给3D真人拍照,会损失一些纹理。

二是频率分析 (Frequency Analysis) 。照片脸部的频率组成,也不像真人那样丰富。

三是可变聚焦分析 (Variable focusing Analysis) 。连拍两张照片,聚焦在不同位置,查看像素值 (Pixel Value) 的变化。

四是启发式算法 (Heuristic-Based Algorithms) 。眼动、唇动、眨眼这些动作,照片是不会有的。

五是光流算法 (Optical Flow Algorithms) 。在相邻两帧之间,检测物体运动的方向和幅度,查出2D和3D物体之间的差别。

  1. 在网络摄像头生成的每个帧中检测人脸。

  2. 对于每个检测到的脸,检测眼睛。

  3. 对于每个检测到的眼睛,检测眼睛是否睁开或关闭。

  4. 如果在某个时候检测到眼睛是睁开的,然后是闭着的,然后是睁开的,我们就断定此人已经眨了眼睛,并且程序显示他的名字(如果是人脸识别开门器,我们将授权此人进入)。

处理和编码已知人脸数据库

现在我们知道了每个想识别的人的编码,我们可以尝试通过网络摄像头识别人脸,然而,在转到这一部分之前,我们需要区分一张人脸照片和一张活人的脸。

def process_and_encode(images):
    known_encodings = []
    known_names = []
    print("[LOG] Encoding dataset ...")

    for image_path in tqdm(images):
        # 加载图片
        image = cv2.imread(image_path)
        # 将其从BGR转换为RGB
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        # 检测图像中的脸并获取其位置(方框坐标)
        boxes = face_recognition.face_locations(image, model='hog')

        # 将人脸编码为128维嵌入向量
        encoding = face_recognition.face_encodings(image, boxes)

        # 人物名称是图像来源文件夹的名称
        name = image_path.split(os.path.sep)[-2]

        if len(encoding) > 0 : 
            known_encodings.append(encoding[0])
            known_names.append(name)

    return {"encodings": known_encodings, "names": known_names}

人脸活体检测

我们的目标是在某个点上检测出一个睁闭的睁眼模式。训练一个卷积神经网络来分类眼睛是闭着的还是睁着的,所选择的模型是LeNet-5,它已经在Closed Eyes In The Wild (CEW)数据集上进行了训练,它由大约4800张24x24大小的眼睛图像组成。


from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import AveragePooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.preprocessing.image import ImageDataGenerator

IMG_SIZE = 24
def train(train_generator, val_generator):
	STEP_SIZE_TRAIN=train_generator.n//train_generator.batch_size
	STEP_SIZE_VALID=val_generator.n//val_generator.batch_size

	model = Sequential()

	model.add(Conv2D(filters=6, kernel_size=(3, 3), activation='relu', input_shape=(IMG_SIZE,IMG_SIZE,1)))
	model.add(AveragePooling2D())

	model.add(Conv2D(filters=16, kernel_size=(3, 3), activation='relu'))
	model.add(AveragePooling2D())

	model.add(Flatten())

	model.add(Dense(units=120, activation='relu'))

	model.add(Dense(units=84, activation='relu'))

	model.add(Dense(units=1, activation = 'sigmoid'))


	model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

  	print('[LOG] Training CNN')

	model.fit_generator(generator=train_generator,
	                    steps_per_epoch=STEP_SIZE_TRAIN,
	                    validation_data=val_generator,
	                    validation_steps=STEP_SIZE_VALID,
	                    epochs=20
	)
  return model

每次我们检测到一只眼睛,我们就用我们的模型来预测它的状态,并跟踪每个人的眼睛状态,因此,检测眨眼变得非常容易,它试图在眼睛状态历史中找到一个闭眼-睁眼-闭眼的过程。

def isBlinking(history, maxFrames):
    """ @history: A string containing the history of eyes status 
         where a '1' means that the eyes were closed and '0' open.
        @maxFrames: The maximal number of successive frames where an eye is closed """
    for i in range(maxFrames):
        pattern = '1' + '0'*(i+1) + '1'
        if pattern in history:
            return True
    return False

实现效果图样例

 

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视效剧情口碑双爆棚!Netflix 现象级剧集《怪奇物语》第四季神级视效专访大揭秘!

刷新 Netflix 收视记录的超火剧集《怪奇物语》(Stranger Things)第四季视效剧情口碑双爆棚,无疑是2022年最值得一看的现象级剧集之一。第四季共九集,分上下两部,分别在今年5月和7月上线,目前豆瓣评分已经稳…

分享知识付费系统变现的方式_知识付费系统开发步骤

一、知识付费赚钱的方式 首先给大家讲讲知识付费赚钱的两大方式,大家可以根据自己的情况来选择做哪种。 1、自己做知识付费赚钱 自己做知识付费需要自己有一套成熟的理念观点,能输出成优质的内容传授给他人。可以将自己的知识技能制作成音频、视频、图…

【Python】三、内置函数

文章目录实验目的一、abs()二、int() / float() / str() / pow()1、int()2、float()3、str()4、pow()三、len() / id() / type()1、len()2、id()3、type()四、编写程序,实现输入一个正的实数x,分别输出x的整数部分和小数部分。1.设计思路2.设计算法3.参考…

南芯科技在科创板提交注册:业绩增速迅猛,股东包括红杉、顺为等

近日,上海南芯半导体科技股份有限公司(下称“南芯科技”)在上海证券交易所科创板递交招股书(注册稿)。据贝多财经了解,南芯科技于2022年6月21日在科创板递交上市申请,11月18日获得上市委会议通过…

堆(堆排序和模拟堆)

如何手写一个堆 下标从1开始,如果从0开始的话,他的左儿子的下标就等于0*2 0,麻烦 手写堆可以实现的操作:1,插入一个数 2,求集合当中的最小值 3,删除最小值 4,删除任意一个元素…

基于樽海鞘群算法的线性规划求解matlab程序

基于樽海鞘群算法的线性规划求解matlab程序 1 樽海鞘群优化算法 1.1 生物启示 通过研究海底生物樽海鞘在觅食过程中群体呈链状向食物方向移动的行为活动,学者Mirjalili在2017年提出的一种新型启发式仿生算法—樽海鞘群智能优化算法(Salp Swarm Algori…

javascript三种事件模型 + Dom事件流 +事件委托

目录三种事件模型● DOM0 级模型:● IE 事件模型:● DOM2 级事件模型:DOM事件流事件委托target/currentTarget/relateTarget的区别三种事件模型 ● DOM0 级模型: 这种模型不会传播,所以没有事件流的概念,…

Golang远程调试Debug环境

目录背景软件版本环境搭建安装Golang环境安装dlv环境启动远程环境Goland 连接远程环境参考背景 最近在做 Operator 的二次开发,开发语言是Golang。Operator 开发时候需要用到k8s集群,遗憾的是k8s编排的容器网络与本地网络不通,无法直接进行d…

十部必看特种部队电影之《勇者行动》

这部特种部队题材电影是馆长收藏了很久的网盘资源,今天拿出来分享给大家。

远程直接连接 MySQL 数据库,阿里云腾讯云允许远程连接教程

不使用SSH登录远程主机直接连接远程数据库 文章目录修改MySQL登录权限1、登录MySQL2、修改mysql库的user表3、防火墙开放3306端口Navicat直接连接远程数据库报错【报错】Cant connect to MySQL server (10060)1、网络问题2、mysql账户设置3、防火墙端口未开放4、查看云服务器商…

JWT -- Json Web token

JWT 的背景知识可以看这篇文章: JSON Web Token 入门教程 JWT 由三个部分组成: Header(头部)Payload(负载)Signature(签名) 在分布式系统下,存在跨session的问题,则使用…

[附源码]Python计算机毕业设计Django毕业生就业管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

cdn加速华为云obs桶文件配置过程(详细)

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 前面写了一篇文章,jeecg-boot中上传图片到华为云obs云存储中 主要介绍了下,如何使用jeect-boot微服务将文件上传至obs中。 但是上传是没有问题,…

目前看过最全的一线大厂面试题(题 + 详解),你所不知道的都在这

前言 在过 1 个月即将进入 2023,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的 java 开发朋友跳槽面试,无论一面还是二面,都开始考验一个 Java 程序员的技术功底和…

FL Studio2022水果编曲音乐制作软件自带完整插件

FL Studio 2022是一款非常好用的音乐制作软件,又称水果编曲软件,软件集合了录音、混音、编辑等多种功能于一体,能够完成各种各样的音乐编曲工作,强大的音乐制作功能受到了很多用户的喜爱,帮你完成各种类型音乐的编曲制…

《500强高管谈VE》-企业经营与VE活动

文章出处:日本VE协会杂志文章翻译:泰泽项目部 关注泰泽:实现高利润企业 《500强高管谈VE》-企业经营与VE活动 作者:兄弟工业常务董事渡边共祥 由墨西哥货币不稳定引发的此次日元升值,一度跌破80日元,呈现…

Servlet程序及部署方式(Tomcat+Smart Tomcat)

目录 1、Servlet是什么? 2、Servlet程序【例——hello world】 2.1、创建项目 2.2、引入Servlet依赖 2.3、创建目录结构 2.4、编写代码 2.5、打包程序 2.6、部署程序 2.7、验证程序 3、更方便的部署方式——Smart Tomcat 1、Servlet是什么? Se…

初识计算机网络

目录 网络的发展 重新看待计算机结构 大型存储平台 认识 "协议" 网络和OS之间的关系 初识网络协议 协议分层 OSI七层模型 TCP/IP五层(或四层)模型 网络传输基本流程 局域网通信的原理 如果进行跨网络传输 网络通信里面的基本轮廓 数据包封装和分用…

多线程同步

文章目录一、多线程同步竞争与协作互斥的概念同步的概念互斥与同步的实现和使⽤锁信号量⽣产者-消费者问题经典同步问题读者-写者问题一、多线程同步 竞争与协作 在单核 CPU 系统⾥,为了实现多个程序同时运⾏的假象,操作系统通常以时间⽚调度的⽅式&am…

为dev c++配置图形开发环境easyx之mingw32

easyx官方的文档在说明如何配置环境上面不太详细,所以就有了我的那篇博文为dev c配置图形开发环境easyx,默认的是在64位的编译器TDM-gcc下配置的,也就是我们配置的easyx最终都是放在mingw64文件夹下的,5.1版本后的dev c内置的编译…