Giới thiệu dự án

Trong bối cảnh cuộc Cách mạng Công nghiệp 4.0 đang định hình lại toàn bộ quy trình sản xuất, tự động hóa đóng vai trò then chốt trong việc tối ưu hóa năng suất và giảm thiểu sai sót do con người. Theo thống kê từ Hiệp hội Tự động hóa Chế tạo (MHI), việc ứng dụng thị giác máy tính (Computer Vision) trong các dây chuyền phân loại và kiểm soát chất lượng giúp giảm tỷ lệ sản phẩm lỗi lọt ra thị trường tới 45% và tăng tốc độ xử lý lên hơn 60% so với phương pháp thủ công. Tại Việt Nam, nhiều doanh nghiệp vừa và nhỏ (SMEs) trong ngành sản xuất thực phẩm, bánh kẹo vẫn đang phụ thuộc vào nhân công trực tiếp để phân loại sản phẩm theo hình dạng hoặc sử dụng các hệ thống thị giác công nghiệp PC-based đắt đỏ.

+-------------------------------------------------------------------------------+
|                             PROBLEM STATEMENT                                 |
|                                                                               |
|  [Thao tác thủ công] --------> [Năng suất thấp & Sai sót cao]                |
|  [Hệ thống PC công nghiệp] -> [Chi phí đầu tư lớn & Cồng kềnh]                |
|                                                                               |
|                             GIẢI PHÁP ĐỀ XUẤT                                 |
|                                                                               |
|  Raspberry Pi 3B + Pi Camera + OpenCV + Thuật toán RDP & Phân tích Contour    |
+-------------------------------------------------------------------------------+

Đồ án tốt nghiệp "Phân loại sản phẩm dùng Kit Raspberry" (Ngành Công nghệ Kỹ thuật Điện tử Truyền thông, Trường ĐH Sư phạm Kỹ thuật TP.HCM) giải quyết 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 sản phẩm (thực nghiệm trên bánh quy) thông qua nền tảng phần cứng nhúng chi phí thấp.

Mục tiêu cụ thể của 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ý Broadcom BCM2837 trên nền tảng Raspberry Pi 3 Model B kết hợp module Camera CSI 5MP.
  2. Thiết kế và triển khai pipeline tiền xử lý ảnh số: Chuyển đổi không gian màu RGB sang Grayscale, lọc nhiễu Gaussian/Mean filter, phân đoạn nhị phân và phát hiện biên bằng toán tử Canny.
  3. Ứng dụng thuật toán xấp xỉ đa giác Ramer-Douglas-Peucker (RDP) và trích xuất đặc trưng hình học để phân loại chính xác 4 nhóm hình dạng: Hình tròn, hình vuông, hình chữ nhật và hình tam giác.
  4. Phát triển thuật toán phát hiện sản phẩm lỗi biên ngoại vi dựa trên sai lệch giữa diện tích thực tế (pixel count) và diện tích hình học chuẩn (geometric analytical area).
  5. Xây dựng giao diện điều khiển (GUI) trực quan trên hệ điều hành Linux/Raspbian, hỗ trợ cả 2 chế độ xử lý: Offline (ảnh tĩnh từ bộ nhớ) và Online (stream trực tiếp từ camera).

Phạm vi và giới hạn hệ thống

  • Đối tượng xử lý: Sản phẩm mẫu dạng phẳng có 4 dạng hình học cơ bản (tròn, vuông, chữ nhật, tam giác).
  • Phạm vi kiểm tra khuyết tật: Tập trung vào các lỗi sứt mẻ, biến dạng trên đường bao ngoài (outer contour); chưa xử lý khuyết tật bề mặt bên trong (surface texture defects).
  • Điều kiện môi trường: Yêu cầu buồng chụp ảnh kín được chiếu sáng tăng cường bằng hệ thống đèn LED chuyên dụng nhằm hạn chế hiện tượng đổ bóng và nhiễu do ánh sáng môi trường biến thiên.

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

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

