计算机本科毕业设计

您所在的位置:网站首页 智能垃圾桶的简介50字 计算机本科毕业设计

计算机本科毕业设计

2024-07-12 15:37| 来源: 网络整理| 查看: 265

文章目录 1. 前言2. 系统定义2.1 硬件装置2.2 软件功能模块2.2.1 环境依赖2.2.2 软件模块 3. 详细设计3.1 硬件设计3.1.1 硬件零件型号3.1.2 智能垃圾桶硬件整体结构 3.2 软件设计3.2.1 超声波检测模块3.2.2 UI可视化模块3.2.3 图像预处理模块3.2.4 MobileNetV1图像分类模块3.2.5 舵机驱动模块 4. 总结

1. 前言

  博客简单介绍了我本科毕业设计作品——智能分类垃圾桶。使用Raspberry Pi 3B+、舵机、摄像头、亚克力板等零件材料制作智能分类垃圾桶硬件平台;然后使用收集的垃圾图片数据集样本训练MobileNetV1轻量化网络和XGBoost分类器,配合TensorFlow Lite对MobileNetV1在Raspberry Pi上做进一步优化。在资源受限的Raspberry Pi 3B+开发板上实现垃圾分类投放。

2. 系统定义 2.1 硬件装置

  垃圾桶硬件装置应实现对行人投入垃圾的四分类投放(可回收垃圾、有害垃圾、厨余垃圾、其他垃圾)。垃圾桶硬件装置主要包含以下六点结构设计。   (1) 四分类垃圾回收桶箱   为实现对垃圾的四分类投放,智能垃圾桶装置设置四分类垃圾回收桶箱。将整个长方体桶箱平均分成四份,分别对应“可回收垃圾”、“有害垃圾”、“厨余垃圾”、“其他垃圾”四个垃圾大类类别。   (2) 托盘   托盘用来暂存待投放垃圾。待垃圾识别完成后,根据具体的识别结果进行分类投放。   (3) 超声波   为满足系统对垃圾投入有较快的响应速度要求,设置超声波传感器。该传感器检测托盘上是否有垃圾放置。若检测到垃圾,则启动分类程序,对待投放垃圾进行识别投放。   (4) 摄像头   摄像头作为系统中的垃圾图像采集装置。使用摄像头拍摄托盘上的垃圾图像,系统根据拍摄图像对垃圾进行分类识别。   (5) 舵机   舵机为垃圾桶的投放驱动模块,该模块共有两个舵机。当得到待投放垃圾的所属大类类别后,两舵机带动托盘旋转,实现对垃圾识别后的投放步骤。   (6) 树莓派   树莓派作为智能垃圾桶的计算设备,负责连接超声波、摄像头等传感器零件,并运行编写完成的软件程序。

2.2 软件功能模块 2.2.1 环境依赖

  软件功能模块所使用的主要依赖库如表2-1所示。

表2-1 主要依赖库统计 名称版本作用操作系统Raspbian Buster with desktop(September 2019)为程序运行提供平台编程语言Python3.6运行软件程序深度学习框架TensorFlow 1.15.0使用MobileNetV1网络机器学习框架XGBoost 1.4.1使用XGBoost分类器 2.2.2 软件模块

  系统软件功能模块分为超声波检测、UI可视化、图像预处理、MobileNetV1图像分类、舵机驱动共五个子模块。   (1) 超声波检测   超声波检测软件模块依托超声波传感器硬件,基于GPIO框架编写超声波硬件的使用程序,判断当前是否有垃圾待投放。   (2) UI可视化   可视化垃圾桶当前工作状态,以更直观的方式展示垃圾桶工作是否正常。   (3) 图像预处理   使用摄像头拍摄得到垃圾图像后,执行图像预处理算法对图片进行裁剪,去除无用的背景,便于后续的MobileNetV1图像分类。   (4) MobileNetV1图像分类   为满足系统的垃圾图像分类算法应具有较高的精度和实时性要求,垃圾图像分类软件模块基于MobileNetV1网络和XGBoost分类算法实现,输入为图像预处理模块得到的垃圾图像,输出垃圾类别。MobileNetV1与XGBoost结合,能够得到较好的分类精度。而MobileNetV1作为轻量化网络,再配合模型量化技术,能够满足实时性要求。   (5) 舵机驱动   舵机驱动软件模块依托舵机硬件,基于GPIO框架编写双舵机硬件的使用程序,使之能够根据垃圾图像分类模块的输出驱动舵机转动合适角度,从而将垃圾投入至正确的回收桶箱之中。

