Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục (EdTech) và tự động hóa quản lý học đường, công tác quản lý chuyên cần đóng vai trò then chốt trong việc đánh giá ý thức học tập và duy trì kỷ luật học thuật. Theo các khảo sát quản trị đại học, phương pháp điểm danh truyền thống (gọi tên theo danh sách hoặc ký tên) làm tiêu tốn từ 10% đến 15% tổng thời lượng mỗi buổi học (khoảng 5–10 phút trên mỗi tiết 45–50 phút). Phương thức thủ công này bộc lộ nhiều lỗ hổng nghiêm trọng: tình trạng điểm danh hộ (proxy attendance), nhầm lẫn thông tin khi sĩ số lớp đông (50–100 sinh viên), sinh viên rời lớp sớm sau khi điểm danh đầu giờ, và độ trễ lớn trong việc tổng hợp dữ liệu gửi về phòng Đào tạo và Công tác sinh viên.

Đề tài "Điểm danh người học bằng nhận diện khuôn mặt" của tác giả Nguyễn Đình Quyết (Trường Đại học Quản lý và Công nghệ Hải Phòng - HPU) được phát triển nhằm giải quyết triệt để các hạn chế trên thông qua giải pháp tự động hóa bằng thị giác máy tính (Computer Vision) kết hợp cơ sở dữ liệu quan hệ.

+-----------------------------------------------------------------------------------+
|                            VẤN ĐỀ & MỤC TIÊU DỰ ÁN                                |
+-----------------------------------------------------------------------------------+
|  Hiện trạng thủ công:                                                             |
|  - Mất 10-15% thời lượng tiết học cho việc gọi danh sách.                          |
|  - Gian lận học hộ, ký tên hộ khó kiểm soát.                                      |
|  - Dữ liệu giấy tờ rời rạc, tổng hợp báo cáo chậm trễ.                           |
|                                                                                   |
|  Giải pháp công nghệ:                                                             |
|  - Thuật toán phát hiện: Haar Cascade Classifier (Viola-Jones).                   |
|  - Thuật toán trích xuất & nhận dạng: Local Binary Patterns Histograms (LBPH).   |
|  - Quản trị dữ liệu: Hệ quản trị cơ sở dữ liệu MySQL.                            |
|                                                                                   |
|  Mục tiêu định lượng:                                                             |
|  - Thời gian nhận diện: < 200ms / khuôn mặt.                                      |
|  - Độ chính xác thực tế: Đạt 93.8% trong điều kiện lớp học tiêu chuẩn.            |
|  - Cắt giảm 90% thời gian điểm danh so với quy trình thủ công.                    |
+-----------------------------------------------------------------------------------+

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

  1. Thu thập và xây dựng tập dữ liệu chuẩn hóa: Thiết kế module chụp ảnh tự động qua webcam, thu thập 120 mẫu khuôn mặt/sinh viên ở nhiều góc độ và trạng thái biểu cảm.
  2. Xây dựng module phát hiện và nhận dạng khuôn mặt: Ứng dụng kỹ thuật Haar Cascade Classifier để định vị khuôn mặt thời gian thực và phương pháp Local Binary Patterns Histograms (LBPH) để phân loại danh tính sinh viên.
  3. Phát triển hệ thống quản lý hoàn chỉnh: Thiết kế cơ sở dữ liệu quan hệ và giao diện đồ họa (GUI) phục vụ quản lý thông tin sinh viên, giảng viên, môn học, lịch học và phân loại trạng thái tham dự (Có mặt, Đi muộn, Vắng).
  4. Tự động hóa cảnh báo và báo cáo: Tự động phát hiện đối tượng lạ không thuộc danh sách lớp và xuất báo cáo tỷ lệ chuyên cần phục vụ công tác xét tư cách dự thi (yêu cầu tham gia $\ge 75%$).

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

  • Phạm vi ứng dụng: Hệ thống triển khai tại phòng học có camera giám sát cố định tại cửa ra vào hoặc bục giảng, phục vụ lớp học quy mô 30–80 sinh viên.
  • Giới hạn kỹ thuật: Xử lý nhận dạng tối ưu với khoảng cách 0.5m – 2.0m từ camera, góc nghiêng khuôn mặt không vượt quá $30^\circ$, điều kiện chiếu sáng tối thiểu $\ge 150\text{ lux}$.

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

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

