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

Trong công tác quản lý đào tạo tại các trường đại học và cơ sở giáo dục, điểm danh sinh viên là hoạt động thiết yếu nhằm theo dõi chuyên cần và đánh giá ý thức học tập. Tuy nhiên, phương pháp điểm danh truyền thống thông qua việc gọi tên từng người hoặc ký danh sách giấy bộc lộ nhiều hạn chế như làm tiêu tốn thời gian giảng dạy, tạo áp lực cho giảng viên và tiềm ẩn nguy cơ gian lận hoặc sai sót dữ liệu. Sự phát triển của các thiết bị thu nhận hình ảnh kỹ thuật số cùng các kỹ thuật thị giác máy tính đã tạo điều kiện ứng dụng công nghệ sinh trắc học khuôn mặt vào quản lý lớp học. Đồ án "Xây dựng cơ chế điểm danh sinh viên dựa trên nhận diện khuôn mặt" được thực hiện tại Khoa Công nghệ Thông tin, Trường Đại học Hải Phòng nhằm giải quyết bài toán tự động hóa quy trình quản lý sự hiện diện của sinh viên.

Theo văn bản đồ án, các mục tiêu nghiên cứu cụ thể được xác định bao gồm:

  1. Tăng cường tự động hóa quy trình điểm danh: Xây dựng hệ thống tự động, dễ sử dụng nhằm giảm thiểu sự phụ thuộc vào phương thức ghi nhận thủ công bằng giấy bút.
  2. Nâng cao độ chính xác và tính khả thi: Phát triển mô hình nhận diện khuôn mặt có mức độ tin cậy cao, hạn chế tối đa nhầm lẫn trong việc định danh sinh viên.
  3. Tích hợp linh hoạt và tiện ích: Cung cấp giao diện người dùng trực quan, có khả năng tích hợp vào hệ sinh thái quản lý đào tạo hiện hữu của nhà trường.
  4. Tăng cường quản lý và giám sát: Cung cấp công cụ hỗ trợ giảng viên và nhà quản lý theo dõi sự hiện diện của sinh viên một cách minh bạch và công bằng.
  5. Nâng cao trải nghiệm học tập của sinh viên: Ứng dụng công nghệ hiện đại vào môi trường sư phạm, tạo sự thuận tiện cho người học khi tham gia các hoạt động đào tạo.

Đối tượng nghiên cứu của đề tài là sinh viên thuộc Khoa Công nghệ Thông tin cùng đội ngũ giảng viên và cán bộ quản lý lớp học tại Trường Đại học Hải Phòng. Phạm vi nghiên cứu bao gồm việc thu thập và tiền xử lý dữ liệu hình ảnh khuôn mặt, xây dựng mô hình trích xuất đặc trưng và nhận diện, phát triển phần mềm điểm danh có giao diện đồ họa kết nối cơ sở dữ liệu, thử nghiệm và đánh giá hệ thống thông qua webcam máy tính trong các điều kiện môi trường thực tế.

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

Khung lý thuyết của đồ án dựa trên các nguyên lý của thị giác máy tính (AI Computer Vision), học sâu (Deep Learning) và các giải thuật xử lý ảnh kỹ thuật số. Về mặt sinh trắc học, khuôn mặt người được mô tả thông qua khoảng 80 điểm nút (nodal points) hình học tiêu biểu như khoảng cách giữa hai mắt, chiều rộng mũi, độ sâu hốc mắt, hình dạng xương gò má và độ dài xương hàm. Văn bản phân tích hai hướng tiếp cận nhận dạng chính:

  • Nhận dạng dựa trên đặc trưng cục bộ (Feature-based face recognition): Trích xuất các thông số hình học của mắt, mũi, miệng và mối quan hệ khoảng cách giữa chúng.
  • Nhận dạng dựa trên xét tổng thể (Appearance-based face recognition): Biểu diễn toàn bộ bức ảnh kích thước $R \times C$ thành một vector trong không gian đa chiều, sau đó giảm chiều dữ liệu để giữ lại các đặc trưng cốt lõi mà không cần tách rời từng bộ phận.

