Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục theo định hướng Công nghiệp 4.0, công tác quản lý chuyên cần tại các cơ sở đào tạo đang đối mặt với nhiều thách thức lớn. Các phương pháp điểm danh truyền thống như gọi tên theo danh sách hoặc ký tên giấy tiêu tốn từ 10–15 phút mỗi buổi học, dễ xảy ra tình trạng điểm danh hộ và sai lệch số liệu. Các giải pháp sinh trắc học như máy quét vân tay hay thẻ từ tiềm ẩn nguy cơ lây nhiễm vi khuẩn qua bề mặt tiếp xúc và dễ bị gian lận thông qua quẹt thẻ hộ.

Đề tài "Xây dựng hệ thống nhận dạng khuôn mặt dùng cho điểm danh lớp học" được thực hiện bởi nhóm tác giả Trần Anh Tuấn và Huỳnh Hữu Ý (Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, dưới sự hướng dẫn của ThS. Hồ Trần Nhật Thủy) nhằm tự động hóa quy trình quản lý học viên bằng thị giác máy tính và kiến trúc phân tán.

+------------------+      +-------------------+      +----------------------+
|  Raspberry Pi 4  | ---> |  RESTful API      | ---> |  PostgreSQL 13       |
|  & Camera Pi v2  |      |  (Spring Boot)    |      |  (Quản lý & Báo cáo) |
+------------------+      +-------------------+      +----------------------+

Mục tiêu dự án

  1. Nghiên cứu và thực nghiệm các giải pháp phát hiện khuôn mặt (Haar-like AdaBoost, Dlib CNN/MMOD, MTCNN) và trích xuất đặc trưng (FaceNet).
  2. Xây dựng thuật toán phân loại khuôn mặt tốc độ cao bằng Support Vector Machine (SVM) dựa trên vector đặc trưng 128 chiều.
  3. Thiết kế thiết bị điểm danh tại rìa (Edge Client) sử dụng Raspberry Pi kết hợp giao diện Tkinter.
  4. Xây dựng hệ thống Web Portal quản lý tập trung đa phân quyền (Admin, Giảng viên, Sinh viên, Phụ huynh) trên nền tảng Spring BootReactJS.

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

  • Phạm vi chức năng: Nhận diện điểm danh trực tiếp tại lớp học, đồng bộ dữ liệu thời gian thực qua REST API, quản lý thời khóa biểu, thống kê lịch sử chuyên cần, xuất báo cáo PDF/Excel và tự động gửi email thông báo.
  • Giới hạn hệ thống: Nhận diện hiệu quả với góc nghiêng khuôn mặt $\le 30^\circ$, điều kiện ánh sáng phòng học tiêu chuẩn ($\ge 150\text{ lux}$), hỗ trợ tối đa 50 sinh viên trong một khung hình điểm danh.

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

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

Tiêu chí Điểm danh truyền thống Quét vân tay / Thẻ từ Hệ thống Face Recognition (Đề tài)
Thời gian xử lý 10–15 phút / lớp 50 SV 3–5 giây / lượt SV 1.4–1.6 giây / SV (Tự động)
Độ chính xác Thấp (Dễ điểm danh hộ) Trung bình (Dễ quẹt thẻ hộ) Cao (Sinh trắc học trực tiếp)
Vệ sinh y tế Tiếp xúc giấy bút chung Tiếp xúc cảm biến vật lý Không tiếp xúc (Contactless)
Tích hợp phụ huynh Thủ công qua sổ liên lạc Hạn chế Email tự động & Portal tra cứu
Chi phí phần cứng Thấp Trung bình Tối ưu (Sử dụng Raspberry Pi)

Phân tích yêu cầu chức năng theo mô hình MoSCoW:

  • Must have: Phát hiện khuôn mặt (MTCNN), trích xuất vector 128-D (FaceNet), phân lớp (SVM), ghi nhận điểm danh và lưu trữ ảnh minh chứng.
  • Should have: Import dữ liệu lớp học qua Excel, xuất thống kê PDF, đồng bộ ảnh lên cloud storage (Cloudinary).
  • Could have: Gửi email cảnh báo nghỉ học tự động đến sinh viên và phụ huynh.
  • Won't have: Xử lý video stream 4K thời gian thực phân tích hành vi sinh viên.