Tiêu chí so sánh Điểm danh thủ công (Giấy/Gọi tên) Điểm danh vân tay / Thẻ từ (RFID) Hệ thống nhận diện khuôn mặt (Haar Cascade + LBPH)
Thời gian vận hành 5 – 10 phút / buổi 2 – 3 giây / người (gây ùn tắc) < 1 giây / người (xử lý luồng video)
Khả năng gian lận Cao (điểm danh hộ, ký hộ) Thấp (nhưng thẻ từ có thể quẹt hộ) Rất thấp (xác thực sinh trắc học trực tiếp)
Chi phí đầu tư phần cứng 0 VNĐ Cao (máy chấm công, đầu đọc thẻ) Thấp (tận dụng Webcam/Camera IP có sẵn)
Mức độ tiếp xúc vật lý Tiếp xúc giấy bút chung Tiếp xúc cảm biến vân tay Không chạm (Contactless) – Đảm bảo vệ sinh
Tính tự động hóa dữ liệu Thủ công, độ trễ báo cáo cao Tự động hóa qua phần mềm trung tâm Tự động hóa, đồng bộ tức thì vào CSDL SQL

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

  • Must have (Bắt buộc phải có):
    • Thu thập dữ liệu 120 ảnh khuôn mặt/sinh viên và tiền xử lý ảnh xám (Grayscale).
    • Huấn luyện mô hình nhận dạng và xuất file cấu hình phân loại (classifier.xml).
    • Nhận dạng sinh viên theo thời gian thực từ luồng video webcam và ghi nhận điểm danh.
    • Phân quyền quản trị hệ thống và kiểm soát danh sách lớp.
  • Should have (Nên có):
    • Cơ chế phát hiện người lạ (gương mặt không khớp với cơ sở dữ liệu) và hiển thị cảnh báo.
    • Tự động tính toán trạng thái chuyên cần: Có mặt, Đi muộn (sau mốc quy định), Vắng.
    • Module thống kê tỷ lệ vắng theo từng buổi học và toàn bộ học phần.
  • Could have (Có thể mở rộng):
    • Xuất báo cáo điểm danh định dạng Excel/PDF gửi trực tiếp đến giảng viên qua Email.
    • Tích hợp camera AI góc rộng nhận diện đa đối tượng đồng thời trong phòng học.
  • Won't have (Chưa thực hiện ở giai đoạn này):
    • Nhận dạng sinh viên đeo khẩu trang kín toàn bộ khuôn mặt hoặc trong bóng tối hoàn toàn (0 lux).

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình 3 lớp (3-Tier Architecture) nhằm đảm bảo tính module hóa và dễ dàng mở rộng:

+-----------------------------------------------------------------------------+
|                          KIẾN TRÚC HỆ THỐNG                                 |
+-----------------------------------------------------------------------------+
| 1. TẦNG GIAO DIỆN & THU NHẬN (Presentation & Acquisition Layer)            |
|    - Desktop GUI (Tkinter / PyCharm)                                        |
|    - Video Capture Stream (Webcam / USB Camera Interface)                   |
+-----------------------------------------------------------------------------+
                                     |
                                     v
+-----------------------------------------------------------------------------+
| 2. TẦNG XỬ LÝ TRÍ TUỆ NHÂN TẠO (AI Processing Core)                         |
|    - Preprocessing: BGR to Grayscale, Histogram Equalization                 |
|    - Face Detection: Viola-Jones (Haar Cascade Classifiers)                 |
|    - Feature Extraction & Recognition: LBPH (Radius=1, Neighbors=8, Grid=8x8)|
|    - Training Engine: Xuất mô hình `classifier.xml`                          |
+-----------------------------------------------------------------------------+
                                     |
                                     v
+-----------------------------------------------------------------------------+
| 3. TẦNG DỮ LIỆU & QUẢN TRỊ (Data Persistence Layer)                        |
|    - Storage: MySQL Database Engine                                         |
|    - File System: Dataset 120 ảnh/sinh viên (`data/user.<id>.<num>.jpg`)    |
+-----------------------------------------------------------------------------+

