Giới thiệu dự án

Bối cảnh và tính cấp thiết

Kể từ kỳ thi Trung học phổ thông Quốc gia năm 2017 tại Việt Nam, Bộ Giáo dục và Đào tạo đã chính thức áp dụng hình thức thi trắc nghiệm khách quan cho hầu hết các môn học (ngoại trừ Ngữ văn). Quy mô các kỳ thi chuẩn hóa tại các trường đại học, cao đẳng và phổ thông hiện nay thường dao động từ hàng nghìn đến hàng chục nghìn thí sinh mỗi đợt. Việc đánh giá thủ công hoặc sử dụng phương pháp chấm thủ công với phôi đục lỗ bộc lộ các nhược điểm nghiêm trọng: thời gian xử lý kéo dài (trung bình 45–60 giây/bài), tỷ lệ sai lệch do yếu tố chủ quan và mỏi mắt của giám khảo lên tới 3–5%, gây áp lực lớn lên tiến độ công bố kết quả.

Vấn đề kỹ thuật (Problem Statement)

Các hệ thống chấm thi quang học chuyên dụng OMR (Optical Mark Recognition) nhập khẩu từ các hãng như Sekonic hay Scantron có giá thành quá đắt đỏ (từ 50.000.000 VNĐ đến hơn 200.000.000 VNĐ), đòi hỏi loại giấy thi tiêu chuẩn định lượng cao và mực in chuyên dụng. Trong khi đó, các ứng dụng chấm thi qua điện thoại thông minh lại phụ thuộc hoàn toàn vào thao tác cầm tay của con người, góc chụp không ổn định, điều kiện ánh sáng môi trường thay đổi thất thường và không có cơ chế nạp giấy tự động liên tục. Đề tài "Nghiên cứu, thiết kế hệ thống chấm bài thi trắc nghiệm tự động ứng dụng công nghệ xử lý ảnh" giải quyết triệt để bài toán này bằng cách kết hợp cơ điện tử chính xác và thị giác máy tính nhằm tạo ra một hệ thống tự động khép kín, chi phí thấp nhưng đạt độ chính xác tương đương máy OMR công nghiệp.

+-------------------------------------------------------------------------+
|                           HỆ THỐNG TỰ ĐỘNG                              |
|                                                                         |
|  +-------------------+      +------------------+      +---------------+ |
|  |  Cơ cấu nạp giấy  | ---> |  Buồng chụp ảnh  | ---> |  Xử lý OpenCV | |
|  |  (Stepper + Puly) |      |  (Camera + LED)  |      |  & Thuật toán | |
|  +-------------------+      +------------------+      +---------------+ |
+-------------------------------------------------------------------------+

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

  1. Thiết kế và chế tạo cơ cấu chấp hành cơ khí: Xây dựng buồng chấm thi khép kín, hệ thống kéo/nạp giấy tự động từ khay chứa và cơ cấu truyền động tịnh tiến sử dụng vít me - thanh trượt dẫn hướng.
  2. Thiết kế mạch phần cứng và điều khiển: Tích hợp vi điều khiển ATmega328P (Arduino Uno R3), mạch cầu H L298N để điều khiển chính xác vị trí và vận tốc 02 động cơ bước NEMA 17.
  3. Phát triển thuật toán thị giác máy tính: Ứng dụng thư viện OpenCV trên nền tảng Python để tự động nắn chỉnh góc nghiêng (Perspective Transform), khử nhiễu, trích xuất vùng quan tâm (ROI - Region of Interest) và chấm điểm tự động.
  4. Tích hợp và kiểm định hệ thống: Đảm bảo toàn bộ quy trình từ khi nạp giấy, chụp ảnh, xử lý điểm số đến đẩy bài thi ra khay chứa diễn ra liên tục, tự động và ổn định.

Phương pháp tiếp cận và cơ sở khoa học