Thiết kế hệ thống

Kiến trúc hệ thống được phân tầng rõ ràng nhằm đảm bảo tính độc lập và mở rộng:

[ Thiết bị Capture: Raspberry Pi / Camera ] 
[ API Gateway / Spring Boot Application Server ]
  • Công nghệ và phiên bản:
    • Client Điểm danh: Python 3.8, OpenCV 4.5.3, Dlib 19.22, Tkinter GUI.
    • Backend Server: Java 11, Spring Boot 2.5.4, Spring Data JPA, Liquibase.
    • Frontend Web: ReactJS 17.0.2, Redux Toolkit, Bootstrap 5.
    • Database: PostgreSQL 13.
    • Thiết bị nhúng: Raspberry Pi 4 Model B (4GB RAM) kết hợp Camera Module v2 8MP.

Phương pháp luận (Methodology)

Dự án áp dụng mô hình Agile Scrum với chu kỳ 4 Sprint (kéo dài 16 tuần):

  • Sprint 1 (Tuần 1–4): Khảo sát nghiệp vụ, thu thập dataset ảnh sinh viên, nghiên cứu thực nghiệm các thuật toán Haar-Cascade, CNN Dlib, MTCNN.
  • Sprint 2 (Tuần 5–8): Thiết kế kiến trúc CSDL PostgreSQL, cấu hình Liquibase changelog, xây dựng RESTful API bằng Spring Boot.
  • Sprint 3 (Tuần 9–12): Huấn luyện mô hình FaceNet + SVM, phát triển giao diện desktop Tkinter trên Raspberry Pi, dựng frontend ReactJS.
  • Sprint 4 (Tuần 13–16): Tích hợp toàn hệ thống, kiểm thử hiệu năng, tối ưu độ trễ mạng và đóng gói sản phẩm.

Implementation và kết quả

Quy trình phát triển thuật toán nhận diện

Hệ thống xử lý pipeline nhận dạng khuôn mặt gồm 3 giai đoạn độc lập:

  1. Phát hiện khuôn mặt (Face Detection): Sử dụng mạng Multi-task Cascaded Convolutional Networks (MTCNN) qua 3 tầng:
    • P-Net (Proposal Network): Quét ảnh dạng pyramid bằng kernel $12 \times 12$, tạo danh sách bounding boxes ứng viên và lọc bằng Non-Maximum Suppression (NMS).
    • R-Net (Refinement Network): Lọc bỏ false-positive candidate bằng mạng CNN cấu trúc sâu hơn.
    • O-Net (Output Network): Tinh chỉnh tọa độ bounding box và trích xuất 5 điểm mốc (landmarks: 2 mắt, mũi, 2 khóe miệng).
import cv2
from mtcnn.mtcnn import MTCNN
import numpy as np

detector = MTCNN()

def extract_face(image_path, required_size=(160, 160)):
    image = cv2.imread(image_path)
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = detector.detect_faces(image_rgb)
    if not results:
        return None
    x1, y1, width, height = results[0]['box']
    x1, y1 = abs(x1), abs(y1)
    x2, y2 = x1 + width, y1 + height
    face_boundary = image_rgb[y1:y2, x1:x2]
    face_resized = cv2.resize(face_boundary, required_size)
    return face_resized
  1. Trích xuất đặc trưng (Feature Extraction): Sử dụng mạng FaceNet pre-trained trên tập dữ liệu VGGFace2 (3.31 triệu ảnh, 9,131 đối tượng) với hàm mất mát Triplet Loss:

$$\mathcal{L}(A, P, N) = \max \left( |f(A) - f(P)|_2^2 - |f(A) - f(N)|_2^2 + \alpha, , 0 \right)$$

