基于树莓派的垃圾分类小项目

2024-01-086554
AI 快速预览详细 收起
基于树莓派4代B型的垃圾分类小项目,使用USB摄像头、数字大按钮模块和LED等硬件,结合Lobe工具训练图像分类模型,并导出为TensorFlow Lite格式。项目通过拍摄图像并进行分类,输出相应的LED指示灯。适合STEM教育场景,帮助孩子理解图像识别和硬件连接。


【项目介绍】
非常荣幸可以参加树莓派项目征集活动。
其实就是个垃圾分类小项目,识别对象是干垃圾、湿垃圾、可回收垃圾或有害垃圾。
这个项目借鉴了国外创客的公开项目,虽然创意不是自己的,但是通过一步一步项目的复刻,也是对树莓派的从无到有的一个学习过程。
因为是第一次发帖,项目内容和发帖的水平还有待提高,请大家体谅。
基于树莓派的垃圾分类小项目图1

材料清单
1.树莓派4代B型:
基于树莓派的垃圾分类小项目图2

2.USB摄像头:
基于树莓派的垃圾分类小项目图3

3.数字大按钮模块
基于树莓派的垃圾分类小项目图4

4.面包板、5个LED(4个指示灯LED和1个状态LED)和220欧姆的电阻若干个。

【硬件连接】
1.将USB摄像头连接到树莓派,接上电源:
基于树莓派的垃圾分类小项目图5

2.按照接线图将按钮和LED连接到树莓派的GPIO引脚:将按钮的接口连接到GPIO引脚2,数字口无需连接;黄色、蓝色、绿色、红色和白色LED的正极(较长)引脚分别连接到树莓派的GPIO引脚17、27、22、23和24;LED的另一个引脚通过电阻连接到树莓派的GPIO GND引脚。
基于树莓派的垃圾分类小项目图6

【图像识别】
1.Lobe是微软开发的模型训练工具,可用于训练图像分类模型,并支持导出tensorflow和onnx模型。工具下载地址:https://www.lobe.ai/,下载完成后直接双击安装即可。工具安装完打开后如下,点击New Project新建一个工程。
基于树莓派的垃圾分类小项目图7

2.点击右上角Import导入数据,Images可以导入单张或多张图片数据,Camera可以使用设备摄像头采集图片数据,Dataset可以导入批量数据。建议使用Dataset方式导入,好处在于导入图片后软件将会直接以图片所在文件夹名称对图片进行标注,当然也可以选择自己手动标注。
基于树莓派的垃圾分类小项目图8

3.数据导入并标注完成后会自动开始训练模型。
基于树莓派的垃圾分类小项目图9


4.模型训练完后点击Use,从Images中可以导入一张图片进去预测,Camera可以通过设备摄像头拍摄图片进行预测,Export可以导出训练好的模型。这里需要以TensorFlow Lite格式导出Lobe的ML模型。
基于树莓派的垃圾分类小项目图10


【软件准备】
1.电脑连接树莓派,在树莓派的主目录中创建一个Lobe文件夹,并在该目录中创建一个模型文件夹。将之前生成的Lobe TF文件夹内容拖到树莓派上,记下文件路径。

2.在树莓派上,打开终端下载适用于Python3的lobe-python库:
  1. pip3 install lobe
复制代码

3.垃圾分类器模型的完整 Python 程序:
  1. #import Pi GPIO library button class
  2. from gpiozero import Button, LED, PWMLED
  3. from picamera import PiCamera
  4. from time import sleep
  5. from lobe import ImageModel
  6. #Create input, output, and camera objects
  7. button = Button(2)
  8. yellow_led = LED(17) #garbage
  9. blue_led = LED(27) #recycle
  10. green_led = LED(22) #compost
  11. red_led = LED(23) #hazardous waste facility
  12. white_led = PWMLED(24) #Status light and retake photo
  13. camera = PiCamera()
  14. # Load Lobe TF model
  15. # --> Change model file path as needed
  16. model = ImageModel.load('/home/pi/Lobe/model')
  17. # Take Photo
  18. def take_photo():
  19.     # Quickly blink status light
  20.     white_led.blink(0.1,0.1)
  21.     sleep(2)
  22.     print("Pressed")
  23.     white_led.on()
  24.     # Start the camera preview
  25.     camera.start_preview(alpha=200)
  26.     # wait 2s or more for light adjustment
  27.     sleep(3)
  28.     # Optional image rotation for camera
  29.     # --> Change or comment out as needed
  30.     camera.rotation = 270
  31.     #Input image file path here
  32.     # --> Change image path as needed
  33.     camera.capture('/home/pi/Pictures/image.jpg')
  34.     #Stop camera
  35.     camera.stop_preview()
  36.     white_led.off()
  37.     sleep(1)
  38. # Identify prediction and turn on appropriate LED
  39. def led_select(label):
  40.     print(label)
  41.     if label == "garbage":
  42.         yellow_led.on()
  43.         sleep(5)
  44.     if label == "recycle":
  45.         blue_led.on()
  46.         sleep(5)
  47.     if label == "compost":
  48.         green_led.on()
  49.         sleep(5)
  50.     if label == "hazardous":
  51.         red_led.on()
  52.         sleep(5)
  53.     if label == "not trash!":
  54.         white_led.on()
  55.         sleep(5)
  56.     else:
  57.         yellow_led.off()
  58.         blue_led.off()
  59.         green_led.off()
  60.         red_led.off()
  61.         white_led.off()
  62. # Main Function
  63. while True:
  64.     if button.is_pressed:
  65.         take_photo()
  66.         # Run photo through Lobe TF model
  67.         result = model.predict_from_file('/home/pi/Pictures/image.jpg')
  68.         # --> Change image path
  69.         led_select(result.prediction)
  70.     else:
  71.         # Pulse status light
  72.         white_led.pulse(2,1)
  73.     sleep(1)
复制代码
基于树莓派的垃圾分类小项目图11基于树莓派的垃圾分类小项目图12

4.在终端窗口中使用Python3运行程序:
  1. python3 rpi_trash_classifier.py
复制代码

【程序调试】
1.首次运行程序时,加载TensorFlow库和Lobe ML模型需要一些时间。当程序准备好捕获图像时,状态指示灯(白色 LED)将闪烁。

2.拍摄图像后,程序会将图像与Lobe ML模型进行比较,并输出生成的预测。输出决定打开哪个灯:黄色(干垃圾)、蓝色(可回收垃圾)、绿色(湿垃圾)或红色(有害垃圾)。

3.如果LED指示灯均未亮起,状态LED返回脉冲模式,则表示拍摄的图像“不是垃圾”,需要重新拍摄照片。





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
JOVI
JOVI
作者
谢谢老板

木子呢 2024-01-09 06:19:30

引用: JOVI 发表于 2024-1-9 12:31
水平有限,树莓派以前从来没接触过,所以项目还不是很完整。
另外发帖比起成长营那边,也不是很习惯。 ...
可以慢慢熟悉,社区的编辑也可以考虑md编辑,更适合创客们,可以看看教程:https://mc.dfrobot.com.cn/thread-305579-1-1.html
木子哦
木子哦
第一次发帖,非常不错!!
木子哦
木子哦回复JOVI
可以慢慢熟悉,社区的编辑也可以考虑md编辑,更适合创客们,可以看看教程:https://mc.dfrobot.com.cn/thread-305579-1-1.html
JOVI
JOVI
作者
回复木子哦
水平有限,树莓派以前从来没接触过,所以项目还不是很完整。
另外发帖比起成长营那边,也不是很习惯。
- 没有更多了 -