目录

前言

设计思路

一、课题背景与意义

二、算法理论原理

2.1 目标检测算法

2.2 深度学习

三、检测的实现

3.1 数据集

3.2 实验环境搭建

3.3 实验及结果分析

最后


前言

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

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

         选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

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

        🎯基于深度学习的电梯无接触手势控制系统 

设计思路

一、课题背景与意义

        电梯是现代建筑中必不可少的交通工具,然而传统的电梯按钮操作方式存在卫生隐患,尤其在公共场所更加突出。为了解决这一问题,基于深度学习的电梯无接触手势控制系统应运而生。该系统利用深度学习和计算机视觉技术,通过识别用户手势控制电梯的运行,实现了无需接触按钮的电梯操作方式。这不仅提供了更加卫生安全的电梯使用体验,还展示了深度学习和计算机视觉在实际生活中的应用潜力。

二、算法理论原理

2.1 目标检测算法

        Fast R-CNN 算法是在 R-CNN 算法的基础上进行了改进的目标检测算法。它通过引入池化层,避免了 R-CNN 算法对同一区域多次提取特征的情况,从而提高了算法的运行速度。Fast R-CNN 算法采用了 SPP-net 结构,通过简化的 RoI 池化层从卷积特征图中提取固定长度的特征向量。这些特征向量经过全连接层进行分类和边界框回归,最终得到目标检测结果。Fast R-CNN 算法的优势是在精度上更高,但对小目标的检测效果较差,模型较大,并且检测速度较慢。

毕业设计:基于深度学习的电梯无接触手势控制系统 人工智能

        SSD检测算法是一种目标检测算法,它通过对输入图像进行缩放得到300×300的图像,并在VGG16网络的不同卷积层上得到多个预测特征层。SSD算法最终生成了6个预测特征层,用于预测不同大小的目标。在较浅的特征层上,SSD预测较小的目标,而随着网络的深入,它能够检测到相对较大的目标。SSD在不同特征层上预测不同尺度的目标,较低层的特征提供了更多细节信息,从而提高了对小目标的准确性。通过这种方式,SSD算法能够同时预测多个目标并提高对小目标的检测准确率。

毕业设计:基于深度学习的电梯无接触手势控制系统 人工智能

        SSD算法使用了YOLO中的回归思想和Faster R-CNN中的Anchor机制,既具有YOLO快速的检测速度,又能够像Faster R-CNN一样准确地预测目标窗口。然而,SSD算法需要人工设置default boxes的初始尺度和长宽比,因此对小尺寸目标的识别效果较差。SSD是一个单目探测器,能够在给定图像中检测多个物体。总体而言,SSD相比于其他方法具有更快的速度和更高的准确性。

毕业设计:基于深度学习的电梯无接触手势控制系统 人工智能

2.2 深度学习

        语音识别中的特征提取是将语音信号转化为特征矢量序列的过程。这需要进行信号预处理,包括采样、分帧加窗、预加重和判定静音帧等步骤。特征提取的目的是将语音信号从时域转化为频域,通过傅里叶变换等方法提取频谱信息。常用的特征提取方法有梅尔频率倒谱系数(MFCC)和线性预测倒谱系数(LPCC)。MFCC能够排除音高的干扰,维度较低,适用于处理语音中的辅音,但对环境噪声和回声敏感。LPCC适用于处理周期性信号,但处理辅音的复杂性较高。特征提取的关键是提取能够最大程度代表语音信号特点的特征向量,易于计算并与人耳听觉感知特性一致或相似。特征之间应具有较小的相关性,以利于计算每个特征的权重系数。