Các thuật toán và mô hình được tác giả phân tích và áp dụng bao gồm:

  • Thuật toán Haar Cascade (Cascade Classifier): Sử dụng các đặc trưng dạng Haar (Haar-like features) để phát hiện vị trí khuôn mặt dựa trên sự chênh lệch độ sáng giữa các vùng pixel liền kề, kết hợp bộ phân loại tầng được huấn luyện từ tập mẫu dương tính (Positive samples) và mẫu âm bản (Negative samples).
  • Thuật toán Local Binary Patterns Histograms (LBPH): Kỹ thuật trích xuất đặc trưng kết cấu cục bộ bằng cách so sánh cường độ sáng của pixel trung tâm với 8 pixel lân cận trong cửa sổ $3 \times 3$, tạo chuỗi nhị phân 8-bit chuyển đổi sang giá trị thập phân, sau đó chia ảnh thành các lưới (Grid X, Grid Y) để trích xuất biểu đồ tần suất 256 mức xám và so khớp khoảng cách Euclid.
  • Thư viện face_recognition: Trích xuất vector đặc trưng khuôn mặt (encoding) và thực hiện so khớp danh tính thông qua khoảng cách Euclid trong không gian vector.

Phương pháp nghiên cứu thực tế được triển khai qua 7 bước:

  1. Tìm hiểu và thu thập dữ liệu ảnh khuôn mặt của sinh viên qua webcam.
  2. Xử lý và tiền xử lý dữ liệu (loại bỏ nhiễu, chuẩn hóa kích thước, chuyển đổi không gian màu).
  3. Huấn luyện mô hình nhận diện khuôn mặt và trích xuất vector đặc trưng.
  4. Xây dựng phần mềm điểm danh tích hợp giao diện và cơ sở dữ liệu.
  5. Đánh giá hiệu suất thông qua các tham số độ chính xác và thời gian phản hồi.
  6. Tối ưu hóa các tham số và tinh chỉnh hệ thống.
  7. So sánh tính khả thi với các phương pháp điểm danh truyền thống.

Nguồn dữ liệu của nghiên cứu gồm tập ảnh chân dung sinh viên được thu thập trực tiếp và dữ liệu chuỗi mã hóa đặc trưng (encodings) lưu trữ tại bảng data_set trong hệ quản trị cơ sở dữ liệu MySQL.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình ứng dụng máy tính (desktop application) tích hợp xử lý thị giác máy tính thời gian thực. Kiến trúc tổng thể kết nối giữa module thu nhận hình ảnh từ webcam, module trích xuất - so khớp vector đặc trưng khuôn mặt, module giao diện người dùng và cơ sở dữ liệu quan hệ.

[Webcam Input] ---> [Chuyển đổi BGR sang RGB] ---> [Xác định vị trí: face_locations]
                                                                  |
[CSDL MySQL] ---> [Tải Known Encodings]                        v
       |                                           [Trích xuất: face_encodings]
       v                                                          |
[So khớp Euclid & Đánh giá Ngưỡng 0.465] <------------------------+
       |
       +---> [Khoảng cách < 0.465] ---> [Ghi nhận Điểm danh & Vẽ khung xanh]
       |
       +---> [Khoảng cách >= 0.465] --> [Gán nhãn "Unknown" màu đỏ]

Công nghệ và công cụ triển khai

  • Ngôn ngữ lập trình: Python.
  • Môi trường phát triển: Visual Studio Code.
  • Xử lý ảnh và thị giác máy tính: OpenCV (opencv-python), thư viện face_recognition, Pillow (PIL - Image, ImageDraw, ImageFont), NumPy.
  • Giao diện người dùng: PyQt5 (QApplication, QStackedWidget, QtWidgets).
  • Cơ sở dữ liệu: MySQL, kết nối qua thư viện mysql.connector.

Hiện thực hóa mã nguồn cốt lõi

  1. Kết nối cơ sở dữ liệu và tải dữ liệu huấn luyện: Dữ liệu sinh viên và vector đặc trưng được truy vấn trực tiếp từ bảng data_set và chuyển đổi thành mảng số thực NumPy:
def load_trained_data_from_db():
    known_face_names = []
    known_face_encodings = []
    mycursor.execute("SELECT ma_sv, encoding FROM data_set")
    records = mycursor.fetchall()
    if records:
        for row in records:
            name, encoding_str = row
            encoding = np.array(list(map(float, encoding_str.split())))
            known_face_names.append(name)
            known_face_encodings.append(encoding)
        return known_face_names, known_face_encodings
    else:
        return False
  1. So khớp khoảng cách và hiển thị kết quả: Hệ thống tính toán khoảng cách Euclid giữa khuôn mặt ghi nhận và danh sách mẫu đã biết. Ngưỡng phân loại được thiết lập ở mức $0.465$:
# Tính phần trăm nhận dạng
percentage_match = (1.0 - best_match_distance) * 100
if best_match_distance < 0.465:
    best_match_name = known_face_names[best_match_index]
    draw.text((left, top - 30), f"{best_match_name} ({percentage_match:.2f}%)", fill=(0, 0, 255), font=font)
else:
    best_match_name = "Unknown"
    draw.text((left, top - 30), f"{best_match_name}", fill=(255, 0, 0), font=font)
  1. Thu nhận luồng video và nhận diện thời gian thực qua webcam:
def detect_from_webcam():
    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        face_locations = face_recognition.face_locations(frame)
        face_encodings = face_recognition.face_encodings(frame, face_locations)
        if len(face_locations) > 0:
            draw_result(frame, face_locations, face_encodings, recognized_counts)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()
  1. Khởi tạo giao diện điều hướng PyQt5: Cửa sổ chính ứng dụng được thiết lập kích thước cố định $444 \times 588$ pixel, quản lý các khung nhìn thông qua QStackedWidget:
app = QApplication(sys.argv)
widget = QtWidgets.QStackedWidget()
widget.setWindowFlags(QtCore.Qt.FramelessWindowHint)
widget.setAttribute(QtCore.Qt.WA_TranslucentBackground)

Login_f = Login_w()
Main_f = Main_w()
Manage_students_f = Manage_students()
Add_students_f = Add_students()
Edit_students_f = Edit_students()
Manage_Info_diemdanh_f = Manage_Info_diemdanh()
Attendance_f = Attendance()
Manage_subject_f = Manage_subject()
Manage_teacher_f = Manage_teacher()
Manage_class_f = Manage_class()
statistics_f = statistics()

widget.addWidget(Login_f)
# Thêm các giao diện vào widget...
widget.setCurrentIndex(0)
widget.setFixedWidth(444)
widget.setFixedHeight(588)
widget.show()
sys.exit(app.exec_())

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

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI

Chương 1 thiết lập nền tảng và tính cấp thiết của nghiên cứu. Tác giả phân tích 4 ưu điểm chính của hệ thống điểm danh khuôn mặt: tiết kiệm thời gian và công sức quản lý, đảm bảo độ chính xác cao hạn chế gian lận, khả năng tích hợp linh hoạt vào hệ thống đào tạo, và giao diện thân thiện với người dùng. Chương này xác định rõ 5 mục tiêu tổng quát, quy trình 7 bước phương pháp thực hiện, định vị đối tượng áp dụng là sinh viên Khoa Công nghệ Thông tin - Đại học Hải Phòng, đồng thời xác lập bố cục 3 chương của đồ án tốt nghiệp.

CHƯƠNG 2: NGHIÊN CỨU TỔNG QUAN

