Giới thiệu dự án

Trong kỷ nguyên Công nghiệp 4.0, tự động hóa dây chuyền sản xuất đóng vai trò sống còn trong việc nâng cao năng suất, cắt giảm chi phí vận hành và chuẩn hóa chất lượng sản phẩm. Tại các nhà máy chế biến thực phẩm và bánh kẹo quy mô vừa và nhỏ, công đoạn phân loại và kiểm tra khuyết tật sản phẩm truyền thống vẫn phụ thuộc chủ yếu vào thị giác con người hoặc các hệ thống cơ học đơn giản. Theo các khảo sát công nghiệp thực phẩm, việc kiểm tra thủ công tồn tại tỷ lệ sai sót từ 5% đến 8% do mệt mỏi thị giác, đồng thời làm tăng chi phí nhân công từ 15% đến 25% trong tổng chi phí đóng gói.

Đồ án tốt nghiệp "Phân loại sản phẩm dùng Kit Raspberry" (thực hiện bởi sinh viên Hà Duy Khánh, chuyên ngành Điện tử Công nghiệp - Bộ môn Điện tử Công nghiệp – Y sinh, Khoa Điện – Điện tử, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh, dưới sự hướng dẫn của ThS. Nguyễn Duy Thảo) giải quyết trực tiếp bài toán tự động nhận dạng, phân loại hình học và phát hiện khuyết tật biên dạng cho dòng sản phẩm bánh quy thực phẩm.

+-------------------------------------------------------------------------+
|                  HỆ THỐNG PHÂN LOẠI THỊ GIÁC NHÚNG                      |
|                                                                         |
|  [ Camera Pi 5MP ] ---> [ Raspberry Pi 3B ] ---> [ Phân loại 4 Dạng ]  |
|   (Giao tiếp CSI)        (Python + OpenCV)       (Tròn/Vuông/CN/Tam giác)|
|                                           ---> [ Phát hiện Lỗi Biên ]   |
|                                           ---> [ Bộ đếm & GUI HDMI ]    |
+-------------------------------------------------------------------------+

Mục tiêu dự án

  1. Xây dựng hoàn chỉnh mô hình phần cứng nhúng tích hợp bộ vi xử lý và module camera chuyên dụng.
  2. Thiết kế và tối ưu thuật toán xử lý ảnh số nhận dạng chính xác 4 hình dạng hình học cơ bản: hình tròn, hình vuông, hình chữ nhật và hình tam giác.
  3. Hiện thực giải thuật phát hiện sản phẩm lỗi dựa trên sai lệch hình học và phân tích diện tích biên ngoài.
  4. Phát triển chương trình đếm tự động số lượng sản phẩm theo từng nhóm hình dạng ở cả hai chế độ Online (thời gian thực từ camera) và Offline (ảnh lưu trữ).
  5. Xây dựng giao diện điều khiển trực quan (GUI) và hiển thị kết quả trên màn hình giám sát.

Phương pháp tiếp cận và Phạm vi

Giải pháp sử dụng nền tảng máy tính nhúng Raspberry Pi 3 Model B kết hợp thư viện thị giác máy tính OpenCV trên nền tảng ngôn ngữ Python. Thuật toán trích xuất đặc trưng hình học (đỉnh, cạnh, bán kính) và xấp xỉ đa giác thông qua phương pháp Ramer-Douglas-Peucker giúp giảm thiểu tài nguyên tính toán của CPU nhúng mà vẫn đảm bảo độ chính xác phân loại >95%.

Phạm vi nghiên cứu: Thử nghiệm trên các mẫu bánh quy mang 4 biên dạng cơ bản; phát hiện các lỗi mẻ, vỡ, biến dạng ở chu vi ngoài của sản phẩm trong buồng chụp kín có hỗ trợ ánh sáng đèn LED chuyên dụng.


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

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

Để lựa chọn giải pháp tối ưu cho hệ thống phân loại tại chỗ (on-edge inspection), các phương pháp phân loại hiện có trên thị trường được so sánh chi tiết:

Tiêu chí Cảm biến Quang/Tiệm cận + PLC Xử lý ảnh trên PC Công nghiệp (Matlab) Thị giác máy tính nhúng (Raspberry Pi + OpenCV)
Khả năng nhận diện Chỉ phát hiện kích thước cơ bản Rất cao, xử lý được ảnh phức tạp Cao, tối ưu cho đặc trưng hình học/màu sắc
Chi phí phần cứng Trung bình ($500 - $1,500) Rất cao ($1,500 - $4,000) Rất thấp ($80 - $150)
Kích thước & Lắp đặt Cồng kềnh, đấu nối phức tạp Chiếm diện tích lớn, tiêu hao điện Siêu nhỏ gọn (85 x 56 mm), tiêu thụ < 5W
Tính linh hoạt Kém, khó thay đổi logic Linh hoạt, phần mềm bản quyền nặng Rất linh hoạt, mã nguồn mở Python/Linux
Khả năng bảo trì Đòi hỏi kỹ sư tự động hóa PLC Đòi hỏi kỹ sư phần mềm chuyên sâu Dễ bảo trì, dễ nâng cấp mã nguồn

Đánh giá yêu cầu theo mô hình MoSCoW:

  • Must have: Nhận dạng đúng 4 hình dạng hình học; đếm sản phẩm chính xác; phát hiện lỗi biên dạng ngoài; hiển thị GUI.
  • Should have: Chế độ xử lý ảnh tĩnh (Offline) và trực tiếp (Online); buồng chiếu sáng ổn định.
  • Could have: Xuất báo cáo thống kê chu kỳ kiểm tra; cơ cấu gạt phân loại cơ khí qua GPIO.
  • Won't have (lần này): Kiểm tra cấu trúc rạn nứt bề mặt bên trong bánh; xử lý ảnh 3D chiều sâu.

Thiết kế hệ thống

Kiến trúc phần cứng và phần mềm của hệ thống được module hóa thành ba khối chức năng chính:

graph TD
    A[Khối Thu nhận Tín hiệu: Camera Pi 5MP CSI] -->|Truyền dữ liệu Raw YUV/RGB| B[Khối Xử lý Trung tâm: Raspberry Pi 3 Model B]
    B -->|Xử lý Tiền lọc & Phân đoạn ảnh| C[Thuật toán OpenCV / Python]
    C -->|Phân tích Đỉnh, Cạnh, Bán kính| D[Bộ Phân loại & Phát hiện Lỗi]
    D -->|Dữ liệu Thống kê & Hình ảnh trực quan| E[Khối Hiển thị: Màn hình HDMI / GUI]
    F[Khối Nguồn: 5V - 2.5A DC] --> B