Technology Stack và phiên bản sử dụng

  • Ngôn ngữ phát triển: Python 3.10.x
  • Thư viện thị giác máy tính: OpenCV (opencv-python v4.8.1, opencv-contrib-python v4.8.1 chứa module face)
  • Xử lý ma trận dữ liệu: NumPy v1.24.3
  • Giao diện người dùng: Tkinter / Pillow (PIL) v10.0.0
  • Hệ quản trị cơ sở dữ liệu: MySQL Server 8.0 với driver kết nối mysql-connector-python v8.1.0
  • Môi trường phát triển tích hợp (IDE): JetBrains PyCharm Community Edition 2023.2

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

-- Bảng thông tin sinh viên
CREATE TABLE sinh_vien (
    ma_sv VARCHAR(20) PRIMARY KEY,
    ho_ten VARCHAR(100) NOT NULL,
    lop VARCHAR(50) NOT NULL,
    khoa VARCHAR(50) NOT NULL,
    gioi_tinh VARCHAR(10),
    so_dien_thoai VARCHAR(15),
    trang_thai_anh TINYINT(1) DEFAULT 0
);

-- Bảng thông tin môn học
CREATE TABLE mon_hoc (
    ma_mon VARCHAR(20) PRIMARY KEY,
    ten_mon VARCHAR(100) NOT NULL,
    so_tin_chi INT NOT NULL,
    so_tiet INT NOT NULL
);

-- Bảng thông tin buổi học
CREATE TABLE buoi_hoc (
    ma_buoi INT AUTO_INCREMENT PRIMARY KEY,
    ma_mon VARCHAR(20),
    ma_gv VARCHAR(20),
    ngay_hoc DATE NOT NULL,
    gio_bat_dau TIME NOT NULL,
    gio_ket_thuc TIME NOT NULL,
    FOREIGN KEY (ma_mon) REFERENCES mon_hoc(ma_mon)
);

-- Bảng ghi nhận kết quả điểm danh
CREATE TABLE diem_danh (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ma_buoi INT,
    ma_sv VARCHAR(20),
    thoi_gian_checkin DATETIME NOT NULL,
    trang_thai ENUM('Co_mat', 'Di_muon', 'Vang_1_tiet', 'Vang') NOT NULL,
    FOREIGN KEY (ma_buoi) REFERENCES buoi_hoc(ma_buoi),
    FOREIGN KEY (ma_sv) REFERENCES sinh_vien(ma_sv)
);

Phương pháp nghiên cứu và phát triển (Methodology)

Dự án áp dụng quy trình phát triển lặp (Iterative Waterfall) từ ngày 13/01/2024 đến 20/05/2024 với các mốc tiến độ:

+--------------------------------------------------------------------------+
|                       KẾ HOẠCH TRIỂN KHAI DỰ ÁN                          |
+--------------------------------------------------------------------------+
| Giai đoạn 1 (13/01 - 15/02/2024): Khảo sát hiện trạng & phân tích yêu cầu|
| Giai đoạn 2 (16/02 - 15/03/2024): Xây dựng thuật toán Haar & LBPH        |
| Giai đoạn 3 (16/03 - 15/04/2024): Thiết kế CSDL & Lập trình GUI Desktop  |
| Giai đoạn 4 (16/04 - 05/05/2024): Tích hợp & Kiểm thử thực nghiệm        |
| Giai đoạn 5 (06/05 - 20/05/2024): Đánh giá, hiệu chỉnh & bảo vệ đồ án    |
+--------------------------------------------------------------------------+

Ma trận rủi ro và giải pháp khắc phục (Risk Assessment)

  • Rủi ro ánh sáng không đều (Gây bóng đổ trên mặt): Sử dụng phương pháp cân bằng lược đồ xám (Histogram Equalization) trước khi trích xuất vector đặc trưng.
  • Rủi ro dữ liệu ảnh nhiễu do sinh viên di chuyển nhanh: Thiết lập bộ lọc kích thước khung hình phát hiện mặt (tối thiểu $100 \times 100\text{ pixels}$) và chỉ thu thập khung hình đạt độ nét ngưỡng Laplacian Variance.
  • Rủi ro sai lệch định danh sinh viên lạ: Thiết lập ngưỡng khoảng cách tin cậy (Confidence Distance Threshold) của bộ phân loại LBPH ở mức $75.0$. Mọi dự đoán có chỉ số tin cậy vượt ngưỡng này đều bị phân loại là Unknown.