Chương 2 trình bày tổng quan lý thuyết về thị giác máy tính và công nghệ nhận diện khuôn mặt:

  • Lịch sử phát triển thị giác máy tính: Khởi đầu từ các thí nghiệm sinh lý thần kinh năm 1959, mốc chuyển đổi 2D sang 3D năm 1963, công nghệ OCR/ICR năm 1974, mô hình phân cấp thị giác của David Marr và mạng Neocognitron của Kunihiko Fukushima năm 1982, sự xuất hiện của hệ thống nhận diện thời gian thực năm 2001, tập dữ liệu ImageNet năm 2010 và kiến trúc mạng AlexNet năm 2012 giúp giảm mạnh tỷ lệ lỗi phân loại hình ảnh.
  • 4 tác vụ thị giác máy tính điển hình: Phân loại hình ảnh (Image classification), Phát hiện đối tượng (Object detection), Theo dõi đối tượng (Object tracking), và Truy xuất hình ảnh dựa trên nội dung (Content-based image retrieval).
  • Các phương pháp nhận dạng khuôn mặt: Phân tích ưu nhược điểm của phương pháp dựa trên đặc trưng hình học (Feature-based) và phương pháp dựa trên tổng thể bức ảnh (Appearance-based); các mô hình 2D (Elastic Bunch Graph, Active Appearance Model) và 3D (3D Morphable Model).
  • Thư viện OpenCV: Cấu trúc 5 thành phần chính gồm CV (xử lý ảnh cơ bản), MLL (Machine Learning Library), HighGUI (giao diện vào ra và hiển thị), Cxcore (cấu trúc dữ liệu cơ sở), và CvAux (thuật toán phụ trợ phát hiện/theo dõi đối tượng).
  • Phân tích giải thuật: Nguyên lý phân loại tầng Haar Cascade kết hợp tiện ích opencv_createsamples, opencv_haartraining, opencv_traincascade; cơ chế mã hóa cục bộ của thuật toán LBPH qua các tham số Radius ($1$), Neighbors, Grid X, Grid Y, tính toán histogram 256 mức xám và khoảng cách Euclid.
  • Các thách thức trong nhận diện khuôn mặt: 5 yếu tố gây sai số gồm điều kiện chiếu sáng (Illumination), phông nền (Background), tư thế góc nhìn (Pose), sự che khuất bởi phụ kiện (Occlusion), và biến đổi biểu cảm khuôn mặt (Expression).
  • Các công cụ và thư viện hỗ trợ: Visual Studio Code, Python, OpenCV, TensorFlow/Keras, NumPy, Pillow, PyQt5.

CHƯƠNG 3: PHÂN TÍCH VÀ XÂY DỰNG HỆ THỐNG

Chương 3 tập trung vào thiết kế kỹ thuật và hiện thực hóa phần mềm:

  • Quy trình phân tích 8 bước: Thu thập dữ liệu qua webcam $\rightarrow$ Chuyển đổi không gian màu từ BGR sang RGB $\rightarrow$ Xác định vị trí khuôn mặt $\rightarrow$ Mã hóa các điểm nút $\rightarrow$ Trích xuất vector encoding $\rightarrow$ So sánh vector kiểm tra với dataset $\rightarrow$ Nhận diện khuôn mặt hoặc xác định nhãn "Unknown" $\rightarrow$ Lưu vết thông tin và tiến hành điểm danh.
  • Cấu trúc cơ sở dữ liệu: Kết nối MySQL tại máy chủ nội bộ (localhost), tài khoản root, cơ sở dữ liệu dataset, lưu trữ ánh xạ giữa mã sinh viên (ma_sv) và chuỗi vector đặc trưng (encoding).
  • Triển khai thuật toán: Xây dựng hàm load_trained_data_from_db() để truy vấn dữ liệu mẫu, hàm draw_result() để tính khoảng cách nhỏ nhất (best_match_distance), ngưỡng phân loại $0.465$, tính tỉ lệ phần trăm khớp percentage_match = (1.0 - best_match_distance) * 100, vẽ nhãn định danh và đóng khung khuôn mặt.
  • Thiết kế giao diện đồ họa (PyQt5): Xây dựng hệ thống các màn hình chức năng bao gồm: Giao diện đăng nhập (Ui_Login), Giao diện menu chính (Ui_MainWindow), Module điểm danh khuôn mặt (Ui_Diemdanh, Attendance), Module quản lý sinh viên (Ui_Manage_student, Ui_Addsv, Ui_Editsv), Quản lý giáo viên (Ui_Manage_teacher), Quản lý môn học (Ui_Manasubject), Quản lý lớp học (Ui_Manage_class), và Bảng thống kê kết quả điểm danh (Ui_Thongke, statistics).

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

