毕设项目分享 机器视觉网络课堂专注检测系统 1 前言今天学长向大家介绍一个机器视觉的毕设项目基于机器视觉网络课堂专注检测系统项目运行效果毕业设计 机器视觉网络课堂专注检测系统项目分享见主页任意置顶文章2 相关技术2.1CNN简介卷积神经网络(CNN)是由多层卷积结构组成的一种神经网络。卷积结构可以减少网络的内存占用、参数和模型的过拟合。卷积神经网络是一种典型的深度学习算法。广泛应用于视觉处理和人工智能领域特别是在图像识别和人脸识别领域。与完全连接的神经网络相比CNN输入是通过交换参数和局部感知来提取图像特征的图像。卷积神经网络是由输入层、卷积层、池化层、全连接层和输出层五层结构组成。其具体模型如下图所示。(1)输入层(Input layer)输入层就是神经网络的输入端口就是把输入传入的入口。通常传入的图像的RGB三个通道的数据。数据的输入一般是多维的矩阵向量其中矩阵中的数值代表的是图像对应位置的像素点的值。(2)卷积层(Convolution layer)卷积层在CNN中主要具有学习功能它主要提取输入的数据的特征值。(3)池化层(Pooling layer)池化层通过对卷积层的特征值进行压缩来获得自己的特征值减小特征值的矩阵的维度减小网络计算量加速收敛速度可以有效避免过拟合问题。(4)全连接层(Full connected layer)全连接层主要实现是把经过卷积层和池化层处理的数据进行集合在一起形成一个或者多个的全连接层该层在CNN的功能主要是实现高阶推理计算。(5)输出层(Output layer)输出层在全连接层之后是整个神经网络的输出端口即把处理分析后的数据进行输出。2.2 人脸识别算法利用dlib实现人脸68个关键点检测并标注关键代码importcv2# 加载人脸识别模型face_rec_model_pathdlib_face_recognition_resnet_model_v1.datfacerecdlib.face_recognition_model_v1(face_rec_model_path)# 加载特征点识别模型predictor_pathshape_predictor_5_face_landmarks.datpredictordlib.shape_predictor(predictor_path)# 读取图片img_pathstep1/image/face.jpgimgcv2.imread(img_path)# 转换为灰阶图片graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 正向人脸检测器将图像detectordlib.get_frontal_face_detector()# 使用人脸识别模型来检测图像中的人脸facesdetector(gray,1)# 使用特征点识别模型来检测人脸中的特征fori,faceinenumerate(faces):# 获取人脸特征点shapepredictor(img,face)2.3专注检测原理总体流程主要通过电脑摄像头去实时的抓拍学生当前的状态和行为不间断的采集学生上课时的面部表情和眼睛注视的方向利用CNN提取相应的特征数据并进行分析处理若对应输出的判断值大于设置的阈值时则认为学生在走神没有认真学习。并且对拍摄时间进行计时在界面上实时输出该学生在课堂上的有效学习时间和学生在课堂上专注时间的比例并进行存入表格中。眼睛检测算法基于dlib人脸识别68特征点检测、分别获取左右眼面部标志的索引通过opencv对视频流进行灰度化处理检测出人眼的位置信息。人脸特征点检测用到了dlibdlib有两个关键函数dlib.get_frontal_face_detector()和dlib.shape_predictor(predictor_path)。前者是内置的人脸检测算法使用HOG pyramid检测人脸区域的界限bounds。后者是用来检测一个区域内的特征点并输出这些特征点的坐标它需要一个预先训练好的模型通过文件路径的方法传入才能正常工作。使用开源模型shape_predictor_68_face_landmarks.dat可以得到68个特征点位置的坐标连起来后可以有如图所示的效果红色是HOG pyramid检测的结果绿色是shape_predictor的结果仅把同一个器官的特征点连线。通过计算眼睛的宽高比来确定专注状态基本原理计算 眼睛长宽比 Eye Aspect RatioEAR.当人眼睁开时EAR在某个值上下波动当人眼闭合时EAR迅速下降理论上会接近于零当时人脸检测模型还没有这么精确。所以我们认为当EAR低于某个阈值时眼睛处于闭合状态。为检测眨眼次数需要设置同一次眨眼的连续帧数。眨眼速度比较快一般1~3帧就完成了眨眼动作。两个阈值都要根据实际情况设置。关键代码# -*- coding: utf-8 -*-# import the necessary packagesfromscipy.spatialimportdistanceasdistfromimutils.videoimportFileVideoStreamfromimutils.videoimportVideoStreamfromimutilsimportface_utilsimportnumpyasnp# 数据处理的库 numpyimportargparseimportimutilsimporttimeimportdlibimportcv2defeye_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# 定义两个常数# 眼睛长宽比# 闪烁阈值EYE_AR_THRESH0.2EYE_AR_CONSEC_FRAMES3# 初始化帧计数器和眨眼总数COUNTER0TOTAL0# 初始化DLIB的人脸检测器HOG然后创建面部标志物预测print([INFO] loading facial landmark predictor...)# 第一步使用dlib.get_frontal_face_detector() 获得脸部位置检测器detectordlib.get_frontal_face_detector()# 第二步使用dlib.shape_predictor获得脸部特征位置检测器predictordlib.shape_predictor(D:/myworkspace/JupyterNotebook/fatigue_detecting/model/shape_predictor_68_face_landmarks.dat)# 第三步分别获取左右眼面部标志的索引(lStart,lEnd)face_utils.FACIAL_LANDMARKS_IDXS[left_eye](rStart,rEnd)face_utils.FACIAL_LANDMARKS_IDXS[right_eye]# 第四步打开cv2 本地摄像头capcv2.VideoCapture(0)# 从视频流循环帧whileTrue:# 第五步进行循环读取图片并对图片做维度扩大并进灰度化ret,framecap.read()frameimutils.resize(frame,width720)graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 第六步使用detector(gray, 0) 进行脸部位置检测rectsdetector(gray,0)# 第七步循环脸部位置信息使用predictor(gray, rect)获得脸部特征位置的信息forrectinrects:shapepredictor(gray,rect)# 第八步将脸部特征信息转换为数组array的格式shapeface_utils.shape_to_np(shape)# 第九步提取左眼和右眼坐标leftEyeshape[lStart:lEnd]rightEyeshape[rStart:rEnd]# 第十步构造函数计算左右眼的EAR值使用平均值作为最终的EARleftEAReye_aspect_ratio(leftEye)rightEAReye_aspect_ratio(rightEye)ear(leftEARrightEAR)/2.0# 第十一步使用cv2.convexHull获得凸包位置使用drawContours画出轮廓位置进行画图操作leftEyeHullcv2.convexHull(leftEye)rightEyeHullcv2.convexHull(rightEye)cv2.drawContours(frame,[leftEyeHull],-1,(0,255,0),1)cv2.drawContours(frame,[rightEyeHull],-1,(0,255,0),1)# 第十二步进行画图操作用矩形框标注人脸leftrect.left()toprect.top()rightrect.right()bottomrect.bottom()cv2.rectangle(frame,(left,top),(right,bottom),(0,255,0),3) 分别计算左眼和右眼的评分求平均作为最终的评分如果小于阈值则加1如果连续3次都小于阈值则表示进行了一次眨眼活动 # 第十三步循环满足条件的眨眼次数1ifearEYE_AR_THRESH:# 眼睛长宽比0.2COUNTER1else:# 如果连续3次都小于阈值则表示进行了一次眨眼活动ifCOUNTEREYE_AR_CONSEC_FRAMES:# 阈值3TOTAL1# 重置眼帧计数器COUNTER0# 第十四步进行画图操作68个特征点标识for(x,y)inshape:cv2.circle(frame,(x,y),1,(0,0,255),-1)# 第十五步进行画图操作同时使用cv2.putText将眨眼次数进行显示cv2.putText(frame,Faces: {}.format(len(rects)),(10,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)cv2.putText(frame,Blinks: {}.format(TOTAL),(150,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)cv2.putText(frame,COUNTER: {}.format(COUNTER),(300,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)cv2.putText(frame,EAR: {:.2f}.format(ear),(450,30),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)print(眼睛实时长宽比:{:.2f} .format(ear))ifTOTAL50:cv2.putText(frame,SLEEP!!!,(200,200),cv2.FONT_HERSHEY_SIMPLEX,0.8,(0,0,255),2)cv2.putText(frame,Press q: Quit,(20,500),cv2.FONT_HERSHEY_SIMPLEX,0.7,(84,255,159),2)# 窗口显示 show with opencvcv2.imshow(Frame,frame)# if the q key was pressed, break from the loopifcv2.waitKey(1)0xFFord(q):break# 释放摄像头 release cameracap.release()# do a bit of cleanupcv2.destroyAllWindows()2.4 OpenCVOpenCV是计算机视觉中一个经典的数据库。支持多语言、跨平台、功能强大。其提供了一个Python接口用户可以在保证可读性和操作效率的前提下用Python调用C/C实现所需的功能。OpenCV是一个基于BSD许可证的跨平台计算机视觉库可以在Linux、windows和Mac OS操作系统上运行。它由一系列C函数和少量C类组成。同时它还提供了与Python、ruby、MATLAB等语言的接口实现了图像处理和计算机视觉中的许多通用算法。本项目中OpenCV主要是在图片的采集的图片的预处理方面使用通过操作界面中的按钮选项选择是否打开摄像头使用OpenCV来调用电脑摄像头来检测录像过程中的聚焦和人脸镜头的矫正等状态然后在摄像头的录像的视频流中抓取对应的人脸照片然后调用内部的函数对照片的尺寸和光线等进行矫正处理后传给神经网络进行特征值提取。3 实现效果项目运行效果毕业设计 机器视觉网络课堂专注检测系统项目分享见主页任意置顶文章

