怎么在搜索引擎做网站登记,佛山网站建设thual,xd软件可做网站吗,网站规划设计的一般流程文章目录 0 前言1 项目运行效果2 设计概要3 相关技术3.1 Dlib3.2 疲劳检测算法3.3 YOLOV5算法 4 最后 0 前言
#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕设题目缺少创新和亮点#xff0c;往往达不到毕业答辩的要求#xff0c;这两…文章目录0 前言1 项目运行效果2 设计概要3 相关技术3.1 Dlib3.2 疲劳检测算法3.3 YOLOV5算法4 最后0 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是毕业设计 深度学习驾驶行为识别系统源码论文学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点4分 项目分享:见文末!1 项目运行效果视频效果毕业设计 深度学习驾驶行为识别系统2 设计概要大多数的交通事故是由于驾驶员的不规范驾驶所导致的例如酒驾、疲劳驾驶、失误操作等对人们的日常出行安全造成了威胁。随着人工智能的崛起而出现的自动驾驶技术针对车辆行驶过程中的操作进行规范可以有效避免人为操作而导致的交通事故。自动驾驶关键技术之一就是对于驾驶者行为的准确检测与识别。但是驾驶行为类别多要对其准确检测与识别存在一定困难本文采用深度学习中的目标检测算法来解决驾驶者的行为的检测与识别问题并针对模型的网络结构进行分析与改进来达到更好的识别效果。本文提出利用计算机视觉来进行驾驶行为检测与识别一是提供自动驾驶场景辅助功能二是也提高了检测效率。从端到端的目标检测识别技术出发基于yoloV5算法的思路意图探索出一种检测精度高、速度快的驾驶行为识别检测算法。目前图像识别算法受周围环境影响因素较大尤其是出现遮挡、光照、极端的偏转角度以及低分辨率等问题的影响加大了检测在实际应用中所要面临的挑战。而基于深度学习的方法具有强大的特征学习能力以及较高的检测精度所以优化识别精度、削弱检测对光照的敏感度能够更好的帮助我们对自然场景下驾驶行为的检测与检测。3 相关技术3.1 Dlib简介Dlib是一个基于c开发的开源数据工具库,其中包含了不少的机器学习的成熟算法与模型,相对于tensorflow和PyTorch,它用于图像处理以及人脸面部特征提取、分类及对比这几个方面比较具有通用性和优越性,因此,Dlib正在越来越广泛地应用在人脸识别技术领域。Dlib具有独立使用的可移植代码。Dlib中的代码使用c语言进行开发而成,使用独立封装,在不借助第三方数据库的情况下,可以直接移植到自己所需要设计的项目中进行使用。Dlib优点Dlib拥有全面的文档说明。作为一个开源的人脸数据库训练集,Dlib中有很多功能齐全的程序和文件,从人性化的角度而言的,Dlib在这一点上做的是非常不错的,因为它为每一个程序文档和文件都做了相对应的注释,这样开发者就可以迅速准确的调集程序文档来完成自己所需要的项目功能。Dlib涵盖了支持功能完备的深度学习以及图像处理的各类算法。Dlib为开发者提供了机器深度学习的各类成熟的完备算法,并且在图像处理方面也为开发者带来了能够解决大多数实质问题的优良算法。例如基于SVM的递归和分类算法,以及专门用于面对大规模分类和递归的降维算法。当然还有能够对未知函数进行预分类和预测的相关向量机,其分类和预测训练是基于贝叶斯框架。相关代码import matplotlib.pyplotaspltimport dlibimport numpyasnpimport globimport re#正脸检测器detectordlib.get_frontal_face_detector()#脸部关键形态检测器spdlib.shape_predictor(rD:LBJAVAscriptshape_predictor_68_face_landmarks.dat)#人脸识别模型facerec dlib.face_recognition_model_v1(rD:LBJAVAscriptdlib_face_recognition_resnet_model_v1.dat)#候选人脸部描述向量集descriptors[]photo_locations[]for photo in glob.glob(rD:LBJAVAscriptfaces*.jpg):photo_locations.append(photo)imgplt.imread(photo)imgnp.array(img)#开始检测人脸detsdetector(img,1)for k,d in enumerate(dets):#检测每张照片中人脸的特征shapesp(img,d)face_descriptorfacerec.compute_face_descriptor(img,shape)vnp.array(face_descriptor)descriptors.append(v)#输入的待识别的人脸处理方法相同imgplt.imread(rD:test_photo10.jpg)imgnp.array(img)detsdetector(img,1)#计算输入人脸和已有人脸之间的差异程度比如用欧式距离来衡量differences[]for k,d in enumerate(dets):shapesp(img,d)face_descriptorfacerec.compute_face_descriptor(img,shape)d_testnp.array(face_descriptor)#计算输入人脸和所有已有人脸描述向量的欧氏距离for i in descriptors:distancenp.linalg.norm(i-d_test)differences.append(distance)#按欧式距离排序 欧式距离最小的就是匹配的人脸candidate_countlen(photo_locations)candidates_dictdict(zip(photo_locations,differences))candidates_dict_sortedsorted(candidates_dict.items(),keylambda x:x[1])#matplotlib要正确显示中文需要设置plt.rcParams[font.family] [sans-serif]plt.rcParams[font.sans-serif] [SimHei]plt.rcParams[figure.figsize] (20.0,70.0)axplt.subplot(candidate_count1,4,1)ax.set_title(输入的人脸)ax.imshow(img)for i,(photo,distance)in enumerate(candidates_dict_sorted):imgplt.imread(photo)face_namephoto_namere.search(r([^\]*).jpg$,photo)if photo_name:face_namephoto_name[1]axplt.subplot(candidate_count1,4,i2)ax.set_xticks([])ax.set_yticks([])ax.spines[top].set_visible(False)ax.spines[right].set_visible(False)ax.spines[bottom].set_visible(False)ax.spines[left].set_visible(False)if i0:ax.set_title(最匹配的人脸nnface_namenn差异度str(distance))else:ax.set_title(face_namenn差异度str(distance))ax.imshow(img)plt.show()3.2 疲劳检测算法该系统采用Dlib库中人脸68个关键点检测shapepredictor68facelandmarks.dat的dat模型库及视频中的人脸之后返回人脸特征点坐标、人脸框及人脸角度等。本系统利用这68个关键点对驾驶员的疲劳状态进行检测算法如下初始化Dlib的人脸检测器(HOG)然后创建面部标志物预测使用dlib.getfrontalfacedetector() 获得脸部位置检测器使用dlib.shapepredictor获得脸部特征位置检测器分别获取左、右眼面部标志的索引打开cv2本地摄像头。Dlib库68个特征点模型如图所示眼睛检测算法基于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)# 返回眼睛的长宽比returnear打哈欠检测算法基于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点头检测算法基于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时则认为驾驶员处于瞌睡状态发出预警。3.3 YOLOV5算法简介我们选择当下YOLO最新的卷积神经网络YOLOv5来进行检测是否存在玩手机、抽烟、喝水这三种行为。6月9日Ultralytics公司开源了YOLOv5离上一次YOLOv4发布不到50天。而且这一次的YOLOv5是完全基于PyTorch实现的在我们还对YOLOv4的各种高端操作、丰富的实验对比惊叹不已时YOLOv5又带来了更强实时目标检测技术。按照官方给出的数目现版本的YOLOv5每个图像的推理时间最快0.007秒即每秒140帧FPS但YOLOv5的权重文件大小只有YOLOv4的1/9。目标检测架构分为两种一种是two-stage一种是one-stage区别就在于 two-stage 有region proposal过程类似于一种海选过程,网络会根据候选区域生成位置和类别而one-stage直接从图片生成位置和类别。今天提到的 YOLO就是一种 one-stage方法。YOLO是You Only Look Once的缩写,意思是神经网络只需要看一次图片就能输出结果。YOLO 一共发布了五个版本其中 YOLOv1 奠定了整个系列的基础后面的系列就是在第一版基础上的改进为的是提升性能。YOLOv5有4个版本性能如图所示网络架构图篇幅有限更多详细设计见设计论文4 最后项目包含内容完整详细设计论文 项目分享:见文末!