Bối cảnh và vấn đề nghiên cứu

Điểm danh là hoạt động thường nhật mang tính bắt buộc tại các cơ sở giáo dục, cơ quan và doanh nghiệp nhằm quản lý chuyên cần của học sinh, sinh viên và chấm công cho người lao động. Trong thực tế, các phương thức điểm danh truyền thống đang bộc lộ nhiều điểm hạn chế:

  • Phương pháp điểm danh thủ công (gọi tên): Gây mất nhiều thời gian trong tiết học và dễ xảy ra sai sót hoặc nhầm lẫn.
  • Phương pháp sinh trắc học vân tay: Tiềm ẩn nguy cơ lây nhiễm các bệnh truyền nhiễm qua bề mặt tiếp xúc chung của cảm biến.
  • Phương pháp quẹt thẻ từ (thẻ RFID/thẻ sinh viên): Dễ phát sinh tình trạng gian lận thông qua hành vi quẹt thẻ hộ giữa các sinh viên.

Nhằm khắc phục các tồn tại trên, tác giả Nguyễn Ngọc Hậu (ngành Công nghệ phần mềm, Khoa Công nghệ thông tin, Robot và Trí tuệ nhân tạo – Trường Đại học Bình Dương) dưới sự hướng dẫn của ThS. Huỳnh Quang Đức đã thực hiện đề tài "Xây dựng hệ thống điểm danh sinh viên bằng nhận diện khuôn mặt". Đề tài được triển khai từ ngày 15/09/2022 đến ngày 15/12/2022.

Mục tiêu nghiên cứu cụ thể của đề tài bao gồm:

  1. Xây dựng ứng dụng camera tích hợp thuật toán nhận diện khuôn mặt nhằm xác thực và kiểm soát quá trình ra/vào lớp học của sinh viên theo thời gian thực.
  2. Thiết lập quy trình thu thập và xử lý bộ dữ liệu hình ảnh khuôn mặt sinh viên qua camera để phục vụ quá trình đối chiếu.
  3. Tự động nhận diện danh tính khi sinh viên di chuyển qua vùng quét của camera, đối chiếu với cơ sở dữ liệu khuôn mặt đã được huấn luyện trước đó.
  4. Tự động lưu trữ lịch sử điểm danh vào cơ sở dữ liệu và phát âm thanh thông báo/chào mừng bằng giọng nói khi xác thực thành công.
  5. Hỗ trợ khả năng nhận diện đồng thời nhiều khuôn mặt trong cùng một khung hình.
  6. Xây dựng giao diện web quản trị để theo dõi, quản lý hồ sơ sinh viên và thống kê dữ liệu điểm danh.

Đối tượng nghiên cứu: Khuôn mặt người, các đặc trưng hình thái học trên khuôn mặt và các giải thuật xử lý ảnh, thị giác máy tính phục vụ bài toán nhận diện sinh trắc học.

Phạm vi nghiên cứu: Mô hình nhận diện khuôn mặt thời gian thực ứng dụng trong phạm vi lớp học và cổng kiểm soát sinh viên tại cơ sở đào tạo.


Cơ sở lý thuyết và phương pháp

Khung lý thuyết và tổng quan các hướng tiếp cận

Đồ án tổng hợp và phân loại các kỹ thuật phát hiện khuôn mặt (Face Detection) và nhận diện khuôn mặt (Face Recognition) trong thị giác máy tính thành 4 nhóm phương pháp chính:

