Giới thiệu dự án

Theo số liệu từ Tổ chức Lương thực và Nông nghiệp Liên Hiệp Quốc (FAO) và Bộ Công Thương, Việt Nam sở hữu hơn 1 triệu hecta đất trồng cây ăn quả với sản lượng hàng năm đạt xấp xỉ 8 triệu tấn. Kim ngạch xuất khẩu rau quả đạt trên 3,8 tỷ USD (trong đó trái cây chiếm 82,05%, tương đương 3,13 tỷ USD). Mặc dù sản lượng nông sản rất lớn, nhưng khâu phân loại và sơ chế sau thu hoạch tại đa số cơ sở đóng gói trong nước vẫn phụ thuộc chủ yếu vào nhân công thủ công.

Phương pháp thủ công bộc lộ nhiều điểm nghẽn nghiêm trọng: năng suất thấp, chi phí nhân công tăng cao theo thời gian, tính đồng đều không bảo đảm do sự mệt mỏi thị giác của công nhân sau nhiều giờ làm việc liên tục dẫn đến tỷ lệ phân loại sai sót dao động từ 12% đến 18%.

Đề tài "Ứng dụng xử lý ảnh vào thiết kế và thi công mô hình phân loại trái cây" do sinh viên Võ Thanh Duy và Trần Quốc Dưỡng thực hiện dưới sự hướng dẫn của ThS. Nguyễn Duy Thảo (Khoa Điện – Điện tử, Trường Đại học Sư phạm Kỹ thuật TP.HCM) được xây dựng nhằm giải quyết bài toán tự động hóa quá trình nhận dạng và phân loại nông sản với chi phí tối ưu.

Mục tiêu cụ thể của dự án:

  1. Thiết kế và chế tạo phần cứng hệ thống băng tải tự động tích hợp buồng chụp ảnh kín tiêu chuẩn hóa ánh sáng.
  2. Xây dựng tập dữ liệu (Dataset) thực nghiệm gồm 3.722 ảnh cho 3 loại trái cây phổ biến: Táo, Chuối và Thanh Long.
  3. Huấn luyện mô hình Mạng Nơ-ron Tích chập (Convolutional Neural Network - CNN) với độ chính xác nhận dạng trên 90%.
  4. Triển khai mô hình Deep Learning trực tiếp lên thiết bị nhúng Raspberry Pi 3 Model B, điều khiển cơ cấu phân loại bằng động cơ Servo MG946R qua tín hiệu cảm biến hồng ngoại E18-D80NK.
  5. Thiết kế giao diện giám sát cục bộ (GUI) và hệ thống IoT đồng bộ dữ liệu thời gian thực lên máy chủ đám mây Google Firebase, cho phép quản lý qua Web Dashboard.

Phạm vi đề tài tập trung vào việc phân loại tuần tự từng sản phẩm trên băng tải mini với 3 nhóm nông sản mục tiêu, nhận diện phân loại dựa trên đặc trưng hình dạng và màu sắc trích xuất tự động qua mạng CNN.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi đề xuất giải pháp mạng nơ-ron tích chập trên nền tảng nhúng, nhóm nghiên cứu đã đánh giá các phương pháp phân loại phổ biến hiện nay:

Tiêu chí Phân loại thủ công Xử lý ảnh truyền thống (Color/Shape Thresholding) Mạng nơ-ron tích chập trên Raspberry Pi (Giải pháp đề xuất)
Độ chính xác 80% - 85% (giảm dần theo ca) 70% - 80% (nhạy cảm với ánh sáng môi trường) 91% - 95% (ổn định cao nhờ trích xuất đặc trưng sâu)
Tốc độ xử lý 2 - 4 giây / sản phẩm 0.3 - 0.6 giây / sản phẩm 0.8 - 1.2 giây / sản phẩm (bao gồm cả chu kỳ cơ khí)
Chi phí đầu tư ban đầu Thấp (chỉ tốn chi phí thuê ngoài) Trung bình (cần PC và Camera công nghiệp) Thấp (~2.500.000 - 3.500.000 VNĐ cho hệ nhúng)
Khả năng mở rộng Kém (phụ thuộc quy mô lao động) Khó (phải viết lại thuật toán tách biên/màu) Rất cao (chỉ cần bổ sung Dataset và huấn luyện lại)
Giám sát dữ liệu Ghi sổ thủ công Hạn chế Realtime Cloud IoT (Firebase/Web Dashboard)