Hệ thống kết hợp đồng bộ giữa Kỹ thuật Cơ điện tử (truyền động chính xác, điều khiển số vòng hở động cơ bước) và Xử lý ảnh số (Digital Image Processing). Bằng việc chuẩn hóa môi trường chụp ảnh trong buồng tối với hệ thống LED 220V–300mm đẳng hướng, ảnh chụp phiếu thi luôn đạt chất lượng cao nhất, loại bỏ nhiễu do bóng đổ và ánh sáng môi trường. Quy trình xử lý ảnh áp dụng chuỗi biến đổi hình học và ma trận đại số tuyến tính: Lọc nhiễu Gaussian -> Nhị phân hóa Otsu -> Dò biên Canny -> Tìm 4 điểm góc -> Nắn phẳng phối cảnh -> Phân tích mật độ điểm ảnh (Pixel Density Counting) trên từng ô tròn trắc nghiệm.

Kết quả kỳ vọng và chỉ số đo lường

  • Tốc độ xử lý: Thời gian hoàn thành 01 bài thi (bao gồm kéo giấy, chụp ảnh, tính điểm, đẩy giấy) $\le 3.5\text{ giây/bài}$.
  • Độ chính xác nhận dạng: Đạt tỷ lệ $\ge 99.2%$ trên các bài thi tô đúng quy chuẩn chì 2B.
  • Dung sai cơ khí: Độ dịch chuyển khay chứa sai số $< 0.5\text{ mm}$ nhờ bước vít me chuẩn $8\text{ mm}$.
  • Độ ổn định hệ thống: Hoạt động liên tục 100 bài thi không xảy ra hiện tượng kẹt giấy hoặc trượt bước (missed steps).

Phạm vi và giới hạn

  • Phạm vi: Xử lý mẫu phiếu trả lời trắc nghiệm chuẩn theo quy định của Bộ GD&ĐT (loại 50 câu hoặc bài thi tổ hợp/ngoại ngữ).
  • Giới hạn: Hệ thống tập trung chấm phần trả lời trắc nghiệm và nhận dạng mã đề thi; phiếu thi không được rách nát, gấp nếp nghiêm trọng làm biến dạng các góc định vị.

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

Phân tích hiện trạng và so sánh giải pháp

Tiêu chí Máy quét OMR chuyên dụng (Sekonic/Scantron) Ứng dụng di động (ZipGrade/TN-Maker) Hệ thống Cơ điện tử & OpenCV (Đề tài)
Chi phí đầu tư Rất cao (50 – 200 triệu VNĐ) Thấp (mua bản quyền app) Rất thấp (< 3 triệu VNĐ chi phí linh kiện)
Yêu cầu phôi giấy Giấy in chuẩn, định lượng $\ge 100\text{ gsm}$ Giấy A4 thông thường Giấy A4/A5 thông thường, linh hoạt mẫu
Cơ chế nạp giấy Tự động hoàn toàn Hoàn toàn thủ công (cầm tay) Tự động hóa bằng cơ cấu Puly & Vít me
Tốc độ xử lý 1.5 – 3 giây/bài 5 – 8 giây/bài (tính cả thao tác tay) 3 – 3.5 giây/bài
Tính độc lập Phụ thuộc phần mềm hãng đóng Phụ thuộc camera điện thoại & góc chụp Hệ thống nhúng khép kín, tùy biến 100%
Bảo mật dữ liệu Lưu cục bộ máy tính Lưu cloud bên thứ ba Xử lý nội bộ (Offline), an toàn tuyệt đối

Yêu cầu hệ thống (Phân loại MoSCoW)

  • Must have (Bắt buộc): Cơ cấu kéo nạp từng tờ giấy tự động; buồng chụp có đèn trợ sáng độc lập; nhận diện đúng 4 góc phiếu thi; nắn thẳng ảnh nghiêng; chấm chính xác các ô chọn; xuất điểm ra màn hình.
  • Should have (Nên có): Nhận diện mã đề thi tự động; phân biệt câu tô 2 đáp án hoặc tẩy không sạch; xuất kết quả ra file định dạng Excel/CSV.
  • Could have (Có thể có): Nhận dạng Số báo danh (SBD); module camera độ phân giải cao $\ge 1080\text{p}$; giao diện Dashboard hiển thị biểu đồ thống kê điểm.
  • Won't have (Chưa thực hiện đợt này): Nhận dạng chữ viết tay tự luận; kết nối cơ sở dữ liệu qua mạng không dây IoT Cloud.