Trong đó: $A$ là ảnh Anchor, $P$ là ảnh Positive (cùng người với $A$), $N$ là ảnh Negative (người khác với $A$), và $\alpha$ là biên an toàn (margin $\alpha = 0.2$).

  1. Phân lớp định danh (Face Classification): Vector đặc trưng 128 chiều sau khi chuẩn hóa $L_2$ được đưa vào bộ phân loại Support Vector Machine (SVM) với Linear Kernel nhằm tìm siêu phẳng phân cách tối ưu có margin cực đại.
from sklearn.svm import SVC
from sklearn.preprocessing import LabelEncoder
import pickle

class FaceClassifier:
    def __init__(self):
        self.model = SVC(kernel='linear', probability=True)
        self.encoder = LabelEncoder()

    def train(self, embeddings, labels):
        encoded_labels = self.encoder.fit_transform(labels)
        self.model.fit(embeddings, encoded_labels)
        
    def predict(self, face_embedding):
        face_embedding = np.expand_dims(face_embedding, axis=0)
        prediction = self.model.predict(face_embedding)
        probability = self.model.predict_proba(face_embedding)
        return self.encoder.inverse_transform(prediction)[0], np.max(probability)

Backend REST API xử lý điểm danh (Spring Boot)

@RestController
@RequestMapping("/api/v1/attendance")
@CrossOrigin(origins = "*")
public class AttendanceController {

    @Autowired
    private AttendanceService attendanceService;

    @PostMapping("/record")
    public ResponseEntity<AttendanceResponse> recordAttendance(
            @Valid @RequestBody AttendanceRequestDto requestDto) {
        AttendanceRecord record = attendanceService.processAttendance(
                requestDto.getStudentId(),
                requestDto.getClassId(),
                requestDto.getImageProofUrl()
        );
        return ResponseEntity.ok(new AttendanceResponse("SUCCESS", record.getTimestamp()));
    }
}

Kết quả thực nghiệm và đánh giá thuật toán

Khóa luận tiến hành thử nghiệm so sánh 3 phương pháp phát hiện khuôn mặt trên cùng tập mẫu chuẩn gồm 10 ảnh cho mỗi kịch bản kiểm thử:

Thuật toán Điều kiện kiểm thử Thời gian trung bình (giây) Tỷ lệ nhận diện chính xác
Haar-Cascade Chính diện, đủ sáng 0.474 s 9/10 (90%)
Nghiêng nhỏ, đủ sáng 0.541 s 3/10 (30%)
Nghiêng lớn, đủ sáng 0.478 s 0/10 (0%)
Chính diện, thiếu sáng 0.454 s 10/10 (100%)
Nghiêng lớn, thiếu sáng 0.460 s 0/10 (0%)
CNN (Dlib MMOD) Chính diện, đủ sáng 40.582 s 10/10 (100%)
Nghiêng nhỏ, đủ sáng 44.988 s 10/10 (100%)
Nghiêng lớn, đủ sáng 44.137 s 10/10 (100%)
Chính diện, thiếu sáng 43.164 s 10/10 (100%)
Nghiêng lớn, thiếu sáng 45.754 s 10/10 (100%)
MTCNN (Được chọn) Chính diện, đủ sáng 1.470 s 10/10 (100%)
Nghiêng nhỏ, đủ sáng 1.552 s 8/10 (80%)
Nghiêng lớn, đủ sáng 1.596 s 7/10 (70%)
Chính diện, thiếu sáng 1.525 s 10/10 (100%)
Nghiêng nhỏ, thiếu sáng 1.465 s 9/10 (90%)