Implementation và kết quả

Chi tiết các thuật toán cốt lõi

1. Thuật toán phát hiện khuôn mặt Haar Cascade (Viola-Jones Framework)

Thuật toán sử dụng các đặc trưng dạng khối chữ nhật (Haar-like features: Edge, Line, Center-surround) để xác định sự tương phản giữa các vùng trên khuôn mặt (ví dụ: sống mũi sáng hơn hai bên gò má, vùng mắt tối hơn vùng trán).

Để tính toán nhanh tổng mức xám của một vùng chữ nhật, thuật toán sử dụng cấu trúc ma trận ảnh tích phân Integral Image ($ii$):

$$ii(x, y) = \sum_{x' \le x, y' \le y} i(x', y')$$

Tổng giá trị mức xám của hình chữ nhật $D$ với 4 đỉnh $P_1, P_2, P_3, P_4$ được tính bằng đúng 4 phép truy xuất ma trận:

$$\text{Sum}(D) = ii(P_4) + ii(P_1) - ii(P_2) - ii(P_3)$$

Thuật toán kết hợp giải thuật AdaBoost để tinh lọc hàng ngàn đặc trưng yếu ($h_k(x)$) thành một chuỗi bộ phân loại mạnh ($H(x)$) theo cấu trúc tầng (Cascade), loại bỏ ngay các vùng ảnh không chứa khuôn mặt từ các tầng đầu:

$$H(x) = \text{sign}\left(\sum_{t=1}^{T} \alpha_t h_t(x)\right)$$

2. Thuật toán trích xuất đặc trưng và nhận dạng LBPH (Local Binary Patterns Histograms)

Phương pháp LBPH chia ảnh khuôn mặt đã cắt thành các ô lưới con (ví dụ: $8 \times 8 = 64$ cells). Tại mỗi điểm ảnh trung tâm $(x_c, y_c)$ có giá trị mức xám $i_c$, tiến hành so sánh với $P$ điểm lân cận $i_p$ trên đường tròn bán kính $R$:

$$LBP_{P, R}(x_c, y_c) = \sum_{p=0}^{P-1} s(i_p - i_c) 2^p \quad \text{với} \quad s(x) = \begin{cases} 1 & \text{nếu } x \ge 0 \ 0 & \text{nếu } x < 0 \end{cases}$$

Sau khi tính giá trị LBP cho từng điểm ảnh trong từng ô con, hệ thống tính lược đồ tần suất (Histogram) của từng ô và nối các lược đồ lại thành một vector đặc trưng duy nhất mô tả cấu trúc cục bộ của khuôn mặt.

+--------------------------------------------------------------------------+
|                  MINH HỌA TÍNH TOÁN MA TRẬN NHỊ PHÂN LBP (3x3)          |
+--------------------------------------------------------------------------+
|  Ma trận mức xám cục bộ:            So sánh với tâm (125):               |
|  [ 130  145  110 ]                  [  1    1    0  ]                    |
|  [ 120 (125) 150 ]       ===>       [  0   (x)   1  ]                    |
|  [  90  128  160 ]                  [  0    1    1  ]                    |
|                                                                          |
|  Chuỗi nhị phân (chiều kim đồng hồ): 11011100_2 = 220 (Thập phân)       |
+--------------------------------------------------------------------------+
# Trích đoạn mã nguồn: Module huấn luyện mô hình nhận diện khuôn mặt
import cv2
import os
import numpy as np
from PIL import Image

def train_classifier(data_dir="data"):
    # Đọc tất cả các file ảnh mẫu đã thu thập
    path_list = [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith(".jpg")]
    faces = []
    ids = []

    for image_path in path_list:
        # Chuyển đổi ảnh sang Grayscale (ảnh mức xám)
        pil_image = Image.open(image_path).convert('L')
        image_np = np.array(pil_image, 'uint8')
        
        # Trích xuất mã ID sinh viên từ định dạng file: user.<id>.<count>.jpg
        user_id = int(os.path.split(image_path)[-1].split('.')[1])
        
        faces.append(image_np)
        ids.append(user_id)
        
    ids = np.array(ids)

    # Khởi tạo mô hình LBPH Face Recognizer
    clf = cv2.face.LBPHFaceRecognizer_create(radius=1, neighbors=8, grid_x=8, grid_y=8)
    print("[INFO] Đang tiến hành huấn luyện mô hình LBPH với {} mẫu ảnh...".format(len(faces)))
    clf.train(faces, ids)
    
    # Lưu mô hình đã huấn luyện thành tệp XML
    clf.write("classifier.xml")
    print("[SUCCESS] Huấn luyện hoàn tất. File mô hình lưu tại: classifier.xml")

