文章目录
项目简介
基于RDK X5开发板的智能垃圾分类垃圾桶项目,旨在利用人工智能技术实现垃圾的自动识别与分类。垃圾桶硬件装置应实现对行人投入垃圾的四分类投放(可回收垃圾、有害垃圾、厨余垃圾、其他垃圾)。该系统主要由摄像头模块、RDK X5开发板和分类装置组成。摄像头通过MIPI CSI接口或者USB接口连接,实时采集垃圾图像;RDK X5开发板凭借其10 TOPS的算力,运行预先训练的深度学习模型,对图像进行分析,识别垃圾类型;根据识别结果,开发板通过GPIO接口控制舵机,打开对应垃圾桶的盖子,实现垃圾的自动分类。该方案充分利用RDK X5的强大计算能力和丰富接口,确保系统的高效性和可靠性。
-
背景介绍:随着垃圾分类的重要性日益增加,自动化的智能垃圾分类解决方案在城市管理、家庭和公共设施中具有广泛的应用前景。通过AI技术,能够有效识别垃圾类型,减少分类错误,提升垃圾回收效率,并为环保和资源再利用做出积极贡献。RDK X5开发板具备10 TOPS的算力和多种接口,非常适合实时图像识别、自动化控制以及与其他物联网设备的集成,能够在垃圾分类、智慧城市建设中发挥关键作用。
-
RDK X5:D-Robotics RDK X5搭载Sunrise 5智能计算芯片,可提供高达10 Tops的算力,是一款面向智能计算与机器人应用的全能开发套件,接口丰富,极致易用,支持Transfomer、RWKV、Occupancy、Stereo Perception等多种复杂模型和最新算法,加速智能化应用快速落地。
硬件及材料列表
- 开发板与处理器
RDK X5开发板:具备10 TOPS的算力,支持多种AI模型和丰富的接口. - 摄像头模块
轮趣科技的新版C100带金属外壳超大FOV相机:用于采集垃圾图像。
或者:RDK X5 MIPI摄像头:适用于RDK X5开发板的摄像头模块。 - 传感器:
HC-SR04超声波传感器:检测垃圾桶盖子的闭合状态。 - 舵机
控制垃圾桶的盖子的开合动作。
SG90舵机:使用最广泛的舵机,性价比高。由于本人只是制作模型,所以选择这个舵机。
DS3115舵机:可控角度180°,15KG扭矩,带动托盘转动。
DS3218舵机:可控角度360°,20KG扭矩,带动旋转圆盘转动。 - 电源
可以选择5V锂电池供电或者220V交流转直流电源模块供电。如果采用DS3115舵机,那么它的工作电压是5V,RDK开发板的工作电压也是5V,但是需要保证电流的供应。 - 显示屏
使用任意小型的带HDMI接口的显示屏即可。
或者使用RaspberryPi 3.5寸电容USB触摸显示屏,本质上RDK与树莓派没什么差别,接口位置也类似。 - 其他配件
铝合金外壳:RDK X5铝合金外壳。或者 散热扩展板:用于RDK X5的散热。
LED灯:用于指示分类结果或状态。
按键:用于与用户进行交互,当分类结果错误时,手动更正。
红外对射管:用于检测垃圾满溢状态。
整体架构流程
工作流程
以下是基于RDK X5的智能垃圾分类垃圾桶垃圾分类的详细流程:
- 图像识别触发:用户将垃圾放置在垃圾桶的摄像头前,摄像头捕获垃圾图像。
- AI模型推理:摄像头捕获的图像被发送到RDK X5开发板,AI模型对图像进行实时分析和识别,确定垃圾的类型。
- 控制信号生成:一旦AI模型识别出垃圾类型,它会生成一个控制信号,这个信号会指示哪个垃圾桶的盖子需要打开。
- 舵机接收信号:控制信号通过GPIO接口发送给对应的舵机控制器。
- 舵机动作执行:舵机接收到控制信号后,根据预设的角度和速度转动,打开对应垃圾桶的盖子。如果垃圾桶设计为多个独立的部分,每个部分都可能有一个或多个舵机控制其盖子的开合。如果分类错误,还可以使用按钮手动控制开合。
- 垃圾投放:用户在收到指示(如LED灯或语音提示)后,将垃圾投放到指定的垃圾桶中。
- 盖子关闭:垃圾投放完成后(例如等待5-10秒钟),舵机会再次转动,关闭垃圾桶的盖子。
- 反馈确认:系统可能会提供反馈确认,如通过LED灯闪烁或语音提示,告知用户垃圾分类完成。
硬件架构
以下是项目的硬件架构。
软件架构
流程图解释:
开始:软件流程的起点。
图像采集:系统通过摄像头模块采集垃圾图像。
图像预处理:对采集到的图像进行必要的预处理,如缩放、裁剪、标准化等,以适配AI模型的输入要求。
AI模型推理:将预处理后的图像输入到AI模型中,进行推理分析。
垃圾类型识别:AI模型识别出垃圾的类型。
是:如果识别成功,流程进入生成控制信号阶段。
否:如果识别失败或不确定,流程将转入手动按钮选择阶段。
手动按钮选择:用户可以通过手动按钮选择开启哪个对应的垃圾桶,绕过AI识别直接进行分类。
生成控制信号:根据识别结果或手动选择,系统生成控制信号。
舵机控制:系统通过GPIO接口发送控制信号给舵机。
打开对应垃圾桶盖:舵机根据控制信号打开对应垃圾桶的盖子。
用户投放垃圾:用户根据指示将垃圾投放到打开的垃圾桶中。
红外对射管检测:使用红外对射管检测垃圾是否满溢。
满:如果检测到垃圾桶满溢,扬声器会发出报警声音。
未满:如果未满,关闭垃圾桶盖并继续流程。
扬声器报警:当垃圾桶满溢时,扬声器发出报警声音提示。
关闭垃圾桶盖:投放垃圾后,舵机动作关闭垃圾桶盖。
HDMI屏幕显示结果:通过HDMI屏幕显示垃圾分类的结果。
结束:软件流程的终点。
技术细节
编程语言使用python3.10
深度学习框架使用pytorch2.5.0
pytorch模型
使用PyTorch训练一个垃圾分类模型。以下是简化的代码,数据集地址采用GitHub上开源的:https://github.com/garythung/trashnet
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, models, transforms
from torch.utils.data import DataLoader
# 数据预处理
data_transforms = {
'train': transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'val': transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
data_dir = 'path_to_your_dataset'
image_datasets = {
x: datasets.ImageFolder(os.path.join(data_dir, x),
data_transforms[x])
for x in ['train', 'val']}
dataloaders = {
x: DataLoader(image_datasets[x], batch_size=32,
shuffle=True, num_workers=4)
for x in ['train', 'val']}
# 加载预训练模型并修改最后的全连接层
model = models.resnet18(pretrained=True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, num_classes) # num_classes为您的分类数
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
# 训练模型
num_epochs = 25
for epoch in range(num_epochs):
for phase in ['train', 'val']:
if phase == 'train':
model.train()
else:
model.eval()
running_loss = 0.0
running_corrects = 0
for inputs, labels in dataloaders[phase]:
optimizer.zero_grad()
with torch.set_grad_enabled(phase == 'train'):
outputs = model(inputs)
_, preds = torch.max(outputs, 1