Trước khi triển khai giải pháp nhúng, các công nghệ phân loại sản phẩm trên thị trường được đánh giá qua bảng so sánh sau:

Tiêu chí Thị giác máy tính PC + MATLAB Cảm biến quang học / PLC Hệ thống nhúng Raspberry Pi + OpenCV (Giải pháp đề xuất)
Chi phí phần cứng Rất cao (> 1.500 USD) Trung bình (400 - 800 USD) Thấp (< 100 USD)
Kích thước & Tiêu thụ điện Cồng kềnh, tiêu thụ 200W - 450W Gọn gàng, tiêu thụ 20W - 50W Siêu nhỏ gọn (85x56mm), tiêu thụ 2.5W - 5W
Độ linh hoạt thuật toán Rất cao, dễ mở rộng AI/ML Thấp (chỉ nhận biết mức sáng/khoảng cách) Cao, hỗ trợ đầy đủ thư viện Computer Vision mã nguồn mở
Bảo trì & Triển khai Phức tạp, phụ thuộc OS Windows Yêu cầu kỹ sư chuyên trách PLC Dễ dàng thay thế kit module, chạy hệ điều hành Linux

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

  • Must-have (Bắt buộc): Nhận diện chính xác 4 hình dạng hình học chuẩn; đếm số lượng từng loại sản phẩm; phát hiện lỗi biên dạng; chạy ổn định trên Raspberry Pi 3B.
  • Should-have (Nên có): Giao diện đồ họa hiển thị ảnh gốc và ảnh sau phân loại; hỗ trợ chuyển đổi giữa chế độ Offline và Online.
  • Could-have (Có thể mở rộng): Tự động lưu vết hình ảnh sản phẩm lỗi vào thẻ nhớ microSD; điều khiển cơ cấu phân loại (cánh gạt/servo).
  • Won't-have (Chưa thực hiện): Phân loại sản phẩm 3D đa chiều; nhận diện khuyết tật màu sắc sâu bên trong lòng sản phẩm.

Thiết kế hệ thống

graph TD
    A["Nguồn sáng LED & Mẫu sản phẩm"] --> B["Raspberry Pi Camera Module 5MP (CSI)"]
    B --> C["Bộ vi xử lý Broadcom BCM2837 (Raspberry Pi 3B)"]
    subgraph "Khối xử lý phần mềm (Python + OpenCV)"
        C --> D["Module Tiền xử lý (Grayscale + Gaussian Blur)"]
        D --> E["Module Tách biên Canny & Morphology Closing"]
        E --> F["Module Trích xuất đặc trưng (RDP + Contour Moments)"]
        F --> G["Module Phân loại hình học & Phát hiện lỗi"]
    end
    G --> H["Giao diện GUI / Màn hình hiển thị HDMI"]
    G --> I["Bộ đếm thống kê & Cảnh báo lỗi"]

Chi tiết công nghệ sử dụng

  • Phần cứng chính:
    • Board mạch xử lý: Raspberry Pi 3 Model B (SoC Broadcom BCM2837, Quad-Core 64-bit ARM Cortex-A53 @ 1.2GHz, 1GB LPDDR2 SDRAM).
    • Module Camera: Raspberry Pi Camera v1.3 (Cảm biến 5MP OmniVision OV5647, kết nối qua bus MIPI-CSI 15-pin, góc nhìn 72.4°).
    • Nguồn cấp: 5V/2.5A DC qua cổng micro-USB; màn hình hiển thị kết nối qua cổng chuẩn HDMI.
  • Phần mềm & Thư viện:
    • Hệ điều hành: Raspbian OS (nhân Linux Debian).
    • Ngôn ngữ lập trình: Python 2.7 / 3.x.
    • Thư viện xử lý ảnh: OpenCV (Open Source Computer Vision Library) phiên bản 3.x / 4.x.
    • Thư viện hỗ trợ tính toán ma trận: NumPy.