Hạng mục Chi tiết triển khai theo văn bản
Thuật toán cốt lõi Haar Cascade (Face Detection) kết hợp Face Encoding và so khớp khoảng cách Euclid
Ngưỡng nhận dạng Giá trị ngưỡng $0.465$ (khoảng cách $< 0.465$ là hợp lệ, $\ge 0.465$ gán nhãn "Unknown")
Công thức tỉ lệ khớp $\text{percentage_match} = (1.0 - \text{best_match_distance}) \times 100$
Nền tảng giao diện PyQt5, hỗ trợ cửa sổ điều hướng liên kết QStackedWidget (kích thước $444 \times 588$ px)
Hệ quản trị CSDL MySQL (host: localhost, user: root, database: dataset, bảng dữ liệu: data_set)
Các phân hệ chức năng Đăng nhập, Điểm danh qua webcam, Quản lý sinh viên, Quản lý giáo viên, Quản lý môn học, Quản lý lớp học, Bảng thống kê tra cứu

Đóng góp chính của đồ án bao gồm:

  • Xây dựng hoàn chỉnh một ứng dụng điểm danh tự động kết hợp xử lý thị giác máy tính thời gian thực qua webcam máy tính với hệ thống quản lý cơ sở dữ liệu sinh viên.
  • Đề xuất quy trình tiền xử lý chuyển đổi không gian màu BGR sang RGB giúp tối ưu hóa khả năng trích xuất vector đặc trưng khuôn mặt.
  • Thiết lập cơ chế kiểm soát người lạ bằng việc gán nhãn "Unknown" (màu đỏ) khi khoảng cách vượt ngưỡng $0.465$, đảm bảo độ tin cậy khi ghi nhận danh sách điểm danh vào cơ sở dữ liệu.
  • Tích hợp đồng bộ các chức năng nghiệp vụ quản lý đào tạo (quản lý sinh viên, giảng viên, môn học, lớp học và kết xuất thống kê) trên một giao diện đồ họa PyQt5 thống nhất.

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

Văn bản đồ án chỉ rõ một số hạn chế kỹ thuật cần lưu ý và hướng phát triển tiếp theo:

  • Hạn chế: Hệ thống chịu ảnh hưởng lớn từ các yếu tố môi trường ngoại cảnh như điều kiện thiếu sáng hoặc thay đổi ánh sáng đột ngột, góc chụp khuôn mặt bị nghiêng hoặc xoay, hiện tượng che khuất do phụ kiện (kính, mũ, khẩu trang) và biểu cảm khuôn mặt thay đổi mạnh. Cơ sở dữ liệu hiện tại mới triển khai ở môi trường máy chủ cục bộ (localhost).
  • Hướng phát triển: Cải thiện thuật toán nhằm nâng cao độ chính xác và tốc độ xử lý trong điều kiện ánh sáng yếu và góc nhìn biến đổi phức tạp; tối ưu hóa mô hình khi mở rộng tập dữ liệu cho toàn bộ sinh viên trong trường; kết nối đồng bộ hóa với hệ thống quản trị đào tạo trực tuyến của nhà trường.

Giá trị tham khảo

Đồ án là tài liệu tham khảo thực tế cho sinh viên và người nghiên cứu thuộc ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Khoa học Máy tính. Các nội dung có giá trị ứng dụng cao gồm:

  • Toàn bộ pipeline xử lý thị giác máy tính từ tiếp nhận khung hình webcam, chuyển đổi BGR-RGB, định vị khuôn mặt đến trích xuất vector đặc trưng và so khớp ngưỡng khoảng cách Euclid.
  • Hướng dẫn chi tiết cách tích hợp thư viện thị giác máy tính (face_recognition, OpenCV) với cơ sở dữ liệu quan hệ MySQL để lưu trữ và nạp các vector mã hóa (encodings).
  • Mẫu kiến trúc xây dựng giao diện điều hướng đa màn hình quản lý nghiệp vụ bằng Python PyQt5 (QStackedWidget).

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