相关新闻

最新新闻

360春招笔试复盘:四道编程题核心考点与代码实现

360春招笔试复盘:四道编程题核心考点与代码实现

2023年360春招第一批编程题,我是在周六上午蹲在出租屋里做的。说实话,360的笔试系统不算卡,但题目量比我预想的大:两个小时,四道编程题,全部要自己处理输入输出。我做完的时候只剩十分钟检查,最…

2026/9/1 22:12:37
openEMS电磁仿真实战:EC-FDTD求解器与MATLAB接口详解

openEMS电磁仿真实战:EC-FDTD求解器与MATLAB接口详解

简介:本资源是基于扩展有限差分时域法(EC-FDTD)的开源电磁场求解器openEMS的Matlab实现代码包,面向电子信息工程、计算机科学与数学等专业的本科生及初级研究者,用于课程设计、期末大作业与毕业设计中的电磁建模与仿真…

2026/9/1 22:12:37
帆软研发岗秋招笔试全复盘:题型解析与备考指南

帆软研发岗秋招笔试全复盘:题型解析与备考指南

2019届秋招那会儿,我投了帆软软件的研发岗位。笔试通知来得比预期早,做之前我按照一般互联网公司的路子准备了一堆算法题,结果真打开试卷才发现,帆软的笔试题设计和它这家公司的气质一样——不玩虚的,重心全在数据、报…