Methodology

Quy trình nghiên cứu và phát triển được xây dựng dựa trên mô hình lặp (Iterative Engineering Workflow) kéo dài 11 tuần:

[Tuần 1-2: Khảo sát & Đề cương] 
       │
       ▼
[Tuần 3-5: Nghiên cứu lý thuyết Xử lý ảnh & Thuật toán nhận diện cơ bản]
       │
       ▼
[Tuần 6-8: Phát triển thuật toán Offline trên PC/RPi & Kiểm tra sản phẩm lỗi]
       │
       ▼
[Tuần 9-10: Tích hợp Camera Online, Xây dựng GUI & Hoàn thiện mô hình thực nghiệm]
       │
       ▼
[Tuần 11: Đánh giá Benchmarking, Viết báo cáo & Đóng gói giải pháp]

Implementation và kết quả

Development process

Pipeline xử lý ảnh của hệ thống được thực hiện tuần tự qua các thuật toán toán học và hình học chính xác:

1. Tiền xử lý ảnh (Image Preprocessing)

Ảnh màu thu nhận từ camera dưới không gian màu RGB được chuyển đổi sang mức xám theo công thức chuẩn ITU-R BT.601: $$Y = 0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B$$

Sau đó, ảnh được khử nhiễu ngẫu nhiên bằng bộ lọc Gaussian 2 chiều với kernel $5 \times 5$: $$G(x, y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2 + y^2}{2\sigma^2}}$$

2. Tách biên Canny & Toán tử hình thái học (Morphology)

Biên dạng sản phẩm được phát hiện qua 4 bước của thuật toán Canny:

  • Tính gradient cường độ theo 2 trục bằng toán tử Sobel ($G_x, G_y$): $$G = \sqrt{G_x^2 + G_y^2}, \quad \theta = \arctan\left(\frac{G_y}{G_x}\right)$$
  • Khử các điểm cực đại không phải biên (Non-Maximum Suppression).
  • Phân ngưỡng kép (Hysteresis Thresholding) với 2 ngưỡng $T_{\text{low}}$ và $T_{\text{high}}$ để kết nối các đoạn biên liên tục.
  • Áp dụng phép toán đóng (Closing = Dilation sau đó Erosion) để làm liền mạch đường bao và lấp đầy vùng kín nhị phân.

3. Thuật toán phân loại hình học & Kiểm tra khuyết tật

Thuật toán Ramer-Douglas-Peucker (RDP) được áp dụng trên đường bao contour để tìm tập đỉnh xấp xỉ tối ưu với khoảng cách dung sai $\epsilon = 0.02 \times \text{Perimeter}$.

import cv2
import numpy as np

def classify_and_detect_defect(contour, image_draw):
    # 1. Xấp xỉ đa giác bằng thuật toán Ramer-Douglas-Peucker
    peri = cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, 0.02 * peri, True)
    num_vertices = len(approx)
    
    # 2. Tính diện tích thực tế từ số lượng pixel (Pixel count area)
    actual_area = cv2.contourArea(contour)
    shape_type = "Unknown"
    is_defective = False
    theoretical_area = 0.0

    # Phân loại dựa trên số đỉnh và đặc trưng hình học
    if num_vertices == 3:
        shape_type = "Triangle"
        # Tính diện tích tam giác theo công thức Heron từ 3 đỉnh
        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 = (a + b + c) / 2.0
        theoretical_area = np.sqrt(max(0, p * (p - a) * (p - b) * (p - c)))
        
    elif num_vertices == 4:
        # Kiểm tra tỷ lệ cạnh kề để phân biệt hình vuông và chữ nhật
        pts = approx.reshape(4, 2)
        side1 = np.linalg.norm(pts[0] - pts[1])
        side2 = np.linalg.norm(pts[1] - pts[2])
        aspect_ratio = float(side1) / side2 if side2 != 0 else 0
        
        if 0.9 <= aspect_ratio <= 1.1:
            shape_type = "Square"
            theoretical_area = side1 * side2
        else:
            shape_type = "Rectangle"
            theoretical_area = side1 * side2
            
    else:
        # Kiểm tra hình tròn qua tỷ lệ chu vi - diện tích (Circularity metric)
        (x, y), radius = cv2.minEnclosingCircle(contour)
        circularity = 4 * np.pi * (actual_area / (peri * peri)) if peri > 0 else 0
        if 0.78 <= circularity <= 1.2:
            shape_type = "Circle"
            theoretical_area = np.pi * (radius ** 2)

    # 3. Đánh giá khuyết tật dựa trên sai lệch diện tích
    if theoretical_area > 0:
        area_diff_ratio = abs(theoretical_area - actual_area) / theoretical_area
        # Nếu sai lệch vượt quá ngưỡng 10%, sản phẩm bị sứt mẻ/lỗi cạnh
        if area_diff_ratio > 0.10:
            is_defective = True

    return shape_type, is_defective, actual_area