Hướng tiếp cận Nguyên lý hoạt động Các nghiên cứu và kỹ thuật tiêu biểu được tổng thuật Ưu điểm và hạn chế
Dựa trên tri thức (Knowledge-based) Sử dụng quy tắc (top-down) mô tả mối quan hệ không gian giữa các thành phần khuôn mặt (mắt, mũi, miệng, trục đối xứng). - Yang & Huang: Quy tắc 3 mức phân giải từ thô đến mịn.
- Kotropoulos & Pitas / Kanade: Chiếu ảnh ngang ($H_I$) và dọc ($V_I$) tìm cực tiểu địa phương.
- Sirohey: Phát hiện biên Canny và heuristics kết hợp khung ellipse (độ chính xác 80%).
- Chetverikov & Lerch: Dựa trên cấu trúc blob và streak với biến đổi Laplace.
- Leung: Mô hình xác suất và bộ lọc đạo hàm Gauss (độ chính xác 86%).
- Augusteijn & Skufca (SGLD, mạng Kohonen SOM) và Manian & Ross (Wavelet, độ chính xác 87%, sai số 18%).
Dễ thiết lập các luật cơ bản nhưng khó mở rộng cho các góc mặt nghiêng hoặc khuôn mặt có tư thế phức tạp.
Dựa trên đặc trưng bất biến (Invariant Feature-based) Tiếp cận từ dưới lên (bottom-up), trích xuất các đặc trưng không đổi trước biến động ánh sáng và góc chụp (cạnh, màu da, kết cấu, đường viền tóc). - Trích xuất cạnh và mô hình hóa hình học.
- Phân tích sắc thái màu da người để khoanh vùng ứng viên khuôn mặt.
Thích ứng tốt với sự thay đổi góc nhìn nhưng nhạy cảm với bóng đổ che khuất hoặc nền nhiễu.
Dựa trên so khớp mẫu (Template Matching) So sánh tương quan giữa ảnh đầu vào với các mẫu khuôn mặt chuẩn hoặc mẫu biến dạng đã được tham số hóa. - Sakai: Mẫu con định nghĩa biên mắt, mũi, miệng.
- Craw: Lọc Sobel và tập 40 mẫu hình dáng.
- Yuille: Mẫu biến dạng tối thiểu hóa hàm năng lượng.
- Huang & Su: Lý thuyết dòng chảy và tập mức (Level Set).
Dễ triển khai nhưng kém hiệu quả khi tỷ lệ, tư thế hoặc biểu cảm khuôn mặt thay đổi lớn.
Dựa trên diện mạo / Học máy (Appearance-based) Học các mẫu và phân bố thống kê từ tập dữ liệu huấn luyện lớn ($P(x \mid \text{khuôn mặt})$). - Phân loại Bayes, Maximum Likelihood.
- Giảm số chiều dữ liệu, mạng nơ-ron đa tầng.
- Máy học vectơ hỗ trợ (SVM - Support Vector Machine) sử dụng hàm kernel.
Độ chính xác cao, có khả năng tổng quát hóa tốt trên tập dữ liệu thực tế.

Cơ sở lý thuyết xử lý ảnh số

  • Mô hình biểu diễn ảnh: Ảnh số được xử lý dưới dạng ma trận điểm ảnh $n$ chiều $P(c, c_1, c_2, \dots)$. Ảnh màu 24-bit gồm ba kênh màu Đỏ (R), Xanh lá (G), Xanh biển (B) với 256 mức cường độ ($2^{24} \approx 16{,}7$ triệu màu). Ảnh xám 8-bit biểu diễn 256 mức xám từ 0 đến 255.
  • Lược đồ xám (Histogram): Được xác định theo hàm phân bố rời rạc $p(r_k) = \frac{n_k}{n}$, trong đó $n_k$ là số pixel có mức xám $r_k$, $n$ là tổng số pixel của ảnh.
  • Các thách thức kỹ thuật được phân tích: Tư thế góc chụp (nghiêng $45^\circ$, chụp từ trên xuống/dưới lên), vật cản và phụ kiện (râu, kính, khẩu trang), biểu cảm khuôn mặt, sự che khuất, hướng trục camera, điều kiện chiếu sáng không đồng đều và độ phức tạp của hậu cảnh.

Thiết kế và triển khai

Hệ thống được thiết kế theo cấu trúc ứng dụng hoàn chỉnh kết hợp giữa module thị giác máy tính trên nền tảng Python và giao diện quản trị web.

1. Kiến trúc công nghệ và môi trường thực thi

  • Ngôn ngữ phát triển: Python phiên bản 3.8 (tác giả khuyến nghị sử dụng Python 3.8 nhằm đảm bảo tính tương thích với các thư viện xử lý ảnh và máy học chuyên dụng).
  • Thư viện thị giác máy tính và AI:
    • OpenCV: Xử lý khung hình, tải mô hình phân loại Haar Cascade (haarcascade_frontalface_default.xml), trích xuất đặc trưng và phân lớp khuôn mặt bằng thuật toán LBPH (cv2.LBPHFaceRecognizer_create()), xử lý hiển thị với module highgui.
    • MediaPipe (Google): Sử dụng giải pháp Face Mesh và ước lượng hướng đầu (determine_head_pose) hỗ trợ thu thập dữ liệu đa góc độ.
    • gTTS (Google Text-to-Speech): Chuyển đổi văn bản thành giọng nói để phát âm thanh phản hồi khi nhận diện thành công.
  • Web Framework & Cơ sở dữ liệu:
    • Flask: Xây dựng dịch vụ web micro-framework, xử lý luồng truyền video (video streaming) qua giao thức HTTP đa phần (multipart data yield (b'--frame\r\n...')).
    • MySQL & XAMPP: Quản trị cơ sở dữ liệu quan hệ lưu trữ thông tin sinh viên và nhật ký điểm danh; máy chủ web Apache hỗ trợ quản lý hệ thống.
  • Môi trường phát triển: Hệ điều hành Windows 10, trình soạn thảo mã nguồn Visual Studio Code (VS Code).