3. 详细设计 3.1 硬件设计 3.1.1 硬件零件型号 表3-1 零件型号统计 零件型号作用超声波传感器HC-SR04检测托盘上有无垃圾放置摄像头Epcbook 1080P免驱USB摄像头采集垃圾图像舵机-0DS3115 可控角度90° 15KG扭矩带动托盘转动舵机-1DS3218 可控角度360° 20KG扭矩带动旋转圆盘转动开发板Raspberry Pi 3B+核心计算设备拓展板小R科技 PWR.A53机器人驱动拓展版拓展Raspberry引脚与供电接口电源12V 2200mAh 锂电池供电显示屏RaspberryPi 3.5寸电容USB触摸显示屏显示UI界面 3.1.2 智能垃圾桶硬件整体结构

  装置实现垃圾四分类投放(可回收垃圾、有害垃圾、厨余垃圾、其他垃圾),其主视图、俯视图以及双层舵机结构分别如图3-1、3-2、3-3所示。   主视图展示了装置的整体结构以及摄像头、托盘、回收桶箱的位置,如图3-1所示。 在这里插入图片描述

图3-1 智能垃圾桶装置-主视图

  装置俯视图中清晰展示了四分类垃圾回收桶箱与“可回收垃圾”、“有害垃圾”、“厨余垃圾”、“其他垃圾”四个垃圾类别的对应关系,并从俯视角度展示了超声波和托盘的位置。智能垃圾桶装置俯视图如图3-2所示。 在这里插入图片描述

图3-2 智能垃圾桶装置-俯视图

  双层舵机结构中舵机-1与旋转圆盘连接,用以驱动旋转圆盘转动。舵机-0与托盘连接,用来驱动托盘转动。超声波传感器置于托盘侧面,检测托盘上是否有垃圾放置。双层舵机结构如图3-3所示。 在这里插入图片描述

图3-3 智能垃圾桶装置-双层舵机结构 3.2 软件设计 3.2.1 超声波检测模块

  超声波模块固定在托盘旁边,使用超声波传感器可测量放置于托盘表面的垃圾距超声波传感器的距离 D 1 D_1 D1​。 D 2 D_2 D2​为无垃圾放置时超声波传感器测得的距离数据, D 2 = 14 c m D_2=14cm D2​=14cm。若满足 0 < D 1 < D 2 0pt1[1]: info = '顺时针旋转' else: info = '逆时针旋转' angle=-angle height = img.shape[0] # 原始图像高度 width = img.shape[1] # 原始图像宽度 rotateMat = cv2.getRotationMatrix2D((width / 2, height / 2), angle, 1) # 按angle角度旋转图像 heightNew = int(width * math.fabs(math.sin(math.radians(angle))) + height * math.fabs(math.cos(math.radians(angle)))) widthNew = int(height * math.fabs(math.sin(math.radians(angle))) + width * math.fabs(math.cos(math.radians(angle)))) rotateMat[0, 2] += (widthNew - width) / 2 rotateMat[1, 2] += (heightNew - height) / 2 imgRotation = cv2.warpAffine(img, rotateMat, (widthNew, heightNew), borderValue=(255, 255, 255)) # 旋转后图像的四点坐标 [[pt1[0]], [pt1[1]]] = np.dot(rotateMat, np.array([[pt1[0]], [pt1[1]], [1]])) [[pt3[0]], [pt3[1]]] = np.dot(rotateMat, np.array([[pt3[0]], [pt3[1]], [1]])) [[pt2[0]], [pt2[1]]] = np.dot(rotateMat, np.array([[pt2[0]], [pt2[1]], [1]])) [[pt4[0]], [pt4[1]]] = np.dot(rotateMat, np.array([[pt4[0]], [pt4[1]], [1]])) # 处理反转的情况 if pt2[1]>pt4[1]: pt2[1],pt4[1]=pt4[1],pt2[1] if pt1[0]>pt3[0]: pt1[0],pt3[0]=pt3[0],pt1[0] imgOut = imgRotation[int(pt2[1]):int(pt4[1]), int(pt1[0]):int(pt3[0])] imgOut = cv2.resize(imgOut, (image_height, image_width),) return imgOut, info

在这里插入图片描述