Ngăn xếp công nghệ (Technology Stack):

  • Hệ điều hành: Linux Raspbian (ARM GNU/Linux).
  • Môi trường thực thi: Python 3.5+.
  • Thư viện thị giác: OpenCV 3.4.x (Open Source Computer Vision Library).
  • Phần cứng trung tâm: Raspberry Pi 3 Model B (SoC Broadcom BCM2837 64-bit Quad-Core ARM Cortex-A53 @ 1.2 GHz, 1GB LPDDR2 RAM, VideoCore IV GPU).
  • Module cảm biến hình ảnh: Raspberry Pi Camera Module V1 (Cảm biến OmniVision OV5647 5 Megapixel, khẩu độ 1/4", góc nhìn FOV 72.4 độ, kết nối trực tiếp socket CSI-2).

Phương pháp luận và Kế hoạch thực hiện

Dự án được triển khai theo quy trình phát triển nguyên mẫu nhanh (Prototyping Methodology) kéo dài 10 tuần:

  1. Tuần 1 - 2: Nghiên cứu lý thuyết xử lý ảnh số, thiết lập môi trường Python/OpenCV trên Raspberry Pi.
  2. Tuần 3 - 5: Phát triển thuật toán nhận dạng hình học cơ bản, thuật toán đếm và lọc biên dạng dính.
  3. Tuần 6 - 7: Xây dựng giải thuật kiểm tra sản phẩm lỗi, tối ưu xử lý offline và online.
  4. Tuần 8 - 9: Lập trình giao diện người dùng GUI, hoàn thiện cơ cấu buồng chụp kín và đèn LED trợ sáng.
  5. Tuần 10: Đo kiểm độ chính xác, phân tích lỗi và lập tài liệu kỹ thuật.

Implementation và kết quả

Quy trình phát triển và Xử lý thuật toán

Quy trình xử lý ảnh từ khung hình thô (Raw Frame) đến kết quả phân loại cuối cùng trải qua 4 bước cơ bản:

[Ảnh màu BGR] 
      │ (Chuyển đổi không gian màu Y = 0.299R + 0.587G + 0.114B)
      ▼
[Ảnh mức xám Grayscale]
      │ (Lọc nhiễu Gaussian Blur kích thước kernel 5x5)
      ▼
[Khử nhiễu & Làm trơn]
      │ (Thuật toán Canny Edge Detection với ngưỡng kép T1/T2)
      ▼
[Tách biên & Phép toán Morphology Lấp đầy]
      │ (Xấp xỉ đa giác Ramer-Douglas-Peucker & Trích xuất đặc trưng)
      ▼
[Phân loại Hình dạng & Kiểm tra Diện tích Lỗi]

1. Tiền xử lý và Nhận dạng biên cạnh

Khung hình được chuyển đổi sang ảnh xám 8-bit và áp dụng bộ lọc Gaussian để làm mịn, triệt tiêu nhiễu tần số cao trước khi chạy toán tử Canny tìm gradient biên độ:

$$\mathbf{G} = \sqrt{\mathbf{G}_x^2 + \mathbf{G}_y^2}, \quad \theta = \arctan\left(\frac{\mathbf{G}_y}{\mathbf{G}_x}\right)$$

import cv2
import numpy as np

def preprocess_and_detect_edges(image_path):
    # Đọc ảnh gốc BGR
    img = cv2.imread(image_path)
    # Chuyển đổi mức xám
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # Lọc nhiễu Gauss 5x5 để làm mịn ảnh
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    # Tách biên Canny với 2 ngưỡng minVal=50, maxVal=150
    edges = cv2.Canny(blurred, 50, 150)
    # Áp dụng phép giãn nở Morphology để hàn kín biên dạng đứt khúc
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    closed_edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
    return img, gray, closed_edges

2. Nhận dạng hình học bằng thuật toán Ramer-Douglas-Peucker

Hệ thống trích xuất đường viền (findContours) và áp dụng thuật toán xấp xỉ đa giác Ramer-Douglas-Peucker (approxPolyDP) với sai số khoảng cách $\epsilon = 0.04 \times P$ (trong đó $P$ là chu vi đường viền) để xác định số đỉnh:

def classify_shape_and_detect_defects(contour, min_contour_area=500):
    area_real = cv2.contourArea(contour)
    if area_real < min_contour_area:
        return None  # Loại bỏ nhiễu biên nhỏ
    
    perimeter = cv2.arcLength(contour, True)
    # Xấp xỉ đường bao với sai số epsilon
    approx = cv2.approxPolyDP(contour, 0.04 * perimeter, True)
    num_vertices = len(approx)
    
    shape_type = "Unknown"
    is_defective = False
    
    # 1. Nhận dạng Hình tam giác (3 đỉnh)
    if num_vertices == 3:
        shape_type = "Tam Giac"
        # Tính độ dài 3 cạnh a, b, c
        pts = approx.reshape(3, 2)
        a = np.linalg.norm(pts[0] - pts[1])
        b = np.linalg.norm(pts[1] - pts[2])
        c = np.linalg.norm(pts[2] - pts[0])
        p_half = (a + b + c) / 2.0
        area_theoretical = np.sqrt(p_half * (p_half - a) * (p_half - b) * (p_half - c))
        # So sánh diện tích thực tế với diện tích lý thuyết Heron
        if abs(area_real - area_theoretical) / area_theoretical > 0.12:
            is_defective = True
            
    # 2. Nhận dạng Hình vuông hoặc Hình chữ nhật (4 đỉnh)
    elif num_vertices == 4:
        pts = approx.reshape(4, 2)
        edge1 = np.linalg.norm(pts[0] - pts[1])
        edge2 = np.linalg.norm(pts[1] - pts[2])
        aspect_ratio = float(edge1) / edge2 if edge2 != 0 else 0
        
        # Tỷ lệ cạnh kề: nếu xấp xỉ 1.0 (0.88 - 1.12) là hình vuông, ngược lại là chữ nhật
        if 0.88 <= aspect_ratio <= 1.12:
            shape_type = "Vuong"
        else:
            shape_type = "Chu Nhat"
            
        area_theoretical = edge1 * edge2
        if abs(area_real - area_theoretical) / area_theoretical > 0.10:
            is_defective = True
            
    # 3. Nhận dạng Hình tròn (nhiều hơn 4 đỉnh xấp xỉ & kiểm tra độ tròn Circularity)
    else:
        circularity = 4 * np.pi * (area_real / (perimeter * perimeter))
        if 0.78 <= circularity <= 1.2:
            shape_type = "Tron"
            (x, y), radius = cv2.minEnclosingCircle(contour)
            area_circle = np.pi * (radius ** 2)
            if abs(area_real - area_circle) / area_circle > 0.10:
                is_defective = True
        else:
            shape_type = "Khong Xac Dinh / Loi Nang"
            is_defective = True
            
    return {"shape": shape_type, "vertices": num_vertices, "defective": is_defective, "area": area_real}

Kết quả thử nghiệm và Đánh giá hiệu năng

Hệ thống được kiểm nghiệm qua 20 bộ mẫu thử nghiệm ngẫu nhiên với tổng cộng hơn 120 lượt sản phẩm bánh quy ở các vị trí, góc xoay và cấu hình số lượng khác nhau.

Bảng kết quả phân loại sản phẩm theo hình dạng

Loại hình dạng Số mẫu thử nghiệm Số mẫu nhận dạng đúng Số mẫu nhận dạng sai Độ chính xác (%)
Hình tròn 35 34 1 97.14%
Hình vuông 30 29 1 96.67%
Hình chữ nhật 32 31 1 96.88%
Hình tam giác 25 24 1 96.00%
Tổng thể 122 118 4 96.72%

Bảng kết quả nhận dạng sản phẩm lỗi (Khuyết tật cạnh)

Trạng thái sản phẩm Số lượng mẫu Phát hiện chính xác Bỏ sót lỗi / Báo nhầm Độ chính xác (%)
Sản phẩm chuẩn (Không lỗi) 80 78 2 (Báo nhầm) 97.50%
Sản phẩm lỗi mẻ góc/vỡ cạnh 42 39 3 (Bỏ sót) 92.86%
TỔNG KẾT ĐỘ CHÍNH XÁC:
- Nhận dạng & Phân loại hình học:  96.72% [██████████████████░]
- Phát hiện khuyết tật cạnh ngoài: 92.86% [████████████████░░░]
- Thời gian xử lý khung hình:      145 ms/frame (~6.9 FPS)
- Công suất tiêu thụ hệ thống:     4.2 W

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

  1. Tối ưu hóa giải thuật xấp xỉ hình học trên chip nhúng ARM: Thay vì triển khai mạng nơ-ron tích chập (CNN) nặng nề đòi hỏi bộ tăng tốc phần cứng đắt tiền, dự án đã trích xuất đặc trưng hình học tường minh thông qua thuật toán Ramer-Douglas-Peucker kết hợp công thức diện tích Heron và tiêu chuẩn Circularity. Giải pháp này giúp thời gian suy luận chỉ mất ~145ms trên CPU BCM2837.
  2. Kỹ thuật phát hiện khuyết tật không cần tập mẫu đối chiếu (Reference-Free Inspection): Hệ thống so sánh diện tích thực tế điểm ảnh với diện tích bao hình học lý thuyết ($S_{thực}$ vs $S_{lý\ thuyết}$). Cơ chế này cho phép phát hiện tức thì các vết mẻ, vỡ góc mà không cần huấn luyện dữ liệu trước.
  3. Hiệu quả kinh tế vượt trội: Hệ sinh thái thiết bị có chi phí phần cứng < 2.500.000 VNĐ, giúp giảm hơn 80% chi phí đầu tư ban đầu so với việc lắp ráp hệ thống kiểm tra quang học tự động (AOI) dùng PC công nghiệp.

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

Kịch bản ứng dụng thực tế

  • Dây chuyền đóng gói bánh kẹo gia đình và hợp tác xã: Tự động phân luồng bánh quy sau lò nướng vào 4 khay chứa riêng biệt theo hình dạng.
  • Hệ thống QC/QA loại bỏ phế phẩm: Tích hợp tại băng chuyền kiểm tra trước khi đóng gói kín để đẩy các sản phẩm nứt vỡ ra thùng phế phẩm.
+-----------------------------------------------------------------------+
|                 HƯỚNG DẪN TRIỂN KHAI HỆ THỐNG TRÊN LINUX             |
+-----------------------------------------------------------------------+
# 1. Kích hoạt camera interface trên Raspberry Pi
sudo raspi-config  --> Interfacing Options --> Camera --> Enable
sudo reboot

# 2. Cài đặt các gói phụ thuộc cần thiết
sudo apt-get update
sudo apt-get install python3-opencv python3-numpy python3-pil.imagatk -y

# 3. Chạy chương trình phân loại trực tiếp
python3 main_classification_gui.py

Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI)

  • Chi phí đầu tư thiết bị:
    • Kit Raspberry Pi 3B + Thẻ nhớ 16GB + Nguồn: 1.200.000 VNĐ.
    • Camera Pi Module V1 5MP: 350.000 VNĐ.
    • Khung đỡ, buồng chụp mica, đèn LED chiếu sáng chuẩn: 450.000 VNĐ.
    • Tổng chi phí: ~2.000.000 VNĐ.
  • Hiệu quả kinh tế: Thay thế 1 vị trí nhân công kiểm tra thủ công tại xưởng sản xuất nhỏ (tiết kiệm ~6.000.000 VNĐ/tháng). Thời gian thu hồi vốn đầu tư (ROI) chỉ dưới 1 tháng.

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