Yêu cầu kỹ thuật hệ thống được phân cấp theo mô hình MoSCoW:

  • Must have: Nhận diện chính xác 3 loại trái cây (Táo, Chuối, Thanh Long); tự động gạt đúng khay chứa; hiển thị trạng thái phân loại lên màn hình.
  • Should have: Gửi log số lượng và thời gian thực lên cơ sở dữ liệu đám mây Firebase; có chế độ dừng khẩn cấp; đèn LED chiếu sáng độc lập trong buồng chụp.
  • Could have: Cảnh báo khi có vật thể lạ/trái cây không xác định đi qua cuối băng tải.
  • Won't have (ở phiên bản này): Phân loại kích thước/trọng lượng chi tiết hoặc đánh giá độ chín theo thang đo quang phổ.

Thiết kế hệ thống

Kiến trúc hệ thống kết hợp giữa phần cứng cơ điện tử, thị giác máy tính nhúng và điện toán đám mây:

graph TD
    A[Băng tải đưa trái cây vào] --> B[Cảm biến hồng ngoại E18-D80NK phát hiện]
    B --> C[Raspberry Pi 3 Model B kích hoạt Camera CSI]
    C --> D[Buồng ảnh LED 3W: Thu nhận ảnh 100x100x3]
    D --> E[Mô hình CNN Inference trên TensorFlow/OpenCV]
    E --> F{Dự đoán phân loại}
    F -->|Táo| G[Kích hoạt Servo 1 - Khay 1]
    F -->|Chuối| H[Kích hoạt Servo 2 - Khay 2]
    F -->|Thanh Long| I[Kích hoạt Servo 3 - Khay 3]
    F -->|Vật thể lạ/Lỗi| J[Chạy thẳng về cuối băng tải]
    E --> K[Cập nhật GUI cục bộ]
    E --> L[Đẩy dữ liệu JSON lên Google Firebase]
    L --> M[Web Monitoring Dashboard]

Technology Stack chi tiết:

  • Phần cứng xử lý trung tâm: Raspberry Pi 3 Model B (SoC Broadcom BCM2837B0 Quad-core ARM Cortex-A53 @ 1.4GHz, RAM 1GB LPDDR2).
  • Cảm biến & Cơ cấu chấp hành: Camera Pi Module v1.3 (5MP, cảm biến OmniVision OV5647 kết nối qua giao tiếp MIPI-CSI), Cảm biến vật cản hồng ngoại E18-D80NK (ngõ ra NPN Open-Collector, tầm quét 3-80cm), 3 Động cơ Servo MG946R bánh răng kim loại (torque 13 kg.cm).
  • Hệ thống truyền động: Băng tải mini kích thước 1000 x 100 x 100 mm, động cơ DC 24V tỷ số truyền giảm tốc 1:171, mạch điều tốc PWM IC555 kết hợp MOSFET.
  • Môi trường phần mềm & Thư viện: Hệ điều hành Raspbian OS (Linux Kernel 4.19), Python 3.7.3, TensorFlow 2.x / Keras API, OpenCV 4.x, NumPy, Tkinter GUI, Firebase Admin SDK.
  • Cơ sở dữ liệu đám mây: Google Firebase Realtime Database lưu cấu trúc JSON:
    {
      "sorting_logs": {
        "log_id_1024": {
          "fruit_type": "Apple",
          "confidence": 0.968,
          "timestamp": "2026-08-22 10:15:30",
          "lane": 1
        }
      },
      "statistics": {
        "total_apple": 142,
        "total_banana": 128,
        "total_dragonfruit": 165,
        "total_unknown": 6
      }
    }
    

Methodology