if __name__ == "__main__":
    train_classifier()
# Trích đoạn mã nguồn: Nhận dạng thời gian thực và ghi nhận điểm danh
import cv2
import mysql.connector
from datetime import datetime

def recognize_and_attendance(ma_buoi_hoc):
    # Khởi tạo bộ nhận diện và nạp mô hình đã huấn luyện
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    recognizer = cv2.face.LBPHFaceRecognizer_create()
    recognizer.read("classifier.xml")
    
    # Mở luồng video camera
    cap = cv2.VideoCapture(0)
    attended_students = set()

    while True:
        ret, frame = cap.read()
        if not ret:
            break
            
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(100, 100))
        
        for (x, y, w, h) in faces:
            roi_gray = gray[y:y+h, x:x+w]
            # Dự đoán ID và khoảng cách tin cậy (confidence)
            student_id, confidence = recognizer.predict(roi_gray)
            
            # Với LBPH: confidence càng nhỏ thì độ chính xác càng cao (0 là khớp hoàn hảo)
            if confidence < 75: # Ngưỡng tin cậy chấp nhận
                name = f"SV_{student_id}"
                confidence_score = int(100 * (1 - (confidence / 300)))
                color = (0, 255, 0)
                
                if student_id not in attended_students:
                    # Ghi nhận vào tập và lưu vào cơ sở dữ liệu
                    attended_students.add(student_id)
                    save_attendance_record(ma_buoi_hoc, student_id)
            else:
                name = "Unknown"
                confidence_score = 0
                color = (0, 0, 255)

            cv2.rectangle(frame, (x, y), (x+w, y+h), color, 2)
            cv2.putText(frame, f"{name} [{confidence_score}%]", (x, y-10), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2)
                        
        cv2.imshow("He Thong Diem Danh Khuon Mat - HPU", frame)
        if cv2.waitKey(1) == 27: # Thoát khi nhấn ESC
            break
            
    cap.release()
    cv2.destroyAllWindows()

def save_attendance_record(ma_buoi, ma_sv):
    db = mysql.connector.connect(host="localhost", user="root", password="", database="face_recognizer")
    cursor = db.cursor()
    now = datetime.now()
    # Mặc định trước 7h15 là Có mặt, sau 7h15 là Đi muộn
    status = 'Co_mat' if now.minute <= 15 else 'Di_muon'
    
    query = "INSERT INTO diem_danh (ma_buoi, ma_sv, thoi_gian_checkin, trang_thai) VALUES (%s, %s, %s, %s)"
    cursor.execute(query, (ma_buoi, str(ma_sv), now, status))
    db.commit()
    db.close()

Kết quả thử nghiệm và đánh giá thực nghiệm

Hệ thống được thử nghiệm thực tế với tập dữ liệu gồm 20 sinh viên thuộc lớp CT2301C (mỗi sinh viên 120 ảnh huấn luyện, tổng cộng 2,400 ảnh). Quá trình kiểm thử đánh giá trên 500 lượt nhận dạng tại phòng máy thực hành với các điều kiện môi trường khác nhau.

+--------------------------------------------------------------------------+
|                     ĐỘ CHÍNH XÁC THEO ĐIỀU KIỆN MÔI TRƯỜNG               |
+--------------------------------------------------------------------------+
| 1. Ánh sáng tiêu chuẩn (250-400 lux):   [===================] 96.5%      |
| 2. Ánh sáng yếu (< 100 lux):             [==============     ] 81.0%      |
| 3. Góc nghiêng khuôn mặt 15 - 30 độ:     [=================  ] 88.5%      |
| 4. Sinh viên đeo kính mắt:               [================== ] 92.0%      |
| 5. Khoảng cách 0.5m - 1.5m:              [===================] 97.2%      |
| 6. Khoảng cách xa (> 2.5m):              [=============      ] 74.0%      |
+--------------------------------------------------------------------------+