Hạn chế kỹ thuật

  • Độ nhạy cảm ánh sáng: Chất lượng phân đoạn biên Canny phụ thuộc nhiều vào độ đồng đều của nguồn sáng buồng chụp. Khi ánh sáng môi trường thay đổi đột ngột, ngưỡng gradient có thể xuất hiện biên giả.
  • Phạm vi bắt lỗi: Mới dừng lại ở việc phát hiện khuyết tật trên chu vi cạnh ngoài; chưa phát hiện được vết nứt chân chim hoặc dị vật nằm trên bề mặt bên trong bánh.
  • Tốc độ xử lý realtime: Tốc độ xử lý ~7 FPS đáp ứng tốt cho băng chuyền tốc độ chậm - trung bình, nhưng cần cải thiện nếu áp dụng cho băng tải công nghiệp tốc độ cao (>20 sản phẩm/giây).

Hướng nâng cấp

  • Nâng cấp phần cứng lên Raspberry Pi 4 hoặc tích hợp chip tăng tốc AI Google Coral Edge TPU / Raspberry Pi AI Hat để chạy các mô hình phân đoạn ngữ nghĩa (Semantic Segmentation).
  • Tích hợp thêm cảm biến màu sắc HSV để phân loại bánh cháy khét hoặc bánh chưa chín đều.
  • Kết nối chân GPIO với driver điều khiển van khí nén hoặc động cơ Servo nhằm tự động gạt sản phẩm lỗi vào khay riêng trên băng chuyền thực tế.

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

  • Sinh viên ngành Kỹ thuật Điện tử - Viễn thông, Tự động hóa & CNTT: Nắm vững tài liệu mẫu về quy trình phát triển dự án thị giác máy tính nhúng hoàn chỉnh từ phần cứng tới thuật toán OpenCV trên Python.
  • Kỹ sư phát triển hệ thống nhúng (Embedded Developers): Nắm bắt kiến trúc xử lý hình ảnh tối ưu tài nguyên phần cứng, kỹ thuật xấp xỉ Ramer-Douglas-Peucker và xử lý hình thái học.
  • Doanh nghiệp vừa và nhỏ (SMEs), Cơ sở chế biến thực phẩm: Giải pháp công nghệ giá rẻ, dễ bảo trì để nâng cấp dây chuyền phân loại tự động mà không cần đầu tư hàng trăm triệu đồng cho hệ thống ngoại nhập.
  • Nhà nghiên cứu ứng dụng: Cung cấp bộ số liệu đo kiểm thực tế về hiệu năng phân loại hình học và giới hạn biên trên các vi xử lý ARM kiến trúc thấp.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu một bo mạch Raspberry Pi 3 Model B (hoặc Pi 4/Zero 2W), nguồn cấp 5V/2.5A ổn định, thẻ nhớ MicroSD tối thiểu 8GB Class 10 cài đặt hệ điều hành Raspbian OS, module Camera Raspberry Pi giao tiếp chuẩn CSI và một buồng chụp kín có đèn LED trắng tán xạ đều.