2026/9/1 22:12:37
ABAP 大规模数据并行处理实战,六套 Parallel Processing Framework 如何选,性能调优真正该盯住什么

ABAP 大规模数据并行处理实战,六套 Parallel Processing Framework 如何选,性能调优真正该盯住什么

一个标准 SAP 报表,测试环境只有几万条数据时可能跑得相当顺畅,一旦进入生产系统,数据量从几万增长到几百万,执行时间就可能从几分钟拉长到几个小时。 这时最容易出现的一种优化思路,是把原来一个进程处理的 100 万条数据拆成 10 份,让 10 个 Work Process 同时工作。 …

2026/9/1 22:12:37
不打开 Eclipse,也能读取 SAP BTP ABAP 源码,Python 直连 ADT REST API 的完整实践

不打开 Eclipse,也能读取 SAP BTP ABAP 源码,Python 直连 ADT REST API 的完整实践

平时开发 SAP BTP ABAP Environment,最熟悉的入口几乎一定是 Eclipse 里的 ABAP Development Tools,也就是 ADT。创建 Class、Interface、CDS View、Behavior Definition,查看源码、激活对象、运行 ABAP Unit,很多工作都发生在这个开发环境里。 SAP 官方对 ABAP Environme…

2026/9/1 22:12:37
2026年传统制造业 AI 获客系统横向测评:电销拓客迎来新解法,手卓云 AI 脱颖而出

2026年传统制造业 AI 获客系统横向测评:电销拓客迎来新解法,手卓云 AI 脱颖而出

当下国内传统制造业竞争加剧,不管是设备加工、线缆生产,还是暖通配套、五金零部件工厂,普遍面临获客现实难题。业务员人力成本持续走高,人工电销盲呼量大、有效线索占比低,老客户资源逐步枯竭,线下展会、传…

2026/9/1 22:07:36