基于深度学习的生活垃圾智能分类装置(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使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的