高端品牌网站建设图片网站建设公司厂
2026/1/13 17:06:13 网站建设 项目流程
高端品牌网站建设图片,网站建设公司厂,可以做试卷的网站英语怎么说,做企业网站软件文章目录 0 前言1 项目运行效果2 课题背景3 Dlib人脸检测与特征提取3.1 简介3.2 Dlib优点 4 疲劳检测算法4.1 眼睛检测算法4.2 打哈欠检测算法4.3 点头检测算法 5 PyQt55.1 简介5.2相关界面代码 6 最后 0 前言 #x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升…文章目录0 前言1 项目运行效果2 课题背景3 Dlib人脸检测与特征提取3.1 简介3.2 Dlib优点4 疲劳检测算法4.1 眼睛检测算法4.2 打哈欠检测算法4.3 点头检测算法5 PyQt55.1 简介5.2相关界面代码6 最后0 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是毕业设计 基于机器视觉的驾驶疲劳检测系统(源码论文)学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点4分 项目分享:见文末!1 项目运行效果视频效果毕业设计 机器视觉驾驶疲劳检测系统2 课题背景为了有效监测驾驶员是否疲劳驾驶、避免交通事故的发⽣,本项目利⽤⼈脸特征点进⾏实时疲劳驾驶检测的新⽅法。对驾驶员驾驶时的⾯部图像进⾏实时监控,⾸先检测⼈脸,并利⽤ERT算法定位⼈脸特征点;然后根据⼈脸眼睛区域的特征点坐标信息计算眼睛纵横⽐EAR来描述眼睛张开程度,根据合适的EAR阈值可判断睁眼或闭眼状态;最后基于EAR实测值和EAR阈值对监控视频计算闭眼时间⽐例(PERCLOS)值度量驾驶员主观疲劳程度,将其与设定的疲劳度阈值进⾏⽐较即可判定是否疲劳驾驶。3 Dlib人脸检测与特征提取3.1 简介Dlib是一个基于c开发的开源数据工具库,其中包含了不少的机器学习的成熟算法与模型,相对于tensorflow和PyTorch,它用于图像处理以及人脸面部特征提取、分类及对比这几个方面比较具有通用性和优越性,因此,Dlib正在越来越广泛地应用在人脸识别技术领域。Dlib具有独立使用的可移植代码。Dlib中的代码使用c语言进行开发而成,使用独立封装,在不借助第三方数据库的情况下,可以直接移植到自己所需要设计的项目中进行使用。3.2 Dlib优点Dlib拥有全面的文档说明。作为一个开源的人脸数据库训练集,Dlib中有很多功能齐全的程序和文件,从人性化的角度而言的,Dlib在这一点上做的是非常不错的,因为它为每一个程序文档和文件都做了相对应的注释,这样开发者就可以迅速准确的调集程序文档来完成自己所需要的项目功能。Dlib涵盖了支持功能完备的深度学习以及图像处理的各类算法。Dlib为开发者提供了机器深度学习的各类成熟的完备算法,并且在图像处理方面也为开发者带来了能够解决大多数实质问题的优良算法。例如基于SVM的递归和分类算法,以及专门用于面对大规模分类和递归的降维算法。当然还有能够对未知函数进行预分类和预测的相关向量机,其分类和预测训练是基于贝叶斯框架。4 疲劳检测算法该系统采用Dlib库中人脸68个关键点检测shapepredictor68facelandmarks.dat的dat模型库及视频中的人脸之后返回人脸特征点坐标、人脸框及人脸角度等。本系统利用这68个关键点对驾驶员的疲劳状态进行检测算法如下初始化Dlib的人脸检测器(HOG)然后创建面部标志物预测使用dlib.getfrontalfacedetector() 获得脸部位置检测器使用dlib.shapepredictor获得脸部特征位置检测器分别获取左、右眼面部标志的索引打开cv2本地摄像头。Dlib库68个特征点模型如图所示4.1 眼睛检测算法基于EAR算法的眨眼检测当人眼睁开时EAR在某个值域范围内波动当人眼闭合时EAR迅速下降理论上接近于0。当EAR低于某个阈值时眼睛处于闭合状态当EAR由某个值迅速下降至小于该阈值再迅速上升至大于该阈值则判断为一次眨眼。为检测眨眼次数需要设置同一次眨眼的连续帧数。眨眼速度较快一般13帧即可完成眨眼动作。眼部特征点如图EAR计算公式如下当后帧眼睛宽高比与前一帧差值的绝对值(EAR)大于0.2时认为驾驶员在疲劳驾驶。68点landmark中可以看到37-42为左眼43-48为右眼右眼开合度可以通过以下公式眼睛睁开度从大到小为进入闭眼期从小到大为进入睁眼期计算最长闭眼时间(可用帧数来代替)。闭眼次数为进入闭眼、进入睁眼的次数。通过设定单位时间内闭眼次数、闭眼时间的阈值判断人是否已经疲劳了。相关代码# 疲劳检测检测眼睛和嘴巴的开合程度fromscipy.spatialimportdistanceasdistfromimutils.videoimportFileVideoStreamfromimutils.videoimportVideoStreamfromimutilsimportface_utilsimportnumpyasnp# 数据处理的库 numpyimportargparseimportimutilsimporttimeimportdlibimportcv2importmathimporttimefromthreadingimportThreaddefeye_aspect_ratio(eye):# 垂直眼标志XY坐标Adist.euclidean(eye[1],eye[5])# 计算两个集合之间的欧式距离Bdist.euclidean(eye[2],eye[4])# 计算水平之间的欧几里得距离# 水平眼标志XY坐标Cdist.euclidean(eye[0],eye[3])# 眼睛长宽比的计算ear(AB)/(2.0*C)# 返回眼睛的长宽比returnear4.2 打哈欠检测算法基于MAR算法的哈欠检测利用Dlib提取嘴部的6个特征点通过这6个特征点的坐标(51、59、53、57的纵坐标和49、55的横坐标)来计算打哈欠时嘴巴的张开程度。当一个人说话时点51、59、53、57的纵坐标差值增大从而使MAR值迅速增大反之当一个人闭上嘴巴时MAR值迅速减小。嘴部主要取六个参考点如下图计算公式通过公式计算MAR来判断是否张嘴及张嘴时间从而确定驾驶员是否在打哈欠。阈值应经过大量实验能够与正常说话或哼歌区分开来。为提高判断的准确度采用双阈值法进行哈欠检测即对内轮廓进行检测结合张口度与张口时间进行判断。Yawn为打哈欠的帧数N为1 min内总帧数设双阈值法哈欠检测的阈值为10%当打哈欠频率Freq10%时则认为驾驶员打了1个深度哈欠或者至少连续2个浅哈欠此时系统进行疲劳提醒。相关代码# 疲劳检测检测眼睛和嘴巴的开合程度fromscipy.spatialimportdistanceasdistfromimutils.videoimportFileVideoStreamfromimutils.videoimportVideoStreamfromimutilsimportface_utilsimportnumpyasnp# 数据处理的库 numpyimportargparseimportimutilsimporttimeimportdlibimportcv2importmathimporttimefromthreadingimportThreaddefmouth_aspect_ratio(mouth):# 嘴部Anp.linalg.norm(mouth[2]-mouth[10])# 51, 59Bnp.linalg.norm(mouth[4]-mouth[8])# 53, 57Cnp.linalg.norm(mouth[0]-mouth[6])# 49, 55mar(AB)/(2.0*C)returnmar相应的演示效果如下4.3 点头检测算法基于HPE算法的点头检测HPE(Head Pose Estimation,HPE)算法步骤2D人脸关键点检测3D人脸模型匹配求解3D点和对应2D点的转换关系根据旋转矩阵求解欧拉角。检测过程中需要使用世界坐标系(UVW)、相机坐标系(XYZ)、图像中心坐标系(uv)和像素坐标系(xy)。一个物体相对于相机的姿态可以使用旋转矩阵和平移矩阵来表示。平移矩阵物体相对于相机的空间位置关系矩阵用T表示旋转矩阵物体相对于相机的空间姿态关系矩阵用R表示。因此必然少不了坐标系转换。如图所示于是世界坐标系(UVW)、相机坐标系(XYZ)、图像中心坐标系(uv)和像素坐标系(xy)四兄弟闪亮登场。相对关系如下世界坐标系转换到相机坐标相机坐标系转换到像素坐标系像素坐标系与世界坐标系的关系为图像中心坐标系转换到像素坐标系得到旋转矩阵后求欧拉角设定参数阈值为0.3在一个时间段如10 s内当低头欧拉角|Pitch|≥20°或者头部倾斜欧拉角|Roll|≥20°的时间比例超过0.3时则认为驾驶员处于瞌睡状态发出预警。相关效果展示5 PyQt55.1 简介Qt是一个跨平台的 C 开发库主要用来开发图形用户界面程序(GUI)当然也可以开发不带界面的命令行程序。但Qt 是纯 C 开发的PyQt5是基于图形程序框架Qt5的Python语言实现由一组Python模块构成。QLabel控件用来显示文本或图像。QLineEdit窗口控件提供了一个单页面的单行文本编辑器。QTextEdit窗口控件提供了一个单页面的多行文本编辑器。QPushButton窗口控件提供了一个命令按钮。QRadioButton控件提供了一个单选钮和一个文本或像素映射标签。QCheckBox窗口控件提供了一个带文本标签的复选框。QspinBox控件允许用户选择一个值要么通过按向上/向下键增加/减少当前显示值要么直接将值输入到输入框中。QScrollBar窗口控件提供了一个水平的或垂直的滚动条。QSlider控件提供了一个垂直的或水平的滑动条。QComboBox控件一个组合按钮用于弹出列表。QMenuBar控件提供了一个横向菜单栏。QStatusBar控件提供了一个适合呈现状态信息的水平条通常放在QMainWindow的底部。QToolBar控件提供了一个工具栏可以包含多个命令按钮通常放在QMainWindow的顶部。QListView控件可以显示和控制可选的多选列表可以设置ListMode或IconMode。QPixmap控件可以在绘图设备上显示图像通常放在QLabel或QPushButton类中。Qdialog控件对话框窗口的基类。QWidget是所有用户界面类的基类它能接收所有的鼠标、键盘和其他系统窗口事件。没有被嵌入到父窗口中的Widget会被当作一个窗口来调用当然它也可以使用setWindowFlags(Qt.WindowFlags)函数来设置窗口的显示效果。QWidget的构造函数可以接收两个参数其中第一个参数是该窗口的父窗口第二个参数是该窗口的Flag也就是- Qt.WindowFlags。根据父窗口来决定Widget是嵌入到父窗口中还是被当作一个独立的窗口来调用根据Flag来设置Widget窗口的一些属性。QMainWindow主窗口一般是应用程序的框架在主窗口中可以添加所需要的Widget比如添加菜单栏、工具栏、状态栏等。主窗口通常用于提供一个大的中央窗口控件如文本编辑或者绘制画布以及周围的菜单栏、工具栏和状态栏。QMainWindow常常被继承这使得封装中央控件、菜单栏工具栏以及窗口状态变得更容易也可以使用Qt Designer来创建主窗口。5.2相关界面代码#部分代码fromPyQt5.QtCoreimportQTimer,QThread,pyqtSignal,QRegExp,QtfromPyQt5.QtGuiimportQImage,QPixmap,QIcon,QTextCursor,QRegExpValidator,QPainterfromPyQt5.QtWidgetsimport*fromPyQt5.uicimportloadUifromui.untitledimportUi_Formfromcore2importCoreUIfromdataRecordimportDataRecordUIfromdataManageimportDataManageUIfromui.picimportUi_Form1fromPyQt5importQtCoreimportsysimportosfromPyQt5importQtGuifromPyQt5importQtCorefromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*fromPyQt5.QtGuiimport*importsysclassMain(CoreUI,QMainWindow):def__init__(self):super(Main,self).__init__()qssStyleopen(os.path.join(sip/123.qss)).read()self.setStyleSheet(qssStyle)self.setWindowFlag(QtCore.Qt.FramelessWindowHint)#设置无边框 但是按键得重新设置了#self.startWebcamButton()self.startWebcamButton.setStyleSheet(startWebcamButton{color:black}startWebcamButton:hover{color:red}startWebcamButton{background-color:rgb(180,180,180)}startWebcamButton{border:2px}startWebcamButton{border-radius:10px}startWebcamButton{padding:2px 4px}startWebcamButton{font-size:14pt})self.pushButton.setStyleSheet(#pushButton {color:rgb(255,255,255);border-image:url(sip/anniu.png);text-aligh:left;font-size:18px;font-weight:bold;};)self.pushButton_2.setStyleSheet(#pushButton_2 {color:rgb(255,255,255);border-image:url(sip/anniu.png);text-aligh:left;font-size:18px;font-weight:bold;};)self.pushButton_3.setStyleSheet(#pushButton_3 {color:rgb(255,255,255);border-image:url(sip/anniu.png);text-aligh:left;font-size:18px;font-weight:bold;};)self.pushButton_4.setStyleSheet(#pushButton_4 {color:rgb(255,255,255);border-image:url(sip/anniu.png);text-aligh:left;font-size:18px;font-weight:bold;};)#self.setStyleSheet(color:white)#颜色全变self.pushButton_4.clicked.connect(QCoreApplication.instance().quit)defclosewin(self):self.close()defmouseMoveEvent(self,e:QMouseEvent):# 重写移动事件self._endPose.pos()-self._startPos self.move(self.pos()self._endPos)defmousePressEvent(self,e:QMouseEvent):ife.button()Qt.LeftButton:self._isTrackingTrueself._startPosQPoint(e.x(),e.y())defmouseReleaseEvent(self,e:QMouseEvent):ife.button()Qt.LeftButton:self._isTrackingFalseself._startPosNoneself._endPosNonedefpaintEvent(self,a0:QtGui.QPaintEvent)-None:painterQPainter(self)pixmapQPixmap(sip/5.jfif)painter.drawPixmap(self.rect(),pixmap)#self.setupUi(self)def open(self): path rsip/new QDesktopServices.openUrl(QUrl.fromLocalFile(path))classChild(DataRecordUI,QMainWindow):def__init__(self):super(Child,self).__init__()self.setWindowFlag(QtCore.Qt.FramelessWindowHint)qssStyleopen(os.path.join(sip/123.qss)).read()self.setStyleSheet(qssStyle)#self.setupUi(self)defOPEN(self):self.show()defclosewin(self):self.close()defreturnmain(self):self.pushButton.clicked.connect(main.show)self.pushButton.clicked.connect(ch.hide)defpaintEvent(self,a0:QtGui.QPaintEvent)-None:painterQPainter(self)pixmapQPixmap(sip/5.jfif)painter.drawPixmap(self.rect(),pixmap)classChild1(DataManageUI,QMainWindow):def__init__(self):super(Child1,self).__init__()self.setWindowFlag(QtCore.Qt.FramelessWindowHint)qssStyleopen(os.path.join(sip/123.qss)).read()self.setStyleSheet(qssStyle)defOPEN(self):self.show()defclosewin(self):self.close()defreturnmain(self):self.pushButton.clicked.connect(main.show)self.pushButton.clicked.connect(ch1.hide)defpaintEvent(self,a0:QtGui.QPaintEvent)-None:painterQPainter(self)pixmapQPixmap(sip/5.jfif)painter.drawPixmap(self.rect(),pixmap)classhelp(Ui_Form,QWidget):def__init__(self):super(help,self).__init__()self.setWindowFlag(QtCore.Qt.FramelessWindowHint)self.setupUi(self)qssStyleopen(os.path.join(sip/123.qss)).read()self.setStyleSheet(qssStyle)qssStyle1 open(os.path.join(sip/123.qss)).read() self.setStyleSheet(qssStyle1)defOPEN(self):self.show()defreturnmain(self):self.pushButton.clicked.connect(main.show)self.pushButton.clicked.connect(Help.hide)defpaintEvent(self,a0:QtGui.QPaintEvent)-None:painterQPainter(self)pixmapQPixmap(sip/5.jfif)painter.drawPixmap(self.rect(),pixmap)classadd(Ui_Form1,QWidget):def__init__(self):super(add,self).__init__()#self.setWindowFlag(QtCore.Qt.FramelessWindowHint)self.setupUi(self)self.setWindowFlag(QtCore.Qt.FramelessWindowHint)qssStyleopen(os.path.join(sip/123.qss)).read()self.setStyleSheet(qssStyle)#qssStyle open(os.path.join(123.qss)).read()self.pushButton.clicked.connect(self.close)#self.setStyleSheet(qssStyle)defOPEN(self):self.show()defpaintEvent(self,a0:QtGui.QPaintEvent)-None:painterQPainter(self)pixmapQPixmap(./sip/5.jfif)painter.drawPixmap(self.rect(),pixmap)if__name____main__:#QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)appQApplication(sys.argv)mainMain()chChild()ch1Child1()Helphelp()ADDadd()main.show()#main.setStyleSheet({border-image:url(sip/background.jpg)})main.pushButton.clicked.connect(main.hide)main.pushButton.clicked.connect(ch.OPEN)main.pushButton_2.clicked.connect(main.hide)main.pushButton_2.clicked.connect(ch1.OPEN)main.pushButton_3.clicked.connect(main.hide)main.pushButton_3.clicked.connect(Help.OPEN)main.pushButton_11.clicked.connect(ADD.OPEN)ch.pushButton.clicked.connect(ch.returnmain)ch1.pushButton.clicked.connect(ch1.returnmain)Help.pushButton.clicked.connect(Help.returnmain)#ADD.pushButton.clicked.connect(ADD.close)sys.exit(app.exec_())篇幅有限更多详细设计见设计论文6 最后项目包含内容1万4千字 完整详细设计论文 项目分享:见文末!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询