Dự án áp dụng phương pháp phát triển tuần tự theo chu kỳ 15 tuần với 4 giai đoạn chính:

  • Giai đoạn 1 (Tuần 1 - 3): Khảo sát bài toán, lựa chọn phần cứng nhúng (Raspberry Pi 3B), thiết kế cơ khí băng tải và mạch điện điều khiển.
  • Giai đoạn 2 (Tuần 4 - 7): Xây dựng buồng chụp ảnh, thu thập tập dữ liệu 3.722 mẫu, xây dựng và huấn luyện mô hình CNN trên nền tảng Google Colab (sử dụng GPU Tesla K80/TPUv2).
  • Giai đoạn 3 (Tuần 8 - 12): Tối ưu hóa mô hình mạng, nhúng vào Python trên Raspberry Pi, kết nối driver Servo, lập trình đọc tín hiệu GPIO ngắt từ cảm biến E18-D80NK và thiết kế giao diện điều khiển.
  • Giai đoạn 4 (Tuần 13 - 15): Kiểm thử liên tục trên mô hình thực tế, căn chỉnh sai số góc gạt cơ khí, viết báo cáo kỹ thuật và nghiệm thu đồ án.

Implementation và kết quả

Development process

Mạng nơ-ron tích chập tùy chỉnh (Custom CNN) được thiết kế tinh gọn để đảm bảo tốc độ suy luận (inference) mượt mà trên phần cứng giới hạn RAM 1GB của Raspberry Pi 3B mà không gây tràn bộ nhớ (OOM).

Cấu trúc mạng gồm 5 khối tích chập liên tiếp kết hợp lớp lấy mẫu cực đại (Max Pooling) để giảm số lượng tham số học, loại bỏ hoàn toàn các lớp Fully Connected trung gian quá dày đặc:

  • Lớp đầu vào: Tensor kích thước $(100, 100, 3)$ đại diện cho 3 kênh màu Red - Green - Blue.
  • Khối 1: Conv2D (Kernel $5 \times 5$, ReLU) + MaxPooling2D ($2 \times 2$, Stride 2).
  • Khối 2, 3, 4: Mỗi khối gồm Conv2D (Kernel $3 \times 3$, ReLU) + MaxPooling2D ($2 \times 2$, Stride 2).
  • Khối 5: Conv2D (Kernel $1 \times 1$, ReLU) + MaxPooling2D ($2 \times 2$, Stride 2) - hỗ trợ nén chiều sâu kênh đặc trưng.
  • Lớp làm phẳng (Flatten): Chuyển đổi feature map đa chiều thành vector 1D.
  • Lớp ngõ ra (Dense): 3 nơ-ron tương ứng 3 nhãn phân loại, sử dụng hàm kích hoạt Softmax trả về phân phối xác suất:

$$\sigma(z)i = \frac{e^{z_i}}{\sum{j=1}^{K} e^{z_j}}$$

Đoạn mã xây dựng mô hình bằng TensorFlow/Keras:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

def build_fruit_classifier():
    model = Sequential([
        # Khối 1: Trích xuất đặc trưng biên cạnh cơ bản
        Conv2D(32, (5, 5), activation='relu', input_shape=(100, 100, 3), padding='same'),
        MaxPooling2D(pool_size=(2, 2)),
        
        # Khối 2: Trích xuất đặc trưng hình thái
        Conv2D(64, (3, 3), activation='relu', padding='same'),
        MaxPooling2D(pool_size=(2, 2)),
        
        # Khối 3 & 4: Trích xuất cấu trúc bề mặt và hình khối
        Conv2D(128, (3, 3), activation='relu', padding='same'),
        MaxPooling2D(pool_size=(2, 2)),
        Conv2D(128, (3, 3), activation='relu', padding='same'),
        MaxPooling2D(pool_size=(2, 2)),
        
        # Khối 5: Tích chập 1x1 giảm chiều dữ liệu
        Conv2D(64, (1, 1), activation='relu', padding='same'),
        MaxPooling2D(pool_size=(2, 2)),
        
        # Lớp phẳng hóa và ngõ ra Softmax
        Flatten(),
        Dense(3, activation='softmax')
    ])
    
    model.compile(
        optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
        loss='categorical_crossentropy',
        metrics=['accuracy']
    )
    return model

Thuật toán xử lý trên luồng điều khiển của Raspberry Pi:

import cv2
import numpy as np
import RPi.GPIO as GPIO
import time
from tensorflow.keras.models import load_model