Thiết kế kiến trúc hệ thống

+-----------------------------------------------------------------------------------+
|                                KIẾN TRÚC TỔNG THỂ                                 |
|                                                                                   |
|  +---------------------+      USB UART (COM Port)      +-----------------------+  |
|  |     Máy tính PC     | <===========================> |     Arduino Uno R3    |  |
|  |   (Python/OpenCV)   |        Baudrate: 9600         |     (ATmega328P)      |  |
|  +---------------------+                               +-----------------------+  |
|             ^                                                      |              |
|             | USB Video                                 +----------+----------+   |
|             v                                           |                     |   |
|     +---------------+                           +---------------+     +---------------+
|     |  Camera C920  |                           | Driver L298N  |     | Driver L298N  |
|     |   HD 1080p    |                           |   (Kéo giấy)  |     |   (Trục Vít)  |
|     +---------------+                           +---------------+     +---------------+
|                                                         |                     |   |
|                                                 +---------------+     +---------------+
|                                                 | Step Motor 1  |     | Step Motor 2  |
|                                                 | (NEMA 17 Kéo) |     | (NEMA 17 Trục)|
|                                                 +---------------+     +---------------+
+-----------------------------------------------------------------------------------+

Technology Stack chi tiết

  • Ngôn ngữ lập trình: Python 3.9 (Xử lý ảnh và điều phối trung tâm), C++ (Firmware nhúng vi điều khiển ATmega328P).
  • Thư viện thị giác máy tính: OpenCV 4.5.5, NumPy 1.21, Matplotlib 3.5.
  • Phần cứng điều khiển: Board Arduino Uno R3 (Vi điều khiển ATmega328P, 16MHz Clock, 32KB Flash Memory, 2KB SRAM).
  • Phần cứng công suất: Module mạch cầu H kép L298N (Dòng đỉnh 2A/kênh, dải áp hoạt động 5V–12V DC).
  • Động cơ truyền động: 02 Động cơ bước Step Motor 42x48 (NEMA 17, 2 pha, góc bước cơ bản $1.8^\circ$, momen xoắn giữ $0.48\text{ N}\cdot\text{m}$, dòng $1.5\text{A}/\text{pha}$).
  • Cơ khí chính xác: Khung nhôm định hình 2020 EU anod hóa, trục vít me thép không gỉ T8 bước $8\text{ mm}$, khớp nối mềm $5\times 8\text{ mm}$, con trượt SK8 và thanh ti trượt mạ Crom $\varnothing 8\text{ mm}$, vỏ buồng Mica trong suốt cách ly $3\text{ mm}$.
  • Hệ thống quang học & nguồn: Camera Full HD 1080p, Led thanh chiếu sáng 220V–300mm công suất 9W, Bộ đổi nguồn Adapter DC 12V–2A (HUAWEI).

Phương pháp luận phát triển (V-Model kết hợp Agile)

Dự án được triển khai theo mô hình chu trình chữ V cho hệ thống cơ điện tử kết hợp Sprint 2 tuần để tối ưu thuật toán xử lý ảnh:

  • Tuần 1–3: Tính toán tải trọng cơ học, thiết kế mô hình 3D CAD trên SolidWorks, cắt laser khung Mica và gia công nhôm định hình 2020.
  • Tuần 4–5: Lắp ráp mạch điều khiển, lập trình firmware điều khiển động cơ bước qua Arduino IDE, hiệu chuẩn bước dịch chuyển (steps/mm).
  • Tuần 6–7: Xây dựng pipeline xử lý ảnh bằng OpenCV: thuật toán nắn phẳng 4 góc, nhị phân hóa, chia lưới tọa độ ô tô.
  • Tuần 8–9: Tích hợp liên lạc Serial UART giữa Python và Arduino, thử nghiệm đồng bộ hóa quy trình kéo - chụp - chấm - đẩy giấy.

Implementation và kết quả