2. Quy trình thuật toán và mã nguồn thực thi

Quy trình xử lý của hệ thống trải qua các bước kỹ thuật sau:

  1. Khởi tạo và đọc luồng video: Camera được thiết lập độ phân giải khung hình hoạt động (frameWidth = 800, frameHeight = 480 hoặc wCam = 400, hCam = 400).
  2. Phát hiện khuôn mặt: Sử dụng bộ lọc Haar Cascade (face_cascade.detectMultiScale) để định vị vùng khuôn mặt quan tâm (ROI) và vẽ khung bao chữ nhật cv2.rectangle(roi, (x1, y1), ((x1 + w1), (y1 + h1)), (255, 0, 0)).
  3. Tiền xử lý ảnh: Chuyển đổi ROI sang không gian mức xám (L mode / uint8), cân bằng và chuẩn hóa kích thước.
  4. Huấn luyện mô hình: Trích xuất mảng dữ liệu ảnh và nhãn định danh tương ứng (ids), thực hiện huấn luyện bằng thuật toán LBPH và xuất mô hình đã tối ưu ra tệp cấu hình core/classifier.xml.
  5. Nhận diện và phân loại thời gian thực: Đọc mô hình classifier.xml, đối chiếu đặc trưng của khuôn mặt thu được từ camera với cơ sở dữ liệu. Khi đạt ngưỡng khớp, hệ thống truy xuất thông tin sinh viên, ghi nhận thời gian vào cơ sở dữ liệu và kích hoạt lời chào thoại.
# Đoạn mã huấn luyện mô hình trích xuất từ đồ án
def train():
    dataset_dir = "static/dataset"
    path = [os.path.join(dataset_dir, f) for f in os.listdir(dataset_dir)]
    faces = []
    ids = []
    for image in path:
        img = Image.open(image).convert('L')
        imageNp = np.array(img, 'uint8')
        id = int(os.path.split(image)[-1].split('.')[1])
        faces.append(imageNp)
        ids.append(id)
    ids = np.array(ids)
    clf = cv2.LBPHFaceRecognizer_create()
    clf.train(faces, ids)
    clf.write("core/classifier.xml")
    return {'message': 'done'}

3. Thiết kế giao diện và chức năng hệ thống

Giao diện quản trị trên nền web được phân chia thành các phân hệ:

  • Trang chủ: Bảng điều khiển tổng quan của hệ thống điểm danh.
  • Quản lý sinh viên: Bao gồm module Thêm sinh viên (thu thập bộ ảnh mẫu qua camera trực tiếp) và Danh sách sinh viên (hiển thị danh bạ hồ sơ đã lưu).
  • Lịch sử điểm danh: Nhật ký ghi nhận thời gian ra/vào, mã sinh viên, trạng thái điểm danh.
  • Bật điểm danh: Kích hoạt camera quét trực tiếp, hiển thị luồng nhận diện thời gian thực và phát thông báo.

Nội dung chính theo từng chương

Chương 1. Tổng quan về đề tài

Chương này tập trung xác lập lý do lựa chọn đề tài xuất phát từ các hạn chế của phương pháp điểm danh truyền thống. Tác giả xác định mục tiêu xây dựng ứng dụng nhận diện khuôn mặt tự động kết hợp web quản lý. Nội dung trọng tâm của chương là phân tích sâu 4 hướng tiếp cận phát hiện khuôn mặt: dựa trên tri thức (các mô hình của Yang-Huang, Sirohey, Leung, Augusteijn-Skufca), đặc trưng không thay đổi, khớp mẫu (Sakai, Craw, Yuille) và diện mạo (phương pháp xác suất, SVM, mạng nơ-ron).

Chương 2. Nghiên cứu tổng quan