# Cấu hình GPIO
SENSOR_PIN = 18
SERVO_PINS = {'Apple': 22, 'Banana': 23, 'DragonFruit': 24}
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Tải model CNN đã huấn luyện
model = load_model('/home/pi/models/fruit_cnn_model.h5')
labels = ['Apple', 'Banana', 'DragonFruit']

def trigger_sorting(fruit_name):
    target_pin = SERVO_PINS.get(fruit_name)
    if target_pin:
        # Kích hoạt xung PWM điều khiển cần gạt Servo mở góc 90 độ
        pwm = GPIO.PWM(target_pin, 50) # 50Hz
        pwm.start(7.5) # Góc 90 độ
        time.sleep(1.2)
        pwm.ChangeDutyCycle(2.5) # Góc 0 độ (đóng cần)
        time.sleep(0.3)
        pwm.stop()

def capture_and_predict(camera):
    ret, frame = camera.read()
    if not ret:
        return None
    # Tiền xử lý ảnh đầu vào
    resized = cv2.resize(frame, (100, 100))
    normalized = resized.astype('float32') / 255.0
    input_tensor = np.expand_dims(normalized, axis=0)
    
    # Dự đoán
    predictions = model.predict(input_tensor)[0]
    idx = np.argmax(predictions)
    confidence = predictions[idx]
    
    if confidence >= 0.80:
        return labels[idx], confidence
    return "Unknown", confidence

Testing và validation

Tập dữ liệu 3.722 ảnh được phân bổ theo tỷ lệ 80% Training và 20% Validation/Testing. Các kịch bản thử nghiệm được tiến hành trong buồng chụp chuẩn với bóng đèn LED 3W, thử nghiệm trên 300 mẫu trái cây thực nghiệm (100 quả mỗi loại).

Loại trái cây Tổng số mẫu thử nghiệm Số lượng nhận dạng đúng Số lượng phân loại sai Độ chính xác thực nghiệm (%) Thời gian xử lý trung bình (ms)
Táo (Apple) 100 95 5 95.0% 142 ms
Chuối (Banana) 100 93 7 93.0% 138 ms
Thanh Long (Dragon Fruit) 100 96 4 96.0% 145 ms
Vật thể lạ / Khác loại 30 28 (gạt thẳng thành công) 2 93.3% 135 ms
Toàn hệ thống (Trung bình) 330 312 18 94.5% 140 ms

Kết quả đạt được

Hệ thống đã hoàn thiện đầy đủ các chức năng thiết kế ban đầu:

  • Tốc độ chu kỳ: Thời gian từ lúc cảm biến phát hiện vật thể $\rightarrow$ chụp ảnh $\rightarrow$ dự đoán CNN $\rightarrow$ kích hoạt servo gạt sản phẩm diễn ra trong 1.2 - 1.5 giây.
  • Độ chính xác: Đạt 94.5% trong điều kiện chiếu sáng buồng kín ổn định.
  • Giao diện & IoT: 100% dữ liệu mẻ phân loại được cập nhật lên giao diện Tkinter trên màn hình Pi và đồng bộ thành công lên Firebase Realtime Database với độ trễ truyền thông qua Wi-Fi dưới 500 ms.

Đổi mới và đóng góp

  1. Kiến trúc CNN tối ưu hóa cho Edge Computing: Khác với các nghiên cứu tiền nhiệm sử dụng các mạng sâu như VGG-16 hay ResNet-50 đòi hỏi cấu hình máy tính cá nhân (PC) gắn GPU rời mạnh mẽ, đề tài đã thiết kế mạng CNN 5 tầng tích chập rút gọn. Thiết kế này giảm số lượng tham số tính toán từ hàng chục triệu xuống dưới 350.000 tham số, giúp Raspberry Pi 3B đạt tốc độ xử lý ~140 ms/khung hình mà không gây nóng chip hay nghẽn bộ nhớ RAM.
  2. Chuẩn hóa môi trường quang học bằng buồng ảnh chuyên dụng: Loại bỏ hoàn toàn sự phụ thuộc vào ánh sáng tự nhiên bằng buồng ảnh khép kín trang bị nguồn sáng LED 3W góc chiếu đồng đều. Cải tiến này giúp loại bỏ hiện tượng bóng đổ cục bộ, tăng độ chính xác nhận dạng từ 78.5% (môi trường mở) lên 94.5%.
  3. Kiến trúc nhúng toàn diện (All-in-One Embedded Edge AI): Tích hợp trọn vẹn cả 3 tầng kiến trúc: Thu thập tín hiệu vật lý (Cảm biến/Camera) $\rightarrow$ Suy luận AI cạnh (Edge Inference) $\rightarrow$ Điều khiển cơ khí chính xác & Đồng bộ Cloud IoT chỉ trên một bo mạch vi xử lý duy nhất.