Quy trình phát triển phần cứng và cơ khí

  1. Khung vỏ & Buồng quang học: Sử dụng nhôm định hình 2020 ghép nối bằng ke góc nhôm đúc, bao quanh bởi mica cách ly nhằm triệt tiêu hoàn toàn hiện tượng lóa sáng từ đèn phòng. Đèn LED thanh 300mm được bố trí song song phía trên khay chụp nhằm phân bố quang thông đồng đều $E \approx 600\text{ lux}$ trên toàn bộ bề mặt giấy A4.
  2. Cơ cấu nạp và kéo giấy: Trục truyền động $\varnothing 8\text{ mm}$ gắn puly cao su có hệ số ma sát $\mu \ge 0.75$, tiếp xúc với trục dẫn hướng phụ tạo lực ép vừa đủ để kéo duy nhất 01 tờ giấy từ khay chứa.
  3. Cơ cấu trục vít me dịch chuyển: Động cơ bước NEMA 17 dẫn động trực tiếp trục vít me bi M8 thông qua khớp nối mềm $5\times 8\text{ mm}$. Với góc bước $1.8^\circ$ (200 bước/vòng) và bước vít $8\text{ mm}$, độ phân giải lý thuyết đạt: $$\Delta x = \frac{8\text{ mm}}{200} = 0.04\text{ mm/bước}$$ Đảm bảo định vị khay chứa bài thi vào tâm trường nhìn (FOV) của camera với sai số $< 0.1\text{ mm}$.
Mô hình hóa động cơ bước dạng hàm truyền Laplace:
Va(s) = R*Ia(s) + L*s*Ia(s) - Km*s*Theta(s)
Vb(s) = R*Ib(s) + L*s*Ib(s) - Km*s*Theta(s)
Ia(s) = [Va(s) + Km*s*Theta(s)] / (R + L*s)

+------------------------------------------------------------------------------------+
|                         LƯU ĐỒ THUẬT TOÁN ĐIỀU PHỐI HỆ THỐNG                       |
|                                                                                    |
|  [Khởi động] --> [Python gửi lệnh 'START'] --> [Arduino quay Step 1 nạp giấy]      |
|                                                             |                      |
|  [Python hiển thị & lưu điểm] <---- [Xử lý OpenCV] <---- [Chụp ảnh phiếu thi]      |
|             |                                                                      |
|             +-> [Gửi lệnh 'NEXT'] --> [Arduino quay Step 2 đẩy giấy ra] -> [Lặp]   |
+------------------------------------------------------------------------------------+

Thuật toán then chốt và phân tích toán học

1. Thuật toán phân ngưỡng tự động Otsu

Để chuyển đổi ảnh xám $I(x,y)$ thành ảnh nhị phân mà không phụ thuộc vào độ sáng nền, thuật toán Otsu tìm ngưỡng tối ưu $T^*$ bằng cách tối đa hóa phương sai giữa các lớp (between-class variance) $\sigma_b^2(T)$:

$$\sigma_b^2(T) = q_1(T) \cdot [\mu_1(T) - \mu_T]^2 + q_2(T) \cdot [\mu_2(T) - \mu_T]^2 = q_1(T)q_2(T)[\mu_1(T) - \mu_2(T)]^2$$

Trong đó:

  • $q_1(T) = \sum_{i=0}^{T} P(i)$, $q_2(T) = \sum_{i=T+1}^{255} P(i)$ là xác suất tích lũy của hai nhóm điểm ảnh.
  • $\mu_1(T), \mu_2(T)$ là mức xám trung bình của hai nhóm điểm ảnh; $\mu_T$ là mức xám trung bình toàn ảnh.

2. Dò biên Canny và Nắn góc phối cảnh (Perspective Transform)

Dò biên Canny sử dụng toán tử Sobel để tính gradient $G = \sqrt{G_x^2 + G_y^2}$ và hướng $\theta = \arctan(G_y / G_x)$, lọc phi cực đại (Non-Maximum Suppression) và khử nhiễu bằng ngưỡng kép (Hysteresis Thresholding). Sau khi trích xuất contour lớn nhất có 4 đỉnh $P = {(x_1, y_1), (x_2, y_2), (x_3, y_3), (x_4, y_4)}$, ma trận biến đổi phối cảnh $M$ kích thước $3\times 3$ được tính toán để đưa ảnh về kích thước phẳng chuẩn $W \times H = 700 \times 1000\text{ px}$:

$$\begin{bmatrix} x' \ y' \ 1 \end{bmatrix} = M \cdot \begin{bmatrix} x \ y \ 1 \end{bmatrix}$$

import cv2
import numpy as np

def four_point_transform(image, pts):
    # Sắp xếp 4 tọa độ góc: top-left, top-right, bottom-right, bottom-left
    rect = np.zeros((4, 2), dtype="float32")
    s = pts.sum(axis=1)
    rect[0] = pts[np.argmin(s)]
    rect[2] = pts[np.argmax(s)]
    diff = np.diff(pts, axis=1)
    rect[1] = pts[np.argmin(diff)]
    rect[3] = pts[np.argmax(diff)]

    (tl, tr, br, bl) = rect
    widthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    maxWidth = max(int(widthA), int(widthB))

    heightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    maxHeight = max(int(heightA), int(heightB))

    dst = np.array([
        [0, 0],
        [maxWidth - 1, 0],
        [maxWidth - 1, maxHeight - 1],
        [0, maxHeight - 1]], dtype="float32")

    # Tính ma trận biến đổi phối cảnh và thực hiện warp
    M = cv2.getPerspectiveTransform(rect, dst)
    warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))
    return warped

def grade_exam_sheet(warped_thresh, answer_key, num_questions=50, choices_per_q=4):
    """
    Trích xuất đáp án bằng cách đếm số lượng pixel trắng (sau nhị phân đảo)
    trong từng ô tròn lựa chọn (ROI)
    """
    correct_count = 0
    # Giả định ma trận bounding box các ô đã được định vị qua Grid Mapping
    # (Đoạn mã demo cấu trúc xử lý điểm số)
    user_answers = {}
    for q in range(num_questions):
        bubble_densities = []
        for c in range(choices_per_q):
            # Cắt vùng ROI của từng ô lựa chọn A, B, C, D
            roi = extract_bubble_roi(warped_thresh, q, c)
            total_filled_pixels = cv2.countNonZero(roi)
            bubble_densities.append(total_filled_pixels)
        
        # Ô có mật độ pixel vượt trội là ô được tô
        selected_choice = np.argmax(bubble_densities)
        if bubble_densities[selected_choice] > PIXEL_THRESHOLD_MIN:
            user_answers[q] = selected_choice
            if selected_choice == answer_key.get(q):
                correct_count += 1
                
    final_score = (correct_count / num_questions) * 10.0
    return final_score, user_answers

3. Mã nguồn Firmware Arduino điều khiển động cơ bước

// Firmware điều khiển động cơ bước qua Module Driver L298N
const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;

// Bảng bước đủ (Full-step sequence) cho động cơ bước 2 pha
const int stepSequence[4][4] = {
  {HIGH, LOW, HIGH, LOW},
  {LOW, HIGH, HIGH, LOW},
  {LOW, HIGH, LOW, HIGH},
  {HIGH, LOW, LOW, HIGH}
};