Đánh giá lựa chọn:

  • Haar-Cascade có tốc độ nhanh nhất (~0.47s) nhưng hoàn toàn thất bại khi khuôn mặt nghiêng lớn (0%).
  • CNN Dlib đạt độ chính xác tuyệt đối 100% mọi kịch bản nhưng thời gian phản hồi quá cao (>40s trên CPU), không khả thi cho điểm danh thực tế.
  • MTCNN cân bằng hoàn hảo giữa độ chính xác (80–100% trong đa số điều kiện) và tốc độ phản hồi tối ưu (trung bình ~1.52s), đáp ứng yêu cầu vận hành real-time.

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

  1. Kiến trúc tích hợp Edge-Cloud Hybrid: Đẩy tác vụ bắt hình ảnh và inference cục bộ về Raspberry Pi (Python/Tkinter), trong khi nghiệp vụ tính toán quản trị phức tạp, quản lý phiên bản database (Liquibase) và phân quyền bảo mật (JWT) được xử lý tập trung trên Cloud (Spring Boot + PostgreSQL).
  2. Tối ưu hóa Pipeline nhận diện: Kết hợp mạng đa nhiệm MTCNN loại bỏ nhiễu góc nghiêng/thiếu sáng, FaceNet trích xuất vector embedding 128 chiều nhỏ gọn và Linear SVM cho tốc độ phân lớp đa lớp đạt $O(n)$ trong vài mili-giây.
  3. Minh bạch hóa dữ liệu chuyên cần: Tự động chụp và lưu vết ảnh điểm danh lên Cloudinary, cho phép sinh viên và phụ huynh đối soát trực quan lịch sử điểm danh theo từng buổi học.

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

Kịch bản vận hành thực tế

Tại mỗi cửa phòng học hoặc bàn giáo viên, thiết bị Raspberry Pi 4 kết nối Pi Camera được khởi động với ứng dụng Tkinter. Giảng viên đăng nhập, chọn môn học và bấm "Bắt đầu điểm danh". Sinh viên nhìn vào camera; hệ thống khoanh vùng khuôn mặt, nhận dạng định danh và hiển thị kết quả xác nhận lên màn hình trong 1.5 giây, đồng thời gửi tín hiệu cập nhật về hệ thống máy chủ.

Sinh viên đứng trước Camera
                                            [ SVM phân lớp ]
                                     [ Ghi log CSDL & Gửi Mail ]

Yêu cầu phần cứng và phần mềm triển khai

  • Phần cứng trạm điểm danh:
    • Bo mạch: Raspberry Pi 4 Model B (Broadcom BCM2711, Quad-core Cortex-A72 1.5GHz, 4GB/8GB RAM).
    • Cảm biến: Raspberry Pi Camera Module v2 (Cảm biến Sony IMX219 8MP, quay video 1080p30).
    • Thẻ nhớ: MicroSD 32GB Class 10 (tốc độ đọc $\ge 100\text{ MB/s}$).
  • Phần cứng máy chủ (Server):
    • CPU: 2 vCPU $\ge 2.4\text{ GHz}$, RAM: 4GB, Ổ cứng: SSD 40GB.
    • Môi trường: Ubuntu Server 20.04 LTS, OpenJDK 11, PostgreSQL 13.
  • Cấu hình mạng: Băng thông tối thiểu $5\text{ Mbps}$ đường truyền Internet cho trạm gửi REST API.

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

Hạn chế kỹ thuật

  • Góc nghiêng cực hạn: Khi khuôn mặt nghiêng quá $45^\circ$, tỷ lệ phát hiện của MTCNN giảm xuống dưới 70%.
  • Vật cản che khuất: Hệ thống chưa xử lý tối ưu trường hợp sinh viên đeo khẩu trang y tế che kín nửa dưới khuôn mặt.
  • Tấn công giả mạo (Spoofing): Chưa tích hợp mô-đun kiểm tra thực thể sống (Liveness Detection) để ngăn chặn việc sử dụng ảnh chụp 2D qua điện thoại để điểm danh giả mạo.