Bảng tổng hợp các chỉ số hiệu năng (Performance Metrics)

Chỉ số đo lường Mục tiêu thiết kế ban đầu Kết quả thực nghiệm đạt được Trạng thái
Tốc độ phát hiện khuôn mặt $\le 100\text{ ms}$ $45 - 65\text{ ms}$ / frame Đạt
Tốc độ trích xuất & nhận dạng $\le 100\text{ ms}$ $30 - 50\text{ ms}$ / khuôn mặt Đạt
FPS xử lý luồng video (HD 720p) $\ge 20\text{ FPS}$ $28 - 30\text{ FPS}$ (trên CPU Core i5) Đạt
Độ chính xác nhận diện trung bình $\ge 90%$ $93.8%$ (tổng thể) Vượt mục tiêu
Tỷ lệ nhận diện nhầm (FAR) $\le 5.0%$ $3.2%$ Đạt
Tỷ lệ từ chối đúng (FRR) $\le 5.0%$ $4.1%$ Đạt

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

  1. Quy trình thu thập dữ liệu tự động hóa cao: Thay vì chụp thủ công từng ảnh, module thu thập sử dụng vòng lặp kiểm soát tự động phát hiện và cắt đúng vùng khuôn mặt với độ phân giải chuẩn hóa $200 \times 200\text{ pixels}$, tự động đánh số thứ tự từ 1 đến 120 chỉ trong vòng 8–12 giây qua webcam.
  2. Tối ưu hóa tài nguyên phần cứng (Lightweight Architecture): Khác với các mô hình học sâu (Deep Learning) như ResNet, VGG-Face hay FaceNet đòi hỏi card đồ họa rời (GPU đắt đỏ) và bộ nhớ lớn, sự kết hợp giữa Haar CascadeLBPH có thể chạy mượt mà trên các máy tính văn phòng cấu hình trung bình (Core i3/i5, RAM 4GB) mà vẫn duy trì tốc độ xử lý $30\text{ FPS}$.
  3. Mô hình hóa dữ liệu chuyên cần thông minh: Tích hợp chặt chẽ giữa thời gian thực của máy chủ và quy chế đào tạo tín chỉ (phân định rõ Có mặt, Đi muộn, Vắng không phép, Cảnh báo tư cách thi), loại bỏ hoàn toàn các sai sót chủ quan của con người.

So sánh với các giải pháp hiện hành

Đặc trưng kỹ thuật HOG + Linear SVM Deep Learning (R-CNN / MTCNN + FaceNet) Giải pháp đề tài (Haar Cascade + LBPH)
Độ phức tạp tính toán Trung bình ($\mathcal{O}(N \log N)$) Rất cao ($\mathcal{O}(N \times K \times L)$) Thấp ($\mathcal{O}(N)$ với Integral Image)
Yêu cầu phần cứng CPU xung nhịp cao Yêu cầu bắt buộc GPU (NVIDIA CUDA) Chỉ cần CPU tiêu chuẩn
Thời gian huấn luyện (20 SV) ~2 - 3 phút ~30 - 60 phút < 15 giây
Dung lượng file Model ~10 - 20 MB ~100 - 500 MB ~3.5 MB (classifier.xml)
Khả năng triển khai nhúng Khá Khó khăn trên thiết bị giá rẻ Rất thuận tiện (PC, Raspberry Pi)

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

Kịch bản vận hành thực tế tại phòng học

  1. Trước buổi học: Giảng viên đăng nhập phần mềm trên máy tính giảng đường, chọn môn học và buổi học theo thời khóa biểu đồng bộ từ MySQL.
  2. Đầu giờ học: Camera gắn tại cửa hoặc hướng về phía bàn sinh viên quét liên tục. Khi sinh viên bước vào góc quay, hệ thống tự động:
    • Vẽ khung xanh và hiện tên sinh viên kèm mức độ tin cậy.
    • Cập nhật thời gian check-in vào bảng diem_danh trên CSDL.
    • Phát âm thanh thông báo xác nhận thành công.
  3. Trong và cuối buổi học: Giảng viên có thể xem trực tiếp danh sách sinh viên hiện diện, sinh viên đi muộn, hoặc lọc danh sách vắng mặt để báo cáo trực tiếp về ban quản lý sinh viên.
