Phần 4: Xây dựng hệ thống nhận diện rác thải
1. Kết nối camera và Raspberry Pi; 2. Hướng dẫn lập trình Python để chụp hình ảnh; 3. Tích hợp mô hình AI vào Raspberry Pi; 4. Cài đặt cảm biến và lập trình nhận diện; 5. Kết hợp các cảm biến để tăng độ tin cậy; 6. Lập trình quyết định phân loại.
Phần 4: Xây dựng hệ thống nhận diện rác thải
1. Kết nối camera và Raspberry Pi
Để kết nối camera với Raspberry Pi, bạn có thể sử dụng Raspberry Pi Camera Module hoặc một camera USB. Đối với Raspberry Pi Camera Module, kết nối nó vào cổng CSI trên Raspberry Pi. Trên Raspberry Pi 5, cần enable camera qua raspi-config và cài đặt libcamera.
2. Hướng dẫn lập trình Python để chụp hình ảnh
Sử dụng thư viện libcamera hoặc opencv để chụp ảnh từ camera. Dưới đây là đoạn mã mẫu sử dụng opencv:
import cv2
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cv2.imwrite('image.jpg', frame)
cap.release()
3. Tích hợp mô hình AI vào Raspberry Pi
Sử dụng TensorFlow Lite để tích hợp mô hình AI. Đảm bảo mô hình đã được chuyển đổi sang định dạng .tflite. Trước khi đưa dữ liệu vào mô hình, cần xử lý ảnh đầu vào như resize, chuyển dtype, và normalize. Dưới đây là đoạn mã mẫu để tải và chạy mô hình:
import tensorflow as tf
import cv2
# Đọc và xử lý ảnh
image = cv2.imread('image.jpg')
image = cv2.resize(image, (224, 224)) # Resize theo yêu cầu của mô hình
image_data = image.astype('float32') / 255.0 # Normalize
interpreter = tf.lite.Interpreter(model_path='model.tflite')
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# Chạy mô hình
interpreter.set_tensor(input_details[0]['index'], image_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
4. Cài đặt cảm biến và lập trình nhận diện
Cài đặt cảm biến trọng lượng (Load cell + HX711) và cảm biến kim loại (Inductive proximity sensor) theo sơ đồ kết nối. Lưu ý rằng nhiều loại cảm biến kim loại cần nguồn 6-36V, không thể cấp trực tiếp từ GPIO 3.3V/5V của Raspberry Pi. Sử dụng mạch opto-isolator hoặc relay để bảo vệ Raspberry Pi. Sử dụng thư viện HX711 để đọc dữ liệu từ cảm biến trọng lượng:
from hx711 import HX711
hx = HX711(dout=5, pd_sck=6) # Thay đổi chân GPIO theo kết nối
hx.set_reference_unit(1)
hx.reset()
hx.tare()
weight = hx.get_weight(5)
print(weight)
Cần kiểm tra mức tín hiệu của HX711 và sử dụng level shifter nếu cần khi nối với GPIO.
5. Kết hợp các cảm biến để tăng độ tin cậy
Sử dụng dữ liệu từ các cảm biến để xác thực kết quả dự đoán từ mô hình AI. Kết hợp các tín hiệu để đưa ra quyết định chính xác hơn, như đã mô tả trong phần 5.2 của dự án.
6. Lập trình quyết định phân loại
Sử dụng logic điều kiện để quyết định phân loại rác dựa trên dữ liệu từ AI và cảm biến. Dưới đây là đoạn mã mẫu:
if confidence >= 0.85 and metal_sensor == True:
classify_as = 'metal'
elif 0.65 <= confidence < 0.85:
classify_as = 'check sensor'
else:
classify_as = 'unknown'
Cảnh báo: Đảm bảo kiểm tra tất cả các kết nối và lập trình trước khi vận hành hệ thống để tránh hỏng hóc.