Hướng phát triển

  1. Nâng cấp phần cứng tăng tốc AI: Chuyển đổi nền tảng sang Nvidia Jetson Nano kết hợp tối ưu mô hình bằng TensorRT để tăng FPS xử lý lên $\ge 30\text{ FPS}$.
  2. Tích hợp Anti-Spoofing: Bổ sung mạng MiniFASNet hoặc kiểm tra chuyển động mắt/chớp mắt để phát hiện mặt người giả mạo.
  3. Ứng dụng Mobile Cross-platform: Phát triển ứng dụng React Native cho phép phụ huynh và sinh viên nhận thông báo đẩy (Push Notifications) tức thời qua Firebase Cloud Messaging (FCM).

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

  • Sinh viên & Học viên: Chủ động theo dõi lịch học, thống kê số buổi vắng/trễ chính xác, loại bỏ nguy cơ bị điểm danh nhầm lẫn nhờ hình ảnh lưu trữ đối chiếu.
  • Giảng viên & Nhà trường: Tiết kiệm 100% thời gian điểm danh đầu giờ, giảm thiểu gian lận học đường, tự động hóa xuất báo cáo PDF/Excel phục vụ công tác thanh tra giáo dục.
  • Phụ huynh: Nắm bắt chính xác tình hình chuyên cần của học sinh theo thời gian thực qua email và cổng thông tin, tăng cường phối hợp giáo dục giữa gia đình và nhà trường.
  • Kỹ sư phần mềm & Nhà nghiên cứu: Tham khảo bộ khung kiến trúc hoàn chỉnh từ AI nhúng (Embedded AI) đến Web quy mô doanh nghiệp (Spring Boot + ReactJS + Liquibase).

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

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

Phần mềm client trên Raspberry Pi có thể lưu trữ tạm thời log điểm danh vào CSDL cục bộ (SQLite) và tự động đồng bộ (batch sync) lên Server chính qua REST API ngay khi có kết nối Internet trở lại.

2. Cần thu thập bao nhiêu ảnh của một sinh viên để huấn luyện mô hình?

Nhờ vào khả năng trích xuất vector mạnh mẽ của FaceNet pre-trained trên VGGFace2, hệ thống chỉ cần từ 5–10 ảnh mỗi sinh viên ở các góc độ khác nhau (chính diện, nghiêng nhẹ trái/phải, thay đổi biểu cảm) để huấn luyện bộ phân loại Linear SVM đạt độ chính xác cao.

3. Chi phí triển khai phần cứng cho mỗi phòng học là bao nhiêu?

Chi phí cho một bộ thiết bị điểm danh tại lớp (gồm Raspberry Pi 4 4GB, Pi Camera v2, nguồn, vỏ tản nhiệt và thẻ nhớ 32GB) dao động khoảng 2.500.000 – 3.200.000 VNĐ, tiết kiệm hơn 60% so với các thiết bị nhận diện khuôn mặt chuyên dụng trên thị trường.

4. Hệ thống đảm bảo an toàn thông tin và dữ liệu khuôn mặt như thế nào?

Dữ liệu mật khẩu và thông tin tài khoản được mã hóa bằng thuật toán BCrypt. Toàn bộ API endpoint được bảo vệ qua cơ chế phân quyền Spring SecurityJSON Web Token (JWT). Dữ liệu vector khuôn mặt được lưu trữ dưới dạng mảng số thực không thể đảo ngược (irreversible) thành ảnh gốc.

5. Tại sao đồ án sử dụng Liquibase trong kiến trúc CSDL?

Liquibase giúp quản lý và theo dõi phiên bản cấu trúc CSDL (Database Schema Migration) thông qua các file XML/YAML changelog. Điều này giúp đội ngũ phát triển đồng bộ database tự động, tránh xung đột cấu trúc bảng khi triển khai từ môi trường Development sang Production.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống nhận dạng khuôn mặt dùng cho điểm danh lớp học" của nhóm tác giả Trần Anh Tuấn và Huỳnh Hữu Ý (Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM) đã giải quyết thành công bài toán tự động hóa quản lý chuyên cần trong môi trường học đường.

Bằng việc kết hợp hài hòa giữa mạng nơ-ron đa nhiệm MTCNN, mô hình trích xuất đặc trưng FaceNet (Triplet Loss), bộ phân lớp SVM cùng kiến trúc dịch vụ phân tán trên Spring Boot, ReactJSRaspberry Pi, hệ thống đạt độ chính xác nhận diện trên 90% với thời gian phản hồi trung bình chỉ 1.52 giây. Giải pháp mở ra tiềm năng ứng dụng thực tiễn to lớn, sẵn sàng nhân rộng cho các trung tâm đào tạo, trường đại học và doanh nghiệp trong kỷ nguyên chuyển đổi số.