+--------------------------------------------------------------------------+
|                       KỊCH BẢN CHECK-IN TẠI GIẢNG ĐƯỜNG                  |
+--------------------------------------------------------------------------+
| [Sinh viên bước vào lớp] ---> [Camera quét khuôn mặt (30 FPS)]           |
|                                       |                                  |
|                                       v                                  |
|                 [Haar Cascade: Phát hiện vị trí khuôn mặt]               |
|                                       |                                  |
|                                       v                                  |
|                 [LBPH: Trích xuất vector & So khớp Model]                |
|                                       |                                  |
|                 +---------------------+--------------------+             |
|                 | (Confidence < 75)                        | (>= 75)     |
|                 v                                          v             |
|         [Xác thực SV thành công]                  [Gán nhãn 'Unknown']   |
|                 |                                          |             |
|                 v                                          v             |
|   [Ghi CSDL: Co_mat / Di_muon]                   [Phát cảnh báo người lạ]|
|                 |                                                        |
|                 v                                                        |
|   [Cập nhật hiển thị GUI Desktop]                                        |
+--------------------------------------------------------------------------+

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit & ROI)

  • Chi phí phần cứng: Sử dụng máy tính sẵn có tại phòng học + Webcam Full HD tiêu chuẩn (chi phí khoảng $500,000 - 1,000,000\text{ VNĐ}$/phòng). So với hệ thống cổng xoay sinh trắc học chuyên dụng ($25,000,000 - 40,000,000\text{ VNĐ}$/phòng), giải pháp tiết kiệm hơn 90% chi phí đầu tư ban đầu.
  • Hiệu quả thời gian: Tiết kiệm trung bình 8 phút/buổi học. Với trường quy mô 200 lớp học/ngày, hệ thống tiết kiệm được khoảng 26.6 giờ giảng dạy/ngày, tương đương hàng ngàn giờ học tập có ích mỗi học kỳ.

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

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

  • Độ nhạy sáng (Lighting Sensitivity): Do LBPH dựa trên cấu trúc mức xám cục bộ, khi ánh sáng môi trường thay đổi đột ngột (quá tối hoặc bị chói lóa ngược sáng), độ chính xác giảm xuống khoảng $81.0%$.
  • Góc quay khuôn mặt: Thuật toán Haar Cascade chỉ nhận diện khuôn mặt chính diện hoặc góc lệch dưới $30^\circ$. Khi sinh viên cúi đầu hoặc nhìn nghiêng quá $45^\circ$, tỷ lệ phát hiện khuôn mặt giảm sút.
  • Che khuất (Occlusion): Chưa hỗ trợ nhận dạng khi sinh viên đeo khẩu trang y tế che kín vùng mũi và miệng.

Định hướng nâng cấp trong tương lai

  • Tích hợp mô hình Deep Learning nhẹ (MobileFaceNet / InsightFace): Tăng độ chính xác lên $> 99%$ và hỗ trợ nhận diện sinh viên đeo khẩu trang.
  • Chuyển đổi sang kiến trúc Web / RESTful API: Tách biệt lõi nhận diện thành Microservices trên Server (sử dụng FastAPI) và triển khai ứng dụng điểm danh trên thiết bị di động cho giảng viên.
  • Liveness Detection (Chống gian lận ảnh chụp): Tích hợp giải thuật phát hiện chớp mắt hoặc phân tích luồng chuyển động 3D để ngăn chặn hành vi sử dụng ảnh chụp điện thoại để điểm danh giả mạo.

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

+-------------------------------------------------------------------------------+
|                             ĐỐI TƯỢNG HƯỞNG LỢI                               |
+-------------------------------------------------------------------------------+
| 1. Sinh viên / Người học:                                                     |
|    - Tiết kiệm thời gian, không cần xuất trình thẻ hay chờ gọi tên.           |
|    - Đảm bảo tính công bằng học thuật, triệt tiêu nạn học hộ.                 |
|                                                                               |
| 2. Giảng viên & Nhà trường:                                                  |
|    - Tận dụng tối đa 100% thời lượng cho chuyên môn giảng dạy.                |
|    - Quản lý dữ liệu chuyên cần tự động, chính xác, xuất báo cáo tức thì.     |
|                                                                               |
| 3. Lập trình viên & Kỹ sư AI:                                                 |
|    - Cung cấp mã nguồn tham khảo mẫu về kết hợp OpenCV + Python + MySQL.      |
|    - Cấu trúc xử lý video stream và kiến trúc huấn luyện mô hình chuẩn hóa.   |
|                                                                               |
| 4. Nhà nghiên cứu EdTech & IoT:                                               |
|    - Dữ liệu thực nghiệm về ứng dụng Computer Vision trên phần cứng chi phí thấp|
|    - Cơ sở để phát triển phòng học thông minh (Smart Classroom).              |
+-------------------------------------------------------------------------------+

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

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?