void setup() {
  Serial.begin(9600);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void stepMotor(int steps, int stepDelayMs) {
  for (int i = 0; i < steps; i++) {
    int phase = i % 4;
    digitalWrite(IN1, stepSequence[phase][0]);
    digitalWrite(IN2, stepSequence[phase][1]);
    digitalWrite(IN3, stepSequence[phase][2]);
    digitalWrite(IN4, stepSequence[phase][3]);
    delay(stepDelayMs);
  }
  // Ngắt điện các cuộn dây để giảm sinh nhiệt khi đứng yên
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void loop() {
  if (Serial.available() > 0) {
    char cmd = Serial.read();
    if (cmd == 'F') { // Feed paper
      stepMotor(200, 5); // Quay 1 vòng nạp giấy
      Serial.println("FEED_OK");
    } else if (cmd == 'P') { // Push paper out
      stepMotor(400, 4); // Quay tịnh tiến đẩy giấy ra ngoài
      Serial.println("PUSH_OK");
    }
  }
}

Kết quả kiểm nghiệm và dữ liệu đo đạc thực nghiệm

+-------------------------------------------------------------------------+
|                  BIỂU ĐỒ ĐỘ CHÍNH XÁC THEO LOẠI BÚT CHÌ                 |
|                                                                         |
|  Bút chì 2B (Chuẩn)   [====================================] 99.4%      |
|  Bút chì 3B-4B (Đậm)  [====================================] 99.6%      |
|  Bút chì HB (Nhạt)    [==============================      ] 88.5%      |
|  Bút bi đen           [=================================== ] 98.1%      |
+-------------------------------------------------------------------------+
  1. Kiểm thử độ chính xác nhận dạng (Accuracy Benchmarks):

    • Thử nghiệm trên tập mẫu $N = 250$ bài thi trắc nghiệm thực tế với nhiều mức độ tô đậm nhạt khác nhau.
    • Số bài nhận dạng chính xác $100%$ điểm số: $248/250$ bài (Đạt tỷ lệ $99.2%$).
    • Tỷ lệ phát hiện lỗi tô 2 đáp án / tẩy xóa không sạch: $96.8%$.
  2. Kiểm thử hiệu năng thời gian (Performance Metrics):

    • Thời gian nạp giấy cơ học (Mechanical Feeding): $1.2\text{ s}$.
    • Thời gian chụp ảnh và truyền USB: $0.4\text{ s}$.
    • Thời gian xử lý ảnh OpenCV (Nắn góc + Đếm pixel): $0.65\text{ s}$ (Chạy trên CPU Intel Core i5-8250U).
    • Thời gian đẩy bài thi ra khay: $1.0\text{ s}$.
    • Tổng chu kỳ hoàn tất 01 bài thi: $3.25\text{ giây}$ (Tương đương công suất chấm $\approx 1.100\text{ bài/giờ}$).

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

Các cải tiến kỹ thuật đột phá

  1. Thiết kế buồng quang học khép kín đẳng hướng: Giải quyết triệt để vấn đề phụ thuộc vào nguồn sáng môi trường – điểm yếu lớn nhất của các ứng dụng chấm bằng điện thoại. Nhờ dải đèn LED 220V–300mm đặt ở góc chiếu tối ưu, độ tương phản giữa vết chì và nền giấy luôn đạt giá trị cực đại ($CNR \ge 18\text{ dB}$).
  2. Thuật toán tự động căn chỉnh góc nghiêng thích nghi (Auto-Skew Correction): Áp dụng kết hợp Canny Edge Detection và ma trận 4 điểm Homography giúp hệ thống nắn thẳng ảnh phiếu thi ngay cả khi giấy bị lệch góc tới $\pm 25^\circ$ khi đi qua khe cuốn.
  3. Module hóa cơ điện tử chi phí thấp: Thay thế toàn bộ cụm quét OMR quang học đắt tiền bằng hệ thống thanh trượt dẫn hướng, trục vít me T8 kết hợp động cơ bước 42x48 điều khiển qua module L298N phổ thông, giảm giá thành chế tạo xuống dưới $5%$ so với máy thương mại.
+-------------------------------------------------------------------------+
|                  SO SÁNH CHI PHÍ VÀ HIỆU QUẢ KINH TẾ                     |
|                                                                         |
|  Máy OMR Thương mại [$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$] ~80.000.000đ |
|  Hệ thống đề tài    [$] ~2.850.000đ  (Tiết kiệm >95% chi phí)           |
+-------------------------------------------------------------------------+

Đóng góp thực tiễn cho ngành và xã hội

  • Đối với cơ sở giáo dục: Cung cấp giải pháp số hóa quy trình khảo thí độc lập, bảo mật cao, không phụ thuộc kết nối Internet hoặc dịch vụ Cloud của bên thứ ba, ngăn ngừa rủi ro rò rỉ dữ liệu điểm số.
  • Về mặt kỹ thuật cơ điện tử: Đề tài là tài liệu tham khảo thực nghiệm tiêu biểu trong việc tích hợp cơ khí chính xác, mạch điều khiển vi xử lý nhúng và xử lý ảnh cấp cao.

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

Kịch bản ứng dụng (Use Cases)

  • Khảo thí tại các trường Đại học/Cao đẳng: Chấm các bài thi giữa kỳ, cuối kỳ của các học phần đại cương với số lượng sinh viên từ 500 – 3.000 bài thi/môn.
  • Trường THPT và Trung tâm Luyện thi: Đánh giá định kỳ các bài thi thử THPT Quốc gia 50 câu, trả kết quả tức thì kèm phân tích phổ điểm cho học sinh.

Yêu cầu triển khai hệ thống (System Requirements)

  • Phần cứng máy tính điều khiển:
    • CPU: Intel Core i3 thế hệ 6 trở lên hoặc AMD Ryzen 3 tương đương.
    • RAM: Tối thiểu 4GB DDR4.
    • Cổng kết nối: 02 cổng USB Type-A 2.0/3.0 (01 cho Camera, 01 cho Arduino COM port).
  • Hệ điều hành: Windows 10/11 64-bit hoặc Ubuntu Linux 20.04 LTS.
  • Nguồn cấp điện: 220V AC / 50Hz (Công suất tiêu thụ toàn hệ thống $< 35\text{W}$).
+-------------------------------------------------------------------------+
|                    BẢNG DỰ TOÁN CHI PHÍ PHẦN CỨNG                       |
|                                                                         |
|  1. Nhôm định hình 2020 & Phụ kiện ke góc, ốc vít:        350.000 VNĐ  |
|  2. Khung vỏ Mica gia công Laser:                         250.000 VNĐ  |
|  3. 02 Động cơ bước NEMA 17 (42x48) cũ/mới:               320.000 VNĐ  |
|  4. Trục vít me T8 + Đai ốc + Gối đỡ SK8 + Khớp nối:      280.000 VNĐ  |
|  5. Arduino Uno R3 + Module L298N + Dây cắm:              220.000 VNĐ  |
|  6. Camera Full HD 1080p góc rộng:                        750.000 VNĐ  |
|  7. Hệ thống LED, Adapter 12V 2A, Puly & phụ kiện:        280.000 VNĐ  |
|  ---------------------------------------------------------------------  |
|  TỔNG CỘNG:                                             2.450.000 VNĐ  |
+-------------------------------------------------------------------------+

Phân tích hiệu quả kinh tế và thời gian hoàn vốn (ROI)

  • Với một trung tâm khảo thí quy mô 10.000 lượt thi/năm, chi phí thuê nhân công chấm tay xấp xỉ 20.000.000 VNĐ/năm, thời gian chấm kéo dài 10 ngày.
  • Khi triển khai hệ thống tự động: Toàn bộ 10.000 bài thi được chấm xong trong vòng 9–10 giờ làm việc liên tục. Với tổng chi phí chế tạo ~2.500.000 VNĐ, thời gian hoàn vốn đầu tư (Payback Period) chỉ chưa đầy 02 tháng.

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

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

  • Cơ chế nạp giấy: Sử dụng cơ cấu ma sát đơn trục nên khi gặp giấy bị ẩm hoặc quá mỏng ($< 65\text{ gsm}$) đôi khi có xác suất cuốn 2 tờ cùng lúc ($\approx 1.2%$).
  • Mức độ đậm nhạt của vết chì: Đối với thí sinh sử dụng bút chì quá nhạt (loại HB, H) hoặc tô dưới $20%$ diện tích ô tròn, thuật toán đếm pixel có thể nhận diện nhầm là ô trống.
  • Xử lý số báo danh và mã đề: Hiện tại việc nhận dạng số báo danh vẫn dựa trên ô tô trắc nghiệm; chưa tích hợp OCR nhận diện chữ số viết tay trực tiếp.

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

  1. Nâng cấp cơ khí: Tích hợp cảm biến tiệm cận quang học (Photo Interrupter) hoặc cảm biến siêu âm để phát hiện kẹt giấy và kiểm soát phân tách từng tờ giấy chính xác $100%$.
  2. Ứng dụng Deep Learning (CNN): Xây dựng mạng nơ-ron tích chập (Convolutional Neural Network) dạng MobileNetV3 hoặc YOLOv8-Nano chạy trực tiếp trên máy tính để phân loại ô tô và đọc số viết tay tự luận thay thế phương pháp đếm pixel thuần túy.
  3. Mở rộng kết nối: Bổ sung giao diện Web App và cơ sở dữ liệu MySQL/PostgreSQL cục bộ để lưu trữ hình ảnh bài thi, tự động gửi email bảng điểm đến từng học sinh.

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

  • Giảng viên và Giáo viên: Cắt giảm $95%$ thời gian chấm thi, loại bỏ hoàn toàn áp lực chấm bài thủ công, nâng cao tính chính xác và minh bạch trong đánh giá học sinh.
  • Sinh viên và Kỹ sư Cơ điện tử: Cung cấp mô hình tham khảo toàn diện về việc kết hợp cơ điện tử chính xác, lập trình nhúng C++ trên Arduino và xử lý ảnh công nghiệp với OpenCV/Python.
  • Cơ sở giáo dục và Nhà trường: Tối ưu hóa ngân sách đầu tư trang thiết bị khảo thí, sở hữu hệ thống chấm thi độc lập, an toàn và bảo mật cao mà không phải chịu chi phí bản quyền định kỳ.

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

1. Hệ thống có yêu cầu mẫu giấy thi chuyên dụng đắt tiền không?

Không. Hệ thống được thiết kế để nhận dạng phiếu trả lời in trên giấy văn phòng A4 thông thường (định lượng $70 - 80\text{ gsm}$) từ bất kỳ máy in laser tiêu chuẩn nào, không cần mực in phản quang hay giấy OMR chuyên dụng.

2. Tốc độ nạp và xử lý bài thi có thể tăng nhanh hơn không?

Hoàn toàn có thể. Hiện tại hệ thống đang đặt thời gian trễ $5\text{ ms}$ cho mỗi xung động cơ bước để đảm bảo êm ái. Bằng cách nâng cấp Driver lên loại A4988/TMC2208 hỗ trợ vi bước (micro-stepping) và tối ưu hóa đa luồng (Multi-threading) trong Python, tốc độ có thể rút ngắn xuống còn $1.8 - 2.0\text{ giây/bài}$.

3. Nếu học sinh tẩy xóa không sạch đáp án cũ thì máy xử lý như thế nào?

Thuật toán so sánh mật độ điểm ảnh tương đối giữa các ô trong cùng một hàng câu hỏi. Ô được chọn chính thức phải có mật độ pixel vượt trội ($> 60%$ diện tích ô) và gấp tối thiểu 2.5 lần so với ô bị tẩy xóa mờ, do đó hệ thống vẫn nhận diện chính xác đáp án đúng.

4. Hệ thống có thể hoạt động độc lập không cần máy tính không?

Trong phiên bản hiện tại, vi điều khiển Arduino đóng vai trò cơ cấu chấp hành nhận lệnh từ PC qua cổng Serial. Để hoạt động hoàn toàn độc lập, có thể thay thế cụm PC bằng board máy tính nhúng Raspberry Pi 4 (4GB RAM) tích hợp màn hình cảm ứng LCD 7 inch gắn trực tiếp trên thân máy.

5. Chi phí bảo trì và độ bền của hệ thống cơ khí như thế nào?

Do sử dụng khung nhôm định hình 2020 anod chống oxy hóa và trục dẫn hướng thép mạ Crom, hệ thống có độ bền cơ học cao trên 5 năm. Chi phí bảo dưỡng định kỳ chủ yếu là thay thế puly cao su kéo giấy (chi phí $< 20.000\text{ VNĐ}$) và bôi trơn trục vít me sau mỗi 50.000 lượt quét.


Kết luận

Đề tài "Nghiên cứu, thiết kế hệ thống chấm bài thi trắc nghiệm tự động ứng dụng công nghệ xử lý ảnh" đã giải quyết thành công bài toán tự động hóa quy trình chấm thi trắc nghiệm thông qua sự giao thoa hoàn hảo giữa Kỹ thuật Cơ điện tử và Công nghệ Thị giác máy tính (Computer Vision). Với tốc độ xử lý $3.25\text{ giây/bài}$, độ chính xác đạt $99.2%$ và tổng chi phí chế tạo dưới 3 triệu đồng, hệ thống chứng minh tính khả thi vượt trội, mở ra tiềm năng ứng dụng rộng rãi tại các cơ sở giáo dục trên toàn quốc, đóng góp thiết thực vào công cuộc chuyển đổi số ngành giáo dục hiện nay.