2. Thuật toán Ramer-Douglas-Peucker hoạt động như thế nào trong phân loại?

Thuật toán RDP tiến hành làm giảm số lượng điểm trên một đường cong viền kín dựa trên ngưỡng khoảng cách vuông góc $\epsilon$. Kết quả trả về là một đa giác đơn giản hóa với số đỉnh rõ ràng: 3 đỉnh đại diện cho tam giác, 4 đỉnh đại diện cho hình vuông hoặc chữ nhật, và nhiều đỉnh (hoặc kiểm tra độ tròn) đại diện cho hình tròn.

3. Hệ thống có thể mở rộng để phân loại sản phẩm có màu sắc khác nhau không?

Hoàn toàn có thể. Bằng cách chuyển đổi không gian màu sang HSV (cv2.cvtColor(img, cv2.COLOR_BGR2HSV)), hệ thống có thể dễ dàng thiết lập ngưỡng mặt nạ (Mask Thresholding) cho các dải màu (đỏ, vàng, xanh, nâu bánh cháy) song song với bước nhận dạng hình học hiện có.

4. Chi phí bảo trì và độ bền của thiết bị trong môi trường công nghiệp ra sao?

Do không chứa quạt cơ học chuyển động và sử dụng mạch nhúng trạng thái rắn, hệ thống có độ bền cao (MTBF > 30.000 giờ) nếu được đặt trong hộp bảo vệ chống bụi và ẩm chuẩn IP54. Chi phí bảo trì định kỳ gần như bằng không, chủ yếu là vệ sinh ống kính camera.

5. Làm sao để giải quyết tình trạng các sản phẩm dính liền nhau trên băng chuyền?

Trong thực tế, khi 2 sản phẩm dính nhau, đường biên sẽ tạo ra diện tích lớn bất thường và số đỉnh thay đổi. Ta có thể áp dụng thuật toán biến đổi khoảng cách (Distance Transform) kết hợp Watershed Algorithm hoặc phép co (Erosion) trong hình thái học Morphology để tách rời các đối tượng liên thông trước khi đưa vào hàm nhận dạng.


Kết luận

Đồ án tốt nghiệp "Phân loại sản phẩm dùng Kit Raspberry" đã chứng minh tính khả thi và hiệu quả cao của việc ứng dụng thị giác máy tính mã nguồn mở trên nền tảng phần cứng nhúng chi phí thấp. Với độ chính xác phân loại hình học đạt 96.72% và khả năng phát hiện khuyết tật cạnh ngoài đạt 92.86%, mô hình đáp ứng toàn diện các tiêu chuẩn kỹ thuật đề ra, mở ra tiềm năng ứng dụng thực tiễn to lớn trong việc hiện đại hóa các dây chuyền sản xuất bánh kẹo và thực phẩm quy mô vừa và nhỏ tại Việt Nam.