目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习自习室人数监测系统
设计思路
一、课题背景与意义
由于时间和空间等多种因素影响,校园许多教室的空间没有得到合理的利用。例如,学校一些教室人满为患,而一些教室却只有寥寥数人;有些时间段教室人数比较少,而有些时间段却比较拥挤,以至于没有位置提供给学生自习。但在很多情况下,学生在前往自习室之前却无法得知自习室的使用情况,不利于选择合适的自习室。这就对学生学习造成了些许不便,同时降低了校园内的教室空间资源利用率。
二、算法理论原理
2.1 卷积神经网络
YOLOv5模型具有优秀的性能、较小的模型体积,并且适合实际工程应用。它采用了Focus结构和CSP结构,增强了CNN的学习能力,减少了计算量和内存成本。

YOLOv5,主要包括YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x。这些模型根据计算速度和检测精度的要求进行了调整。选择了YOLOv5s网络模型作为基础模型。该模型具有最小的深度和最快的计算速度,很好地满足了系统对运算速度的要求。其他的网络模型则是在该基础模型的基础上增加了网络的深度和宽度。

2.2 教室人数获取
OpenCV-Python模块的VideoCapture子模块对MP4格式有着良好的支持,可以直接获取指定帧数并保存。利用该模块,将视频按帧循环读取,将当前视频帧以.jpeg格式进行存储,对存储路径进行设置,使路径中包含图片所对应的教室位置。

调用YOLOv5对保存的图片进行处理,即可得到截取图片时刻的人数信息。通过设置后缀为.pt的模型包文件、识别类型等参数,为了能在框架运行时同步调用控制台,利用Python的OS模块的popen子模块,该模块允许开发者在Python内直接运行控制台命令。根据保存的图片路径,构建命令行提示符(cmd)命令,处理结果如下。

相关代码:
# 加载预训练的人数监测模型
model = tf.keras.models.load_model('人数监测模型.h5')
# 加载人脸检测器(可根据具体需求选择合适的人脸检测器)
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 打开摄像头
cap = cv2.VideoCapture(0)
while True:
# 读取摄像头帧
ret, frame = cap.read()
# 将帧转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 人脸检测
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 绘制人脸框并进行人数预测
for (x, y, w, h) in faces:
# 提取人脸区域
face_img = gray[y:y+h, x:x+w]
三、检测的实现
3.1 数据集
该模型是基于COCO数据集构建的物体检测模型。通过手机在自习室录制了学生自习时的视频,并从中截取了300张分辨率为1920x1080的教室图片作为测试数据集。

3.2 实验环境搭建
实验环境使用的是基于CPU的Intel Core i5 6300HQ,拥有8GB的内存,运行Windows 10操作系统,使用Python编程语言和PyTorch的CPU版本框架。
3.3 实验及结果分析
单张图片处理结果:大部分人员都可以准确识别并标出。

图片处理准确率:每次处理前后结果并不相同,但总体准确率稳定在80%~100%之间,可以满足日常生活中自习室检测人数的需求。

图片处理时间: 由于Python是一种动态类型语言,在相同的硬件条件下,每次处理相同的代码所需的时间可能会有所不同。然而,每次处理时间都在4秒以内,这表明该框架在处理图片时具有较短的时间需求,处理速度较快,并且可以满足实际应用中的时间效率需求。

相关代码如下:
face_img = cv2.resize(face_img, (64, 64))
# 归一化并增加维度以符合模型输入
face_img = face_img.astype('float32') / 255.0
face_img = np.expand_dims(face_img, axis=0)
# 使用模型进行人数预测
count = model.predict(face_img)[0][0]
# 绘制人脸框和人数信息
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, f'Count: {count}', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
# 显示结果帧
cv2.imshow('People Counting', frame)
# 检测按键,按下 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!
3326



被折叠的 条评论
为什么被折叠?