Ứng dụng thực tế và triển khai

Tình huống ứng dụng thực tế

  • Cơ sở đóng gói và hợp tác xã nông sản: Tự động hóa dây chuyền phân loại táo, thanh long xuất khẩu, sàng lọc trái cây đúng chủng loại trước khi đóng thùng carton.
  • Chuỗi cung ứng bán lẻ / Siêu thị: Phân loại tự động tại kho trung chuyển để phân luồng hàng hóa nhanh chóng về các quầy hàng chuyên biệt.

Phân tích chi phí - lợi ích (Cost-Benefit Analysis)

  • Chi phí phần cứng BOM (Bill of Materials):
    • Raspberry Pi 3 Model B + Thẻ nhớ 16GB: ~1.100.000 VNĐ
    • Raspberry Pi Camera v1.3: ~250.000 VNĐ
    • 3x Động cơ Servo MG946R: ~360.000 VNĐ
    • Cảm biến E18-D80NK, Relay, Mạch PWM IC555: ~200.000 VNĐ
    • Kết cấu cơ khí băng tải, khung nhôm định hình, buồng ảnh: ~1.200.000 VNĐ
    • Tổng chi phí chế tạo: $\approx 3.110.000\text{ VNĐ}$
  • Hiệu quả kinh tế: Một module phân loại có thể thay thế 1-2 nhân công tại khâu sàng lọc sơ bộ. Với mức lương công nhân nông nghiệp trung bình 6.000.000 VNĐ/tháng, doanh nghiệp có thể hoàn vốn đầu tư (ROI) chỉ sau 1 đến 2 tháng vận hành.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Năng suất giới hạn bởi cơ cấu cơ khí: Cơ cấu servo gạt một chiều phù hợp với phân loại tuần tự từng sản phẩm đơn lẻ (tốc độ tối đa ~40 - 50 quả/phút).
  • Chưa đánh giá bề mặt 360 độ: Hệ thống sử dụng một camera cố định chụp từ trên xuống, chưa thể phát hiện các khuyết tật ẩn nằm ở mặt dưới của quả.

Hướng phát triển

  1. Nâng cấp phần cứng: Chuyển đổi sang vi xử lý Raspberry Pi 4 / Pi 5 kết hợp vi xử lý tăng tốc AI chuyên dụng Google Coral USB Accelerator (Edge TPU) để nâng tốc độ xử lý lên trên 60 FPS.
  2. Cải tiến thuật toán: Ứng dụng mô hình phát hiện đối tượng thời gian thực YOLOv8 / YOLOv9 Tiny để phát hiện cùng lúc nhiều trái cây trên băng tải di động liên tục mà không cần dừng sản phẩm.
  3. Cơ cấu phân loại đa chiều: Thiết kế hệ thống con lăn xoay kết hợp nhiều camera đa góc hoặc cảm biến hồng ngoại đa phổ để đánh giá toàn diện độ chín và phát hiện sâu bệnh.

Đối tượng hưởng lợi

  • Sinh viên & Nghiên cứu sinh ngành Điện tử - Viễn thông, Tự động hóa, CNTT: Tiếp cận tài liệu thực tế về phương pháp tích hợp mô hình Deep Learning/TensorFlow lên vi điều khiển nhúng Linux, lập trình GPIO điều khiển công nghiệp.
  • Lập trình viên & Kỹ sư Embedded AI: Tham khảo kiến trúc mô hình CNN rút gọn tối ưu cho các thiết bị Edge Computing tài nguyên thấp.
  • Doanh nghiệp nông nghiệp & Hợp tác xã vừa và nhỏ: Sở hữu giải pháp tự động hóa chi phí thấp, dễ lắp đặt và chuyển giao kỹ thuật mà không cần đầu tư dây chuyền ngoại nhập đắt đỏ.
  • Nhà nghiên cứu thị giác máy tính nông nghiệp: Sử dụng phương pháp luận và cơ sở dữ liệu làm tiền đề phát triển các thuật toán nhận diện sâu bệnh trên cây ăn quả.

