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

【材料清单】
1.树莓派4代B型:

2.USB摄像头:

3.数字大按钮模块

4.面包板、5个LED(4个指示灯LED和1个状态LED)和220欧姆的电阻若干个。
【硬件连接】
1.将USB摄像头连接到树莓派,接上电源:

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

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

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

3.数据导入并标注完成后会自动开始训练模型。

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

【软件准备】
1.电脑连接树莓派,在树莓派的主目录中创建一个Lobe文件夹,并在该目录中创建一个模型文件夹。将之前生成的Lobe TF文件夹内容拖到树莓派上,记下文件路径。
2.在树莓派上,打开终端下载适用于Python3的lobe-python库:
复制代码
3.垃圾分类器模型的完整 Python 程序:- #import Pi GPIO library button class
- from gpiozero import Button, LED, PWMLED
- from picamera import PiCamera
- from time import sleep
-
- from lobe import ImageModel
-
- #Create input, output, and camera objects
- button = Button(2)
-
- yellow_led = LED(17) #garbage
- blue_led = LED(27) #recycle
- green_led = LED(22) #compost
- red_led = LED(23) #hazardous waste facility
- white_led = PWMLED(24) #Status light and retake photo
-
- camera = PiCamera()
-
- # Load Lobe TF model
- # --> Change model file path as needed
- model = ImageModel.load('/home/pi/Lobe/model')
-
- # Take Photo
- def take_photo():
- # Quickly blink status light
- white_led.blink(0.1,0.1)
- sleep(2)
- print("Pressed")
- white_led.on()
- # Start the camera preview
- camera.start_preview(alpha=200)
- # wait 2s or more for light adjustment
- sleep(3)
- # Optional image rotation for camera
- # --> Change or comment out as needed
- camera.rotation = 270
- #Input image file path here
- # --> Change image path as needed
- camera.capture('/home/pi/Pictures/image.jpg')
- #Stop camera
- camera.stop_preview()
- white_led.off()
- sleep(1)
-
- # Identify prediction and turn on appropriate LED
- def led_select(label):
- print(label)
- if label == "garbage":
- yellow_led.on()
- sleep(5)
- if label == "recycle":
- blue_led.on()
- sleep(5)
- if label == "compost":
- green_led.on()
- sleep(5)
- if label == "hazardous":
- red_led.on()
- sleep(5)
- if label == "not trash!":
- white_led.on()
- sleep(5)
- else:
- yellow_led.off()
- blue_led.off()
- green_led.off()
- red_led.off()
- white_led.off()
-
- # Main Function
- while True:
- if button.is_pressed:
- take_photo()
- # Run photo through Lobe TF model
- result = model.predict_from_file('/home/pi/Pictures/image.jpg')
- # --> Change image path
- led_select(result.prediction)
- else:
- # Pulse status light
- white_led.pulse(2,1)
- sleep(1)
复制代码
 
4.在终端窗口中使用Python3运行程序: - python3 rpi_trash_classifier.py
复制代码
【程序调试】
1.首次运行程序时,加载TensorFlow库和Lobe ML模型需要一些时间。当程序准备好捕获图像时,状态指示灯(白色 LED)将闪烁。
2.拍摄图像后,程序会将图像与Lobe ML模型进行比较,并输出生成的预测。输出决定打开哪个灯:黄色(干垃圾)、蓝色(可回收垃圾)、绿色(湿垃圾)或红色(有害垃圾)。
3.如果LED指示灯均未亮起,状态LED返回脉冲模式,则表示拍摄的图像“不是垃圾”,需要重新拍摄照片。
|
木子呢 2024-01-09 06:19:30
水平有限,树莓派以前从来没接触过,所以项目还不是很完整。
另外发帖比起成长营那边,也不是很习惯。 ...
可以慢慢熟悉,社区的编辑也可以考虑md编辑,更适合创客们,可以看看教程:https://mc.dfrobot.com.cn/thread-305579-1-1.html
另外发帖比起成长营那边,也不是很习惯。