图3-4 图像预处理各步骤效果图 3.2.4 MobileNetV1图像分类模块

  (1) 基于MobileNetV1与XGBoost的垃圾图像分类算法   基于MobileNetV1与XGBoost的垃圾图像分类算法输入一张经过预处理的垃圾图片,得到预测的小类类别,最终的输出为该小类类别所所属的大类类别。例如:输入一张易拉罐图片,预测得到小类类别为易拉罐,将易拉罐小类所属的大类类别可回收垃圾作为输出。   本文采用MobileNet系列中的MobileNetV1网络,原生MobileNetV1网络输出Softmax层结点数量为1000(对应1000类别)。本文将Softmax层结点数改为15(对应15个垃圾小类)进行训练。在进行预测时砍掉Softmax层,直接输出Softmax层前的全局池化层输出结果,长度为1024的一维向量。XGBoost算法输入为MobileNetV1网络的输出(长度为1024的一维向量),输出为分类结果(15个垃圾小类之一)。

  (2) 垃圾图像分类算法优化技巧    a. 数据增强   在MobileNetV1与XGBoost网络训练过程中使用数据增强策略,对原始图片使用随机翻转、旋转、裁剪等手段生成不同的图片数据,以此获得更多的数据训练网络。原始数据集见博客末尾的百度网盘链接。   使用TensorFlow框架的ImageDataGenerator工具对训练集数据使用随机裁剪、旋转等手段进行扩充。ImageDataGenerator工具参数设置如表3-2所示。

表4-2 ImageDataGenerator参数设置 ParameterValuerotation_range180width_shift_range0.2height_shift_range0.2shear_range0.2zoom_range0.2fill_mode‘nearest’cval0.0horizontal_flipTruevertical_flipTruerescale1./255

  b. 迁移学习   使用迁移学习技巧训练MobileNetV1网络,即在ImageNet预训练模型基础上对MobileNetV1权重进行微调。使用TensorFlow框架提供的Keras接口实现MobileNetV1加载ImageNet预训练权重。   c. 模型量化   模型量化方法可以实现减小模型尺寸、减少模型内存消耗以及加快模型推理速度等目标。   使用TensorFlow Lite工具,对训练完成的MobileNetV1网络进行量化,将32位浮点数运算量化为16位浮点数运算。使用TF Lite工具可在维持原有精度的基础上大幅降低模型推理预测耗时,这点在Raspberry Pi 3B+得到了良好的体现。   使用TensorFlow将H5模型文件转化为TFLite文件的Python代码如下,原H5文件和输出的TFLite文件均在models子目录下。

# -*- coding: utf-8 -*- """ Created on Thu Oct 15 15:35:58 2020 @author: qiqi """ import tensorflow as tf from tensorflow.keras.models import load_model, Model MobileNetV1 = load_model('models/MobileNetV1.h5') MobileNetV1 = Model(inputs=MobileNetV1.input, outputs=MobileNetV1.get_layer('global_average_pooling2d').output) converter = tf.lite.TFLiteConverter.from_keras_model(MobileNetV1) converter.optimizations = [tf.lite.Optimize.DEFAULT] converter.target_spec.supported_types = [tf.float16] tflite_quant_model = converter.convert() open('models/MobileNetV1.tflite', 'wb').write(tflite_quant_model) 3.2.5 舵机驱动模块

  舵机驱动模块基于双舵机硬件实现,根据垃圾图像分类模块结果驱动舵机旋转,具体而言分为以下步骤。舵机部分源码整合在了程序main模块中。    (1) 根据图像分类模块得到的垃圾大类类别,控制舵机-1旋转指定角度,从而带动旋转圆盘转动,使得固定在旋转圆盘上的托盘旋转至对应的垃圾大类回收桶箱正上方。托盘初始位置位于有害垃圾回收桶箱正上方。若垃圾大类类别为有害垃圾,则舵机-1不转动;若垃圾大类类别为可回收垃圾,则舵机-1顺时针转动270°;若垃圾大类类别为厨余垃圾,则舵机-1顺时针转动180°;若垃圾大类类别为其他垃圾,则舵机-1顺时针转动90°。   (2) 舵机-1旋转完成后,舵机-0逆时针旋转90°带动托盘转动。托盘移开后等待2s,垃圾自动掉落至正确回收桶箱中。   (3) 舵机-0与舵机-1归位,重新回到最初状态,等待下一次任务。

4. 总结

  博客记录了我本科毕业设计的主要内容。作品很low,没有什么实用价值。可能是由于我们大组只有我一个人做了软硬件结合作品,而其他人都是纯软件,最后毕设成绩还不错。感谢评审老师搭救!!!   博客只提供了部分源码,完整源码见我的Github(https://github.com/jiaozi12/Intelligent-Trash-Can)。各位大佬觉得没那么差的话,欢迎给Star!!!   垃圾图片数据集和作品演示视频请见百度网盘链接(https://pan.baidu.com/s/1o9NG4A6d91b6Hc8rRexp8w),提取码:n0qu。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3