基于深度学习的生活垃圾智能分类装置(K210开发板实现)

2024-02-20 15:20

本文主要是介绍基于深度学习的生活垃圾智能分类装置(K210开发板实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.核心功能与流程图

2.硬件框图

3.设计原理

4.开发过程

5.项目原型

6.主要元器件介绍

7.资料、源码分享链接:


1.核心功能与流程图

针对上述提出的目标,该项目核心功能如下:

功能1:对垃圾进行基于深度学习的精准分类

功能2:通过旋转垃圾桶自动分类垃圾

该装置的具体工作流程如下:

2.硬件框图

  硬件框图

该装置由以下2部分组成:

识别模块:K210

分类模块:Arduino UNO、舵机

3.设计原理

基于深度学习和AI视觉的生活垃圾智能分类装置利用深度学习算法和AI视觉技术,能够对生活垃圾进行智能分类。

识别模块设计原理:装置需要大量的标记好的生活垃圾图片数据集,每种生活垃圾都有对应的标签,用于训练深度学习模型。数据集应该包含不同角度、光照条件和遮挡情况下的垃圾图片,以确保模型的泛化能力。通常使用卷积神经网络作为深度学习模型。可以选择已经预训练好的模型,如ResNet、Inception,或者自行设计和训练模型。使用标记好的数据集对深度学习模型进行训练。通过将图片输入模型,让其逐渐学习提取垃圾的特征,然后将这些特征映射到对应的垃圾分类标签。训练过程中需要合理设置学习率、损失函数和优化算法,以提高模型的准确率和收敛速度。当装置接收到垃圾图片时,深度学习模型会对其进行预测和分类。模型会输出一个概率分布,表示图片属于每一类垃圾的概率。根据概率分布,装置会选择概率最高的类别作为该垃圾的分类。[3]

分类模块设计原理:分类装置通过舵机旋转装置,将相对应的垃圾桶旋转至投放者面前。这里需要根据模型的输出结果,控制舵机的旋转,实现智能分类。

4.开发过程

结合实际应用需求设计的基于物联网技术的智能垃圾回收系统,其核心控件为Arduino,结合K210模块的神经网络模型实现垃圾智能分类,通过驱动舵机将相对应的垃圾桶旋转至投放者面前;通过实际组装和软硬件联合测试,验证了装置整体功能的合理性[2]。

制作过程如下:

硬件装置部分:

第一步:根据我们想要的外形通过Auto CAD画出该装置的外壳组装图,设计完成后再用激光切割进行切割,然后进行组装。

  外壳CAD图纸

第二步:用SolidWorks设计出垃圾桶,并进行3D打印

  垃圾桶3D打印模型

Arduino部分:

第一步:在Arduino上编写舵机控制部分,将垃圾种类分为四种,可回收垃圾,干垃圾,湿垃圾,有害垃圾,并将其对应四种信号A、B、C、D,当Arduino收到来自K210的四种信号时,控制舵机旋转至四个方向,以下为代码部分。

  舵机控制代码

第二步:添加Arduino信号引脚,我们设置9号引脚为舵机信号引脚,并且需要初始化串口,此外,我们将波特率规定为9600,以下为代码部分。

  添加舵机信号引脚代码

因此,Arduino部分整体代码如下:

#include <Servo.h>Servo servo;void setup() {// 初始化串口,波特率为9600Serial.begin(9600);// 附加舵机信号引脚servo.attach(9);
}void loop() {if (Serial.available() > 0) {char signal = Serial.read();// 根据收到的信号控制舵机转向不同方向if (signal == 'A') {// 控制舵机转向方向Aservo.write(0);} else if (signal == 'B') {// 控制舵机转向方向Bservo.write(60);} else if (signal == 'C') {// 控制舵机转向方向Cservo.write(120);} else if (signal == 'D') {// 控制舵机转向方向Dservo.write(180);}}
}

  Arduino部分整体代码

K210部分:(注意!!若Maixhub模型训练用不了,可选择嘉楠科技的模型训练,操作方法与Maixhub大体一致)

第一步:浏览器搜索MaixHub并点击。

  浏览器搜索MaixHub

第二步:点击Maixhub:AI平台和共享社区。

  MaixHub主页

第三步:点击模型训练中的开始训练。

  MaixHub模型训练平台页面

第四步:点击新建训练

  MaixHub模型训练页面

第五步:填写信息

  填写信息页面

第六步:点击去准备数据集

  准备数据集页面

第七步:先点击创建数据集,再完成信息填写,后点击确定

  新建数据集页面

第八步:点击上传图片后,再点击添加标签

 上传图片页面

第九步:先选中标签,然后点击选中图片,选中该垃圾的训练图片然后点开始上传,同样方法上传完四个标签

  添加标签页面

第十步:勾选随机处理的三个选项,部署平台选中合适的平台,点击最下方的创建训练任务

  开始训练页面

第十一步:等待训练完成后点击部署模型

  训练完成页面

第十二步:点击下载模型

  下载模型页面

第十三步:修改main.py的部分代码

将发送信息部分代码添加进mian.py,然后保存

烧录固件部分:

第一步:打开以下网址,下载最新版固件

下载站 - Sipeed

  固件页面

第二步,下载kflash_gui,并打开,将K210用type-c与电脑连接,选择刚刚下好的固件,地址为0x00000,端口选择与K210想连接的端口,波特率选择115200

  烧录软件界面

如果出现以下报错:

按照如下进行排查:

1.检查PC是否有权限打开端口,对于 win10,需要以管理员身份运行 kflash_gui 。

2.检查端口是否选择正确(如果出现两个设备端口,通常选择端口号小的那一个)。

3.检查端口是否被其他应用占用(如Maixpy IDEputty等),应当关闭其他程序占用。

将如下图的压缩包内文件解压放到K210里的sd卡当中。

  程序界面

运行程序,可通过K210上的屏幕,看到所识别的垃圾种类,通过输出可以看到识别率。

组装部分:

按照下图进行组装:

  装置组装图

接线部分:

舵机的黑线接Arduino的GND接口,红线接5V接口,白线接9号接口,Arduino的0号引脚接K210的10号引脚,Arduino的1号引脚接K210的11号引脚,Arduino的另一个GND引脚接K210的GND引脚,Arduino的3.3V引脚接K210的3.3V引脚。

5.项目原型

6.主要元器件介绍

  1. Arduino UNO

  Arduino UNO

  Arduino UNO的处理核心是ATMEGA328P,有14个数字输入/输出引脚,其中有6个可用作PWM输出,6个模拟输入,16MHz晶振时钟,USB连接,电源插孔,ICSP接头盒复位按钮。通过USB数据线连接电脑就能供电、程序下载和数据通信。

2.K210开发板

 K210开发板

K210是一款由中国公司思必驰(Sipeed)开发的人工智能处理器。它是一款低功耗、高性能的处理器,专门设计用于边缘计算和物联网设备。

K210由于其低功耗、高性能和适用于AI推理的能力,被广泛应用于各种智能硬件设备,例如智能摄像头、智能家居设备、机器人、智能监控系统等。作为边缘计算的代表之一,K210的发展在推动物联网和人工智能技术在嵌入式系统中的应用方面发挥着积极的作用。

3.舵机

  舵机

DSServo达盛舵机DS3218MG是一种数字舵机,是达盛舵机(DSServo)系列产品中的一员。舵机是一种电动执行元件,通常用于模型、机器人和其他自动控制系统中,用于控制角度位置的精准转动。

7.资料、源码分享链接:

链接:https://pan.baidu.com/s/1z6P3owHLP78L1pwykBbHJQ 
提取码:bmfy 
--来自百度网盘超级会员V2的分享

这篇关于基于深度学习的生活垃圾智能分类装置(K210开发板实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728650

相关文章

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络