Câu hỏi thường gặp

1. Yêu cầu cấu hình tối thiểu để triển khai mô hình này là gì?

Hệ thống yêu cầu bo mạch tối thiểu là Raspberry Pi 3 Model B (RAM 1GB), thẻ nhớ MicroSD Class 10 (dung lượng tối thiểu 16GB), Raspberry Pi Camera Module 5MP, nguồn cấp ổn định 5V/2.5A cho Pi và nguồn rời 5V/3A cho các động cơ servo.

2. Mô hình xử lý thế nào khi có nhiều trái cây nằm sát nhau trên băng tải?

Ở phiên bản hiện tại, hệ thống được thiết kế phân loại tuần tự. Khi có hai vật thể nằm dính liền nhau đi qua cảm biến E18-D80NK, cảm biến chỉ ghi nhận một xung ngắt và camera sẽ chụp một khung hình chứa cả hai vật, dẫn đến giảm độ chính xác dự đoán. Để giải quyết, cần lắp thêm cơ cấu phễu cấp liệu rung phân tách từng quả trước khi đi vào buồng ảnh.

3. Có thể mở rộng để phân loại thêm nhiều loại trái cây khác (cam, xoài, bơ...) không?

Hoàn toàn có thể. Quy trình mở rộng rất đơn giản: thu thập thêm 1.000 - 1.200 ảnh cho mỗi loại trái cây mới, cập nhật số nơ-ron lớp Dense ngõ ra tương ứng với số lớp mới, huấn luyện lại trên Google Colab và tải file trọng số .h5 mới đè lên thư mục chạy trên Raspberry Pi.

4. Tại sao không sử dụng Arduino mà lại chọn Raspberry Pi?

Arduino là vi điều khiển 8-bit hoặc 32-bit tốc độ thấp (16MHz - 84MHz) với bộ nhớ RAM tính bằng Kilobytes, không đủ khả năng lưu trữ trọng số và thực thi các phép toán tích chập tensor ma trận lớn của Deep Learning. Raspberry Pi là máy tính đơn bo (SBC) chạy hệ điều hành Linux đầy đủ, trang bị CPU 64-bit 1.4GHz và RAM 1GB, đủ tài nguyên chạy trực tiếp framework TensorFlow.

5. Dữ liệu giám sát qua Firebase có hoạt động khi mất kết nối mạng Internet không?

Khi mất mạng Wi-Fi/Internet, chương trình điều khiển cục bộ và cơ cấu cơ khí vẫn phân loại bình thường nhờ mô hình CNN chạy hoàn toàn offline trên Raspberry Pi. Các bản ghi log sẽ được lưu tạm vào bộ nhớ đệm SQLite trên thẻ nhớ và tự động đồng bộ hóa lên Firebase ngay khi có kết nối trở lại.


Kết luận

Đồ án tốt nghiệp "Ứng dụng xử lý ảnh vào thiết kế và thi công mô hình phân loại trái cây" đã chứng minh tính khả thi và hiệu quả cao của việc đưa Trí tuệ nhân tạo (AI) ứng dụng trực tiếp vào tự động hóa nông nghiệp thực tiễn. Bằng việc kết hợp sáng tạo giữa mạng nơ-ron tích chập CNN tinh gọn và hệ thống nhúng Raspberry Pi 3 Model B, dự án đã xây dựng thành công một dây chuyền phân loại nông sản hoạt động ổn định với độ chính xác đạt 94.5%, chi phí chế tạo dưới 3.5 triệu đồng.

Kết quả nghiên cứu này mở ra hướng đi đầy tiềm năng cho các giải pháp cơ giới hóa nông nghiệp thông minh tại Việt Nam, thu hẹp khoảng cách giữa nghiên cứu học thuật đỉnh cao và bài toán sản xuất thực tế tại các địa phương.