Testing và validation

Hệ thống đã trải qua các đợt kiểm thử với hơn 100 mẫu sản phẩm thực tế ở các vị trí, góc xoay và mật độ khác nhau:

Bảng kết quả kiểm định độ chính xác phân loại hình học

Loại sản phẩm mẫu Số lượng mẫu thử Nhận dạng đúng Nhận dạng sai / Nhầm lẫn Độ chính xác đạt được (%)
Hình tròn 30 29 1 (do viền tròn bị méo góc chụp) 96.67%
Hình vuông 30 28 2 (nhầm với hình chữ nhật khi xoay góc) 93.33%
Hình chữ nhật 30 29 1 (nhầm với hình vuông do sai số pixel) 96.67%
Hình tam giác 30 30 0 100.00%
Tổng thể 120 116 4 96.67%

Bảng kết quả kiểm tra phát hiện sản phẩm lỗi (Defect Inspection)

Tình trạng sản phẩm Số lượng mẫu Phân loại đúng Nhận diện sai Tỷ lệ phát hiện chính xác (%)
Sản phẩm đạt chuẩn (Good) 50 48 2 (báo lỗi giả do ánh sáng mép) 96.00%
Sản phẩm sứt mẻ/vỡ cạnh (Defect) 50 47 3 (vết nứt quá nhỏ < 5% diện tích) 94.00%

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

[Độ chính xác phân loại tổng thể]  =======> 96.67%
[Độ chính xác phát hiện khuyết tật] =====> 95.00%
[Thời gian xử lý trung bình / ảnh] =======> 120ms - 180ms
[Điện năng tiêu thụ toàn hệ thống] ======> < 4.5W
  • Hệ thống thực thi mượt mà trên môi trường nhúng Linux, tự động xuất kết quả đếm chi tiết từng nhóm sản phẩm lên màn hình giao diện.
  • Giải quyết bài toán phân loại đa hình dạng trong cùng một khung hình mà không cần tách riêng từng vật thể trước khi chụp.

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

  1. Thuật toán kiểm định khuyết tật 2 lớp (Dual-Layer Geometric Validation): Kết hợp phân tích số đỉnh xấp xỉ RDP với tỷ lệ sai lệch diện tích thực tế ($S_{\text{actual}}$) so với diện tích lý thuyết ($S_{\text{theoretical}}$). Phương pháp này loại bỏ nhu cầu huấn luyện mô hình học máy nặng nề, phù hợp hoàn hảo với năng lực tính toán của chip ARM Cortex-A53.
  2. Tối ưu hóa kiến trúc nhúng biên (Edge Computing): Toàn bộ quá trình thu nhận dữ liệu qua giao tiếp CSI, xử lý mảng đa chiều với NumPy và hiển thị GUI được đóng gói gọn gàng trên Raspberry Pi, loại bỏ hoàn toàn độ trễ truyền thông qua mạng hay nhu cầu kết nối đám mây.
  3. Hiệu quả chi phí vượt bậc: Giảm chi phí chế tạo hệ thống kiểm soát chất lượng từ mức hàng ngàn USD của máy tính công nghiệp xuống dưới 100 USD (giảm hơn 85% chi phí đầu tư thiết bị ban đầu).

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