Chương 2 trình bày cơ sở lý thuyết tổng quan về xử lý ảnh số, biểu diễn điểm ảnh (pixel), chuyển đổi thang độ xám và phân tích lược đồ xám. Tác giả phân tích khái niệm, quy trình 4 giai đoạn của hệ thống nhận diện khuôn mặt, các lợi ích sinh trắc học và 8 nhóm khó khăn trong điều kiện môi trường thực tế (góc chụp, ánh sáng, nền phức tạp, màu da...). Đồng thời, chương này giới thiệu chi tiết hệ sinh thái công cụ: ngôn ngữ Python, thư viện OpenCV, Google MediaPipe, Flask framework, hệ quản trị cơ sở dữ liệu MySQL, bộ công cụ XAMPP, phần mềm Visual Studio Code và môi trường hệ điều hành Windows 10.

Chương 3: Triển khai mô hình và thiết kế ứng dụng

Chương 3 mô tả chi tiết bài toán phát hiện khuôn mặt và quy trình triển khai thuật toán Haar Cascade Frontal Face. Tác giả trình bày các bước thiết kế mô hình: thu nhận khung hình, tiền xử lý, trích xuất đặc trưng, gán nhãn và đối chiếu. Đi sâu vào cấu trúc phần mềm, chương cung cấp các đoạn mã nguồn quan trọng phục vụ việc cấu hình camera, thu thập tập dữ liệu ảnh (static/dataset/), thuật toán huấn luyện mô hình phân loại LBPH tạo tệp classifier.xml, logic nhận diện thời gian thực đa luồng qua Flask và phát âm thanh qua gTTS. Chương này cũng thiết lập sơ đồ cơ sở dữ liệu và bố cục giao diện quản lý.

Chương 4. Kết quả đạt được

Chương 4 ghi nhận các kết quả thực tế sau khi xây dựng hệ thống: quy trình thu thập dữ liệu khuôn mặt đa góc độ hoạt động ổn định; chức năng phát hiện và nhận diện khuôn mặt vận hành chính xác trên luồng video thời gian thực; cơ chế tự động ghi nhận lịch sử vào cơ sở dữ liệu MySQL và hệ thống giao diện web điều khiển hoàn chỉnh.


Kết quả và đóng góp

1. Kết quả đạt được theo văn bản

  • Xây dựng thành công hệ thống tích hợp hoàn chỉnh gồm: bộ thu thập dữ liệu ảnh khuôn mặt, module huấn luyện thuật toán LBPH, module nhận diện thời gian thực và hệ thống web quản trị trên nền tảng Flask.
  • Thu thập thành công tập dữ liệu ảnh khuôn mặt sinh viên với nhiều góc nghiêng thông qua sự hỗ trợ của MediaPipe.
  • Huấn luyện và xuất tệp mô hình phân loại classifier.xml phục vụ nhận diện trực tiếp mà không cần huấn luyện lại mỗi khi khởi động hệ thống.
  • Thực hiện cơ chế điểm danh tự động kết hợp thông báo giọng nói qua gTTS và lưu trữ lịch sử điểm danh vào MySQL.

2. Giải pháp và đề xuất của tác giả

  • Ứng dụng mô hình camera điểm danh tự động đặt tại cửa lớp hoặc cổng ra vào nhằm thay thế hoàn toàn việc đọc tên thủ công hoặc quẹt thẻ.
  • Đề xuất quy trình thu nhận dữ liệu khuôn mặt đa hướng (chính diện, nghiêng các hướng) để nâng cao độ chính xác khi nhận diện trong điều kiện sinh viên di chuyển tự nhiên.
  • Kiến nghị chuẩn hóa môi trường thực thi trên nền tảng Python 3.8 để duy trì tính ổn định của toàn bộ hệ thống thư viện liên kết.

3. Đóng góp của đề tài

  • Tích hợp thành công các thư viện mã nguồn mở phổ biến (OpenCV, MediaPipe, Flask) thành một giải pháp phần mềm quản lý điểm danh hoàn chỉnh, chi phí thấp, không đòi hỏi phần cứng chuyên dụng đắt tiền.
  • Đưa ra giải pháp kỹ thuật giải quyết bài toán chống điểm danh hộ và giảm thiểu nguy cơ lây nhiễm bệnh truyền nhiễm so với phương pháp quét vân tay.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế kỹ thuật:
    • Hệ thống sử dụng thuật toán phát hiện Haar Cascade và nhận diện LBPH trên dữ liệu ảnh 2D thông thường, do đó độ chính xác có thể bị suy giảm trong các điều kiện môi trường có hậu cảnh quá phức tạp, ánh sáng yếu, màu da quá tối hoặc khuôn mặt bị che khuất một phần.
    • Sự phụ thuộc vào phiên bản Python 3.8 do một số thư viện liên kết chưa tương thích với các phiên bản Python mới hơn.
  • Hướng mở rộng được đề xuất theo phạm vi nghiên cứu:
    • Nâng cấp các thuật toán trích xuất đặc trưng và nhận diện khuôn mặt dựa trên mạng nơ-ron tích chập sâu (Deep Learning/CNN) để nâng cao khả năng chống giả mạo (Anti-spoofing) và nhận diện tốt hơn ở các góc quay nghiêng lớn.
    • Tối ưu hóa hiệu năng xử lý nhận diện đồng thời số lượng lớn khuôn mặt cùng lúc trên các thiết bị phần cứng nhúng hoặc camera thông minh.