毕业设计:基于深度学习的电梯无接触手势控制系统 人工智能

        卷积神经网络(CNN)是一种多层神经网络结构,用于学习特征表示。它由输入层、卷积层、池化层、全连接层和输出层组成。CNN使用卷积操作对输入特征进行局部过滤,生成特征图谱。池化层进一步提取特征信息,常用的池化方法有最大池化、均值池化等。卷积层的输出特征与池化层的输入特征对应。经过多个卷积层和池化层后,得到的特征进入全连接层,全连接层可以接收之前层中的所有局部信息。在中文语音识别中,CNN通过卷积和池化提取中文语音特征,最后通过全连接层和输出层输出概率形式的识别结果。CNN具有卷积操作、权值共享和局部连接等特性。

         长短期记忆网络(LSTM)是一种特殊类型的循环神经网络(RNN),通过引入多个门结构解决了RNN在时间维度和梯度消失方面的问题,提高了模型的识别率。LSTM在前向传播过程中通过门函数处理数据流经细胞的信息,使用门结构来递归连接,通过选择条件来决定是否接受信息,从而克服了时间维度上的梯度消失问题。LSTM的核心概念是细胞状态和门结构,通过遗忘门、输入门和输出门来控制信息的添加和移除。门结构使用Sigmoid激活函数来进行门控,将值压缩到0~1之间,从而控制信息的更新和遗忘。LSTM的出现有效地解决了传统RNN中引入时间概念时可能出现的梯度消失问题。

毕业设计:基于深度学习的电梯无接触手势控制系统 人工智能

三、检测的实现

3.1 数据集

        由于网络上没有现有的合适的电梯手势数据集,我决定通过相机拍摄和互联网收集两种方式进行数据集的收集。首先,我通过相机拍摄了不同人员进行电梯手势操作的场景,包括常见的手势动作和各种角度下的手势变化。其次,我通过互联网收集了大量的手势图像和视频样本,包括不同人群、不同背景和光照条件下的手势。通过这两种方式的数据采集,我得到了一个包含各种场景和多样性手势的数据集,为后续的手势识别和电梯控制研究提供了基础。

毕业设计:基于深度学习的电梯无接触手势控制系统 人工智能

        标注图像是建立数据集并进行网络学习训练的重要步骤。为了实现图像标注,可以使用可视化的图像标定工具,如LabelImg。LabelImg使用Python编写,使用Qt作为其图形界面。通过打开图片文件夹并选择标签储存路径,可以使用LabelImg对图像进行标注。通过在图像上创建矩形框并添加标签名称,可以生成对应的XML文件来保存标注信息。 

3.2 实验环境搭建

        本实验使用的计算机配置包括Windows 10操作系统、24GB内存、GTX 1660显卡、Intel酷睿i5 9400F CPU和240GB M.2 SSD硬盘。摄像头型号为罗技C270,分辨率为720p,视野角度为60°。实验使用Python作为开发语言,并使用面向对象的开发方式。开发平台为PyCharm,实验基于PyTorch和OpenCV框架进行。

3.3 实验及结果分析

        在训练YOLOv5之前,首先需要将标注好的数据集放置在"annotations"文件夹中,数据集的格式为XML文件,而照片则存放在"data/images"文件夹中。可以使用"annotations_to_txt.py"脚本将训练集转换为文本格式,并保存在"train.txt"文件中。每一行存放一张图片的信息,包括图片位置、真实框的坐标和类别。运行"train.py"开始训练,本实验选择迁移训练作为一种更快且效果更好的训练方式。迁移学习是将在某个领域或任务上学习到的知识或模式应用于不同但相关的领域或问题中。通过迁移学习,即使在较小的数据集上,也能取得不错的准确率。

        模型评估指标用于衡量模型在目标检测任务中的性能表现。其中,IoU衡量了模型输出与标注数据之间的重叠程度,准确率和错误率反映了模型对正例和负例的正确识别情况,精准率和召回率分别描述了模型检测出的目标的准确性和覆盖率。精度-召回率曲线展示了不同阈值下的模型性能,AP值计算了单个类别的平均精度,而mAP值则综合了所有类别的平均精度。综合考虑这些指标可以全面评估模型在目标检测任务中的表现,帮助了解模型的准确性和效果。

相关代码示例:

import numpy as np
import tensorflow as tf

# 构建神经网络模型
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(32, activation='relu', input_dim=10),
    tf.keras.layers.Dense(32, activation='relu'),
    tf.keras.layers.Dense(3, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# 生成示例数据
data = np.random.random((1000, 10))
labels = np.random.randint(3, size=(1000, 1))
one_hot_labels = tf.keras.utils.to_categorical(labels, num_classes=3)

# 训练模型
model.fit(data, one_hot_labels, epochs=10, batch_size=32)

# 使用模型进行预测
test_data = np.random.random((10, 10))
predictions = model.predict(test_data)

实现效果图样例:

创作不易,欢迎点赞、关注、收藏。

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

最后

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