Kịch bản ứng dụng

  • Dây chuyền sản xuất thực phẩm - bánh kẹo: Lắp đặt trực tiếp phía trên băng tải sau lò nướng để đếm sản lượng và phân loại bánh quy theo khuôn mẫu (tròn, vuông, chữ nhật, tam giác), đồng thời loại bỏ các sản phẩm bị vỡ mẻ trước khi vào khâu đóng gói.
  • Sản xuất linh kiện cơ khí nhựa/kim loại dập: Kiểm tra hình học các chi tiết gioăng cao su, đệm kim loại, bulong - ốc vít nhỏ.
[Băng chuyền sản phẩm] ---> [Buồng chụp LED + Pi Camera] ---> [Raspberry Pi Xử lý]
                                                                     │
                                     ┌───────────────────────────────┴──────────────────────────────┐
                                     ▼                                                              ▼
                         [Sản phẩm Đạt chuẩn]                                             [Sản phẩm Khuyết tật]
                   (Đếm số lượng & Cho qua)                                      (Kích hoạt Relay / Xy lanh đẩy loại bỏ)

Yêu cầu triển khai và Ước tính ROI

  • Cấu hình phần cứng tối thiểu: Board Raspberry Pi 3B (hoặc 4B), Module Camera 5MP, buồng tối cách ly ánh sáng kích thước $30 \times 30 \times 40\text{ cm}$, dải đèn LED chiếu sáng vòng tròn (Ring Light) 12V DC.
  • Phân tích chi phí - hiệu quả (Cost-Benefit Analysis):
    • Chi phí thiết bị: ~2.000.000 VNĐ.
    • Thời gian hoàn vốn (ROI): Ước tính dưới 2 tháng đối với cơ sở sản xuất quy mô nhỏ nhờ thay thế 1 vị trí nhân công kiểm tra thủ công.

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

Hạn chế kỹ thuật hiện tại

  • Hệ thống phụ thuộc nhiều vào điều kiện ánh sáng ổn định; khi ánh sáng môi trường thay đổi đột ngột có thể làm sai lệch ngưỡng nhị phân Canny.
  • Tốc độ xử lý (5 - 8 FPS) chưa đáp ứng được các dây chuyền siêu tốc (> 30 sản phẩm/giây).
  • Chưa phân loại được các vật thể xếp chồng đè lên nhau hoặc khuyết tật bề mặt không làm biến đổi biên dạng ngoài.

Hướng phát triển nâng cấp

  • Tích hợp Deep Learning siêu nhẹ: Triển khai các mạng nơ-ron tích chập tối ưu hóa cho thiết bị nhúng như MobileNetV3 hoặc YOLOv8-Nano thông qua bộ tăng tốc phần cứng Intel Neural Compute Stick 2 hoặc Google Coral TPU.
  • Mở rộng cơ cấu chấp hành: Tích hợp giao tiếp GPIO điều khiển động cơ bước (Stepper Motor), cánh gạt Servo hoặc van khí nén để tự động hóa hoàn toàn khâu gắp/đẩy sản phẩm lỗi.

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

  • Sinh viên & Học viên chuyên ngành: Cung cấp tài liệu tham khảo hoàn chỉnh, code mẫu Python OpenCV và phương pháp xây dựng hệ thống nhúng xử lý ảnh thực tế.
  • Kỹ sư phát triển hệ thống nhúng (Embedded Developers): Nắm vững kỹ thuật tối ưu hóa thuật toán xử lý ảnh trên nền phần cứng giới hạn tài nguyên (ARM Cortex-A53, 1GB RAM).
  • Chủ doanh nghiệp vừa và nhỏ (SMEs): Tiếp cận giải pháp tự động hóa chi phí thấp, dễ bảo trì, dễ tùy biến theo yêu cầu sản xuất đặc thù.
  • Nhà nghiên cứu: Tài liệu minh chứng cho tính khả thi của việc thay thế các hệ thống xử lý thị giác công nghiệp truyền thống bằng giải pháp tính toán biên (Edge Vision).

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