1. Hệ thống sử dụng công thức và ngưỡng nào để xác định nhận dạng sinh viên thành công?

Hệ thống tính khoảng cách Euclid giữa vector đặc trưng khuôn mặt đầu vào và các vector trong cơ sở dữ liệu thông qua hàm face_recognition.face_distance(), sau đó lấy khoảng cách nhỏ nhất (best_match_distance). Nếu best_match_distance < 0.465, hệ thống xác nhận nhận dạng thành công và tính tỉ lệ phần trăm khớp theo công thức: $$\text{percentage_match} = (1.0 - \text{best_match_distance}) \times 100$$ Kết quả hiển thị tên sinh viên cùng tỉ lệ phần trăm bằng chữ màu xanh dương.

2. Khi đối tượng không có trong cơ sở dữ liệu hoặc không nhận diện được, hệ thống xử lý ra sao?

Nếu giá trị best_match_distance lớn hơn hoặc bằng ngưỡng $0.465$, hệ thống sẽ gán nhãn định danh là "Unknown" và hiển thị cảnh báo bằng chữ màu đỏ trên khung hình, đồng thời không ghi nhận điểm danh vào cơ sở dữ liệu.

3. Cơ sở dữ liệu của hệ thống lưu trữ dữ liệu nhận dạng dưới dạng nào?

Dữ liệu được lưu trữ trong hệ quản trị cơ sở dữ liệu MySQL (database tên dataset, bảng data_set). Bảng này lưu trữ thông tin định danh sinh viên (ma_sv hoặc name) cùng chuỗi mã hóa đặc trưng khuôn mặt (encoding_str). Khi chạy chương trình, hàm load_trained_data_from_db() sẽ phân tách chuỗi này và chuyển đổi thành mảng số thực NumPy.

4. Tại sao cần chuyển đổi không gian màu từ BGR sang RGB trong quá trình xử lý ảnh?

Mặc định thư viện OpenCV đọc hình ảnh theo không gian màu BGR, trong khi các thư viện xử lý và hiển thị ảnh khác (như Matplotlib, Pillow) và các mô hình trích xuất đặc trưng khuôn mặt chuẩn hoạt động trên không gian màu RGB. Chuyển đổi từ BGR sang RGB giúp đảm bảo tính nhất quán của cấu trúc màu pixel, hiển thị chính xác và cải thiện hiệu suất phân tích đặc trưng.

5. Hệ thống giao diện người dùng gồm những module chức năng nào?

Giao diện được xây dựng bằng thư viện PyQt5 bao gồm các module: Màn hình đăng nhập (Ui_Login), Màn hình menu chính (Ui_MainWindow), Module điểm danh bằng khuôn mặt (Ui_Diemdanh, Attendance), Module quản lý sinh viên (Ui_Manage_student, Ui_Addsv, Ui_Editsv), Module quản lý giáo viên (Ui_Manage_teacher), Module quản lý môn học (Ui_Manasubject), Module quản lý lớp học (Ui_Manage_class), và Bảng thống kê kết quả điểm danh (Ui_Thongke, statistics).

Kết luận

Đồ án tốt nghiệp của tác giả Đinh Long Nhật đã xây dựng thành công cơ chế điểm danh sinh viên tự động dựa trên công nghệ nhận diện khuôn mặt kết hợp thư viện OpenCV, face_recognition và hệ quản trị cơ sở dữ liệu MySQL. Nghiên cứu đã hoàn thiện quy trình từ thu thập hình ảnh, trích xuất vector đặc trưng, so khớp khoảng cách Euclid với ngưỡng $0.465$ đến triển khai hệ thống phần mềm quản lý đa chức năng trên nền tảng PyQt5. Kết quả của đề tài chứng minh tính khả thi của việc ứng dụng thị giác máy tính vào công tác quản lý đào tạo, đồng thời xác lập các định hướng kỹ thuật cần tiếp tục tối ưu hóa về độ ổn định ánh sáng và mở rộng quy mô dữ liệu trong tương lai.