Giá trị tham khảo

Báo cáo khóa luận là tài liệu tham khảo hữu ích cho:

  • Sinh viên, học viên chuyên ngành Công nghệ thông tin, Công nghệ phần mềm, Trí tuệ nhân tạo và Khoa học máy tính đang nghiên cứu về thị giác máy tính ứng dụng.
  • Lập trình viên đang tìm kiếm tài liệu thực hành xây dựng hệ thống nhận diện khuôn mặt bằng thư viện OpenCV, thuật toán LBPH, Google MediaPipe kết hợp với web framework Flask và hệ quản trị cơ sở dữ liệu MySQL.
  • Phần đáng tham khảo nhất là nội dung tổng thuật 4 hướng tiếp cận nhận diện khuôn mặt trong Chương 1 và các đoạn mã nguồn triển khai thực tế quy trình thu thập dữ liệu - huấn luyện - nhận diện trong Chương 3.

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

1. Hệ thống sử dụng giải thuật nào để phát hiện và nhận diện khuôn mặt?
Hệ thống sử dụng giải thuật Haar Cascade Frontal Face (haarcascade_frontalface_default.xml của OpenCV) để phát hiện vị trí khuôn mặt trong khung hình, sau đó sử dụng thuật toán LBPHFaceRecognizer (Local Binary Patterns Histograms) để trích xuất đặc trưng và phân loại nhận diện danh tính sinh viên.

2. Vì sao tác giả kiến nghị cài đặt phiên bản Python 3.8 để chạy hệ thống?
Theo trình bày của tác giả trong đồ án, Python 3.8 được lựa chọn vì các phiên bản Python cao hơn tại thời điểm thực hiện đề tài chưa hỗ trợ hoặc chưa tương thích đầy đủ với một số thư viện xử lý ảnh và công cụ được yêu cầu trong hệ thống.

3. Thư viện Google MediaPipe đảm nhận vai trò gì trong quy trình của hệ thống?
Google MediaPipe được tích hợp để lấy dữ liệu khuôn mặt và hỗ trợ xác định tư thế/hướng của đầu (determine_head_pose), giúp quá trình thu thập bộ dữ liệu ảnh khuôn mặt của sinh viên diễn ra ở nhiều góc nhìn khác nhau trước khi đưa vào huấn luyện mô hình.

4. Dữ liệu điểm danh và thông tin sinh viên được lưu trữ bằng công nghệ nào?
Dữ liệu sinh viên và nhật ký lịch sử điểm danh được lưu trữ trong hệ quản trị cơ sở dữ liệu quan hệ MySQL, được quản lý và vận hành thông qua môi trường máy chủ XAMPP.

5. Cơ chế phản hồi khi sinh viên điểm danh thành công được thiết lập ra sao?
Khi khuôn mặt được nhận diện khớp với dữ liệu đã huấn luyện, hệ thống tự động ghi nhận thời gian vào cơ sở dữ liệu MySQL, đồng thời sử dụng thư viện gTTS (Google Text-to-Speech) để phát ra âm thanh lời chào mừng tương ứng với sinh viên đó.


Kết luận

Khóa luận tốt nghiệp của sinh viên Nguyễn Ngọc Hậu đã giải quyết bài toán tự động hóa công tác điểm danh sinh viên thông qua việc xây dựng một hệ thống nhận diện khuôn mặt thời gian thực hoàn chỉnh. Đồ án kết hợp hài hòa giữa cơ sở lý thuyết xử lý ảnh số, các thuật toán thị giác máy tính mã nguồn mở (OpenCV, MediaPipe, LBPH) và kiến trúc ứng dụng web quản lý (Flask, MySQL). Kết quả nghiên cứu đáp ứng đầy đủ các mục tiêu đề ra về kiểm soát ra/vào lớp học, tạo tiền đề thực tiễn cho việc số hóa quản lý chuyên cần trong môi trường giáo dục.