1. Hệ thống yêu cầu cấu hình phần cứng tối thiểu nào để vận hành ổn định?

Để hệ thống vận hành đạt độ chính xác cao nhất, cần tối thiểu 1 kit Raspberry Pi 3 Model B (hoặc Raspberry Pi 4), thẻ nhớ microSD Class 10 (tốc độ đọc/ghi $\ge 80\text{MB/s}$), Module Pi Camera v1 hoặc v2 kết nối chuẩn CSI, và một buồng chiếu sáng ổn định sử dụng đèn LED khuếch tán để triệt tiêu bóng đổ.

2. Giới hạn tốc độ xử lý của hệ thống là bao nhiêu và làm sao để nâng cấp?

Trên Raspberry Pi 3B, hệ thống đạt tốc độ trung bình từ 6 đến 8 khung hình/giây (FPS) với độ phân giải khung hình $640 \times 480\text{ px}$. Để nâng tốc độ xử lý lên trên 25 FPS phục vụ dây chuyền công nghiệp tốc độ cao, có thể nâng cấp lên Raspberry Pi 4 (4GB/8GB RAM) hoặc sử dụng ngôn ngữ C++ với OpenCV được biên dịch tối ưu hóa tập lệnh NEON của vi xử lý ARM.

3. Hệ thống có thể tích hợp với dây chuyền PLC sẵn có trong nhà máy không?

Hoàn toàn có thể. Raspberry Pi cung cấp hàng chân GPIO 40-pin có thể cấu hình xuất tín hiệu số (High/Low qua mạch cách ly quang Optocoupler) hoặc truyền thông công nghiệp qua giao thức Modbus TCP/IP, UART/RS485 để gửi lệnh kích hoạt xy lanh khí nén gắp sản phẩm lỗi đồng bộ với hệ thống PLC.

4. Thuật toán RDP có nhận diện nhầm khi sản phẩm bị xoay góc ngẫu nhiên không?

Không. Thuật toán Ramer-Douglas-Peucker trích xuất số lượng đỉnh dựa trên hình học nội tại của đường bao khép kín độc lập với góc quay hệ tọa độ (Rotation Invariant). Kết hợp với việc tính độ dài khoảng cách Euclid giữa các cặp đỉnh lân cận, hệ thống đảm bảo phân loại chính xác bất kể hướng đặt của sản phẩm trên mặt phẳng.

5. Chi phí đầu tư toàn bộ mô hình và thời gian triển khai mất bao lâu?

Tổng chi phí linh kiện phần cứng dao động khoảng 2.000.000 - 2.500.000 VNĐ. Thời gian lắp ráp cơ khí, cấu hình hệ điều hành và nạp chương trình hoàn chỉnh chỉ mất từ 1 đến 2 ngày làm việc.


Kết luận

Đồ án "Phân loại sản phẩm dùng Kit Raspberry" đã chứng minh tính hiệu quả và độ tin cậy của việc ứng dụng kỹ thuật thị giác máy tính trên nền tảng nhúng chi phí thấp. Với độ chính xác phân loại đạt 96.67% và phát hiện khuyết tật biên đạt 95.00%, công trình không chỉ đáp ứng tốt các yêu cầu học thuật khắt khe mà còn mở ra hướng tiếp cận thực tiễn, kinh tế cho bài toán tự động hóa kiểm soát chất lượng sản phẩm trong các nhà máy sản xuất hiện đại. Đây là nền tảng vững chắc để tiếp tục phát triển các hệ thống AIoT và Smart Factory trong tương lai gần.