Hệ thống được thiết kế tối ưu trên môi trường không card đồ họa rời. Cấu hình tối thiểu gồm: CPU Intel Core i3 (thế hệ 4 trở lên), RAM 4GB, ổ cứng trống 2GB, Webcam cổng USB có độ phân giải tối thiểu HD 720p.

2. Khi có thêm sinh viên mới, có cần phải huấn luyện lại toàn bộ hệ thống từ đầu không?

Bộ phân loại LBPH cho phép huấn luyện rất nhanh (chỉ mất dưới 15 giây cho vài chục sinh viên). Khi thêm sinh viên mới, hệ thống kích hoạt module chụp 120 ảnh mới và chạy lại tiến trình train_classifier() để ghi đè file classifier.xml mà không làm gián đoạn cơ sở dữ liệu.

3. Hệ thống có thể hoạt động khi mất kết nối Internet không?

Có. Toàn bộ quá trình xử lý video, nhận dạng khuôn mặt và cơ sở dữ liệu MySQL đều được lưu trữ và thực thi cục bộ (Localhost) trên máy tính giảng đường, do đó hệ thống hoạt động bình thường mà không phụ thuộc vào kết nối Internet.

4. Cơ chế nào ngăn chặn việc sinh viên dùng ảnh in hoặc ảnh trên điện thoại để điểm danh?

Trong phiên bản hiện tại, hệ thống sử dụng camera quét liên tục luồng video trực tiếp với yêu cầu phát hiện chuỗi chuyển động tự nhiên. Ở các bản nâng cấp tiếp theo, module phát hiện mắt chớp (Eye-Blink Detection) và phân tích phổ phản xạ da sẽ được tích hợp để loại trừ 100% ảnh tĩnh.

5. Cơ sở dữ liệu có bị quá tải khi số lượng sinh viên lên đến hàng ngàn người?

Không. Hệ thống chỉ lưu trữ file nhị phân của mô hình (classifier.xml) và đường dẫn ảnh trên đĩa cứng; trên CSDL MySQL chỉ lưu trữ các bản ghi text (mã sinh viên, thời gian, trạng thái), dung lượng mỗi lượt điểm danh chỉ chiếm vài chục byte, hoàn toàn đáp ứng tốt cho hàng triệu lượt điểm danh mỗi kỳ học.


Kết luận

Đồ án "Điểm danh người học bằng nhận diện khuôn mặt" của sinh viên Nguyễn Đình Quyết (ngành Công nghệ Thông tin, Đại học Quản lý và Công nghệ Hải Phòng) đã giải quyết trọn vẹn bài toán tự động hóa quản lý lớp học. Bằng việc kết hợp thực chứng giữa hai thuật toán kinh điển Haar CascadeLocal Binary Patterns Histograms (LBPH) trên nền tảng PythonMySQL, hệ thống đã chứng minh tính khả thi vượt trội:

  • Về mặt kỹ thuật: Đạt độ chính xác $93.8%$, tốc độ xử lý thời gian thực $30\text{ FPS}$, thời gian trích xuất nhận dạng dưới $200\text{ ms}$ trên phần cứng máy tính thông thường không phụ thuộc GPU.
  • Về mặt thực tiễn: Xóa bỏ hoàn toàn thời gian chết trong điểm danh thủ công, ngăn chặn gian lận học hộ, số hóa toàn diện dữ liệu chuyên cần phục vụ công tác quản lý đào tạo hiện đại.

Mô hình là nền tảng vững chắc để tiếp tục mở rộng sang các bài toán kiểm soát an ninh trường học, chấm công thông minh và phát triển hệ sinh thái phòng học thông minh (Smart Campus) trong tương lai.