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

Trong bối cảnh công nghệ thông tin và trí tuệ nhân tạo phát triển, bài toán nhận dạng đối tượng từ hình ảnh kỹ thuật số ngày càng được ứng dụng sâu rộng trong đời sống và quản lý xã hội. Trong số các đối tượng nhận dạng như vật chất, chữ viết, giọng nói hay hình dáng, bài toán nhận dạng khuôn mặt (Face Recognition) giữ vai trò đặc biệt quan trọng do khuôn mặt chứa đựng nhiều thông tin định danh đặc trưng của con người (giới tính, độ tuổi, cảm xúc và danh tính). Tại các cơ quan, văn phòng và trường học, nhu cầu kiểm soát vào ra và điểm danh đòi hỏi tính tự động hóa cao, khắc phục các hạn chế của phương pháp thủ công và tăng tính khách quan. Xuất phát từ yêu cầu thực tiễn đó, tác giả Nguyễn Văn Sơn đã thực hiện đồ án tốt nghiệp với đề tài "Hệ thống phần mềm nhận diện khuôn mặt, điểm danh, chấm công bằng Python" tại Khoa Công nghệ Thông tin, Trường Đại học Công nghệ Đông Á (khóa 8, bảo vệ tháng 7 năm 2022 dưới sự hướng dẫn của ThS. Lê Trung Thực).

Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định cụ thể như sau:

  1. Nghiên cứu tổng quan về bài toán xử lý ảnh, các giai đoạn trong hệ thống nhận diện khuôn mặt và khảo sát các công nghệ phần mềm liên quan.
  2. Phân tích các yêu cầu chức năng và yêu cầu phi chức năng của hệ thống điểm danh tự động trên môi trường máy tính để bàn (Desktop Application).
  3. Thiết kế kiến trúc tổng thể, mô hình hóa các ca sử dụng (Use Case), biểu đồ hoạt động (Activity Diagram), biểu đồ tuần tự (Sequence Diagram) và cấu trúc cơ sở dữ liệu cho hệ thống.
  4. Lập trình và triển khai thử nghiệm ứng dụng desktop hoàn chỉnh tích hợp camera nhận diện, cơ sở dữ liệu quản trị và giao diện tương tác người dùng.

Đối tượng và phạm vi nghiên cứu của đề tài:

  • Đối tượng nghiên cứu: Các phương pháp phát hiện, trích xuất đặc trưng và nhận diện khuôn mặt từ luồng video/webcam; quy trình tự động hóa điểm danh và quản lý dữ liệu nhân sự.
  • Phạm vi không gian và thời gian: Đề tài được triển khai dưới dạng ứng dụng desktop đơn lẻ phục vụ công tác điểm danh nội bộ cho nhân viên/sinh viên tại đơn vị, hoàn thành và báo cáo tại Bắc Ninh vào tháng 7 năm 2022.

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

Về mặt lý thuyết xử lý ảnh và thị giác máy tính, văn bản đồ án xác định kiến trúc tiêu chuẩn của một hệ thống nhận dạng khuôn mặt gồm 4 bước xử lý liên tiếp:

  1. Phát hiện khuôn mặt (Face Detection): Xác định vị trí khuôn mặt người xuất hiện trong khung hình hoặc luồng video.
  2. Phân đoạn/Căn chỉnh khuôn mặt (Face Alignment hay Segmentation): Chuẩn hóa vị trí, góc xoay và biên giới hạn của vùng mặt.
  3. Trích chọn đặc trưng (Feature Extraction): Rút trích các vector đặc trưng đại diện (embedding vectors) phục vụ quá trình so sánh.
  4. Nhận dạng và phân loại (Face Recognition/Matching): Đối chiếu đặc trưng trích xuất được với tập dữ liệu mẫu đã lưu trữ để xác định danh tính.

Tác giả đã khảo sát hai nhóm tiếp cận chính trong bài toán nhận diện:

  • Nhóm phương pháp dựa trên đặc trưng cục bộ của các phần tử trên mặt: biến đổi Gabor Wavelet, mạng Neural, SVM.
  • Nhóm phương pháp dựa trên việc xét tổng thể toàn bộ khuôn mặt: Phân tích thành phần chính (PCA), Phân tích phân biệt tuyến tính (LDA), Phân tích đặc trưng cục bộ (LFA).

Đồng thời, đồ án chỉ rõ các khó khăn mang tính bản chất của bài toán xử lý ảnh mặt người, bao gồm: sự thay đổi tư thế và góc chụp (chụp thẳng, chéo trái/phải 45 độ, chụp từ trên xuống hoặc dưới lên làm che khuất các bộ phận mắt, mũi, miệng); sự xuất hiện hoặc thiếu vắng các chi tiết phụ (râu mép, râu hàm, kính mắt); sự thay đổi biểu cảm khuôn mặt (cười, sợ hãi); sự che khuất bởi vật cản; góc nghiêng trục camera; điều kiện ánh sáng và chất lượng phần cứng camera; cùng với sự thay đổi diện mạo theo thời gian do lão hóa (aging condition).

Phương pháp nghiên cứu thực tế được tác giả áp dụng:

  • Phương pháp phân tích và thiết kế hướng đối tượng: Sử dụng ngôn ngữ mô hình hóa thống nhất (UML) để xây dựng biểu đồ Use Case tổng quan/chi tiết, bảng đặc tả ca sử dụng, biểu đồ hoạt động và biểu đồ tuần tự cho từng tác vụ.
  • Phương pháp thiết kế hệ thống và cơ sở dữ liệu quan hệ: Chuẩn hóa các bảng lưu trữ thông tin tài khoản và hồ sơ nhân sự bằng SQLite.
  • Phương pháp thực nghiệm phần mềm: Lập trình tích hợp thư viện thị giác máy tính OpenCV với framework giao diện PyQt5 trên ngôn ngữ Python.
  • Nguồn dữ liệu: Dữ liệu hình ảnh thô (raw face dataset) thu thập trực tiếp của từng nhân viên qua camera/webcam, sau đó được đưa vào module huấn luyện để tạo dữ liệu nhận dạng.

Thiết kế và triển khai

Hệ thống được xây dựng theo mô hình ứng dụng máy tính để bàn (Desktop Application) chạy trên hệ điều hành với môi trường phát triển chính là Visual Studio Code và Python IDLE.

+-------------------------------------------------------------+
|                      GIAO DIỆN NGƯỜI DÙNG                   |
|                   (PyQt5 / Qt Designer / UI)                |
+------------------------------+------------------------------+
                               |
                               v
+-------------------------------------------------------------+
|                    TẦNG XỬ LÝ TRUNG GIAN                    |
|       - Điều khiển luồng nghiệp vụ (Python 3)               |
|       - Thu nhận & xử lý ảnh từ Webcam (OpenCV)             |
|       - Nhận dạng & đối soát mẫu khuôn mặt                 |
+------------------------------+------------------------------+
                               |
                               v
+-------------------------------------------------------------+
|                     TẦNG CƠ SỞ DỮ LIỆU                      |
|       - FaceData.db (Bảng people: Lưu hồ sơ nhân sự)        |
|       - data.sqlite (Bảng userdata: Lưu tài khoản Admin)    |
|       - Dataset / File lưu trữ ảnh khuôn mặt & lịch sử điểm |
+-------------------------------------------------------------+

1. Ngôn ngữ và công nghệ sử dụng

  • Ngôn ngữ lập trình: Python 3 (ngôn ngữ bậc cao, định kiểu động, cú pháp rõ ràng, xử lý linh hoạt).
  • Thư viện thị giác máy tính: OpenCV (Open Source Computer Vision Library) hỗ trợ xử lý luồng video thời gian thực từ webcam và nhận dạng khuôn mặt.
  • Framework thiết kế giao diện: PyQt5 (kết hợp Python và thư viện Qt đa nền tảng). Tác giả sử dụng công cụ Qt Designer để thiết kế các file giao diện XML dạng .ui, sau đó dùng module pyuic5 ($ pyuic5 <file>.ui -o <file>.py) để biên dịch sang mã nguồn Python. Các module PyQt5 được sử dụng bao gồm: QtCore, QtGui, QtWidgets, QtMultimedia, QtSql, QtNetwork, QtTest...
  • Hệ quản trị cơ sở dữ liệu: SQLite 3 (kết hợp công cụ DB Browser for SQLite) – hệ quản trị cơ sở dữ liệu quan hệ nhúng, không cần cài đặt máy chủ phức tạp, lưu trữ toàn bộ dữ liệu trong các file cục bộ (FaceData.db và data.sqlite).

2. Thiết kế cơ sở dữ liệu

Cơ sở dữ liệu của phần mềm bao gồm hai tập tin độc lập phục vụ cho việc phân tách chức năng nghiệp vụ và bảo mật:

Tên Database Tên Bảng Cấu trúc trường dữ liệu (Schema) Mục đích sử dụng
FaceData.db people ID CHAR(10, 20) NOT NULL PRIMARY KEY,
Name VARCHAR(30, 40) NOT NULL,
Age INTEGER(10, 20),
Gender CHAR(20, 30),
Phone NUMERIC(0, 11),
Address VARCHAR(150)
Lưu trữ hồ sơ thông tin cá nhân của nhân viên phục vụ điểm danh
data.sqlite userdata username VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL
Lưu trữ thông tin tài khoản đăng nhập và mật khẩu của Quản trị viên (Admin)

3. Hiện thực hóa mã nguồn thao tác dữ liệu

Tác giả xây dựng hàm xử lý kết nối và cập nhật dữ liệu tự động giữa giao diện và cơ sở dữ liệu SQLite:

def insertOrUpdate(id, name, age, gender, phone, address):
    conn = sqlite3.connect('FaceData.db')
    query1 = "SELECT * FROM people WHERE ID=" + str(id)
    try:
        cursor = conn.execute(query1)
    except sqlite3.OperationalError:
        query = "CREATE TABLE people (ID CHAR(10, 20) NOT NULL PRIMARY KEY, Name VARCHAR(30, 40) NOT NULL, Age INTEGER(10, 20), Gender CHAR(20, 30), Phone NUMERIC(0, 11), Address VARCHAR(150));"
        conn.execute(query)
        cursor = conn.commit()
    
    global isRecordExist
    isRecordExist = 0
    for row in cursor:
        isRecordExist = 1
        
    if isRecordExist == 0:
        query = "INSERT INTO people (ID, Name, Age, Gender, Phone, Address) VALUES(" + str(id) + ",'" + str(name) + "','" + str(age) + "','" + str(gender) + "'," + str(phone) + ",'" + str(address) + "')"
        print("Thêm thông tin thành công")
    else:
        query = "UPDATE people SET Name = '" + str(name) + "', Age = '" + str(age) + "', Gender = '" + str(gender) + "', Phone = " + str(phone) + ", Address = '" + str(address) + "' WHERE ID=" + str(id)
        print("Cập nhật thông tin thành công")
        
    conn.execute(query)
    conn.commit()
    conn.close()

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

CHƯƠNG I: PHÂN TÍCH YÊU CẦU HỆ THỐNG ỨNG DỤNG DESKTOP NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH

Chương I tập trung làm rõ bối cảnh kỹ thuật và thiết lập khung yêu cầu cho hệ thống:

  • Yêu cầu chức năng: Xây dựng đầy đủ các tác vụ cơ bản của phần mềm điểm danh desktop gồm: nhận diện khuôn mặt, ghi nhận điểm danh, xem lịch sử điểm danh, quản lý hồ sơ nhân viên (thêm, sửa, xóa thông tin), quản lý phân quyền Admin (đổi mật khẩu, quản trị hệ thống).
  • Yêu cầu phi chức năng: Đảm bảo giao diện thân thiện, dễ sử dụng, tính khách quan trong việc điểm danh, khả năng hỗ trợ khi có sự cố, nắm bắt các kỹ thuật thị giác máy tính với OpenCV và PyQt5.
  • Tổng quan công nghệ: Phân tích chi tiết đặc tính của ngôn ngữ Python, cấu trúc thư viện OpenCV (chứa hơn 500 hàm và hơn 2500 thuật toán tối ưu hóa cho tính toán thời gian thực), framework PyQt5 (cơ chế phân chia các module QtCore, QtGui, QtWidgets, QtSql... và cách dùng công cụ Qt Designer, uic), hệ quản trị SQLite và môi trường lập trình Visual Studio Code.
  • Khảo sát bài toán nhận dạng mặt người: Trình bày 4 bước xử lý mẫu (Phát hiện, Phân đoạn, Trích chọn đặc trưng, Nhận dạng) và liệt kê 7 nhóm yếu tố gây sai lệch trong quá trình thu nhận và xử lý ảnh khuôn mặt trong thực tế.

CHƯƠNG II: PHÂN TÍCH THIẾT KẾ HỆ THỐNG ỨNG DỤNG DESKTOP NHẬN DIỆN KHUÔN MẶT VÀ ĐIỂM DANH

Chương II mô hình hóa toàn diện hệ thống thông qua các sơ đồ UML và cấu trúc dữ liệu:

  • Xác định tác nhân (Actors): Hệ thống gồm 2 tác nhân chính:
    1. Quản trị viên (Admin): Có quyền hạn cao nhất, chịu trách nhiệm quản lý tài khoản, thêm/sửa/xóa hồ sơ nhân viên, quản lý dữ liệu khuôn mặt và vận hành huấn luyện dữ liệu.
    2. Nhân viên: Tác nhân tương tác trực tiếp để thực hiện nhận diện điểm danh qua camera và tra cứu lịch sử điểm danh cá nhân.
  • Phân rã ca sử dụng (Use Cases):
    • Nhóm Xác thực (Authentication): Đăng nhập, Đăng xuất, Thay đổi mật khẩu.
    • Nhóm Quản trị (Admin): Cập nhật thông tin nhân viên (gồm Tab 1: Sửa thông tin không kèm khuôn mặt; Tab 2: Thêm mới nhân viên kèm chụp khuôn mặt), Xóa nhân viên (xóa thông tin CSDL và xóa dữ liệu khuôn mặt), Tìm kiếm thông tin theo ID, Huấn luyện dữ liệu ảnh (Training Data), Xem lịch điểm danh.
    • Nhóm Nhân viên: Điểm danh (Khởi động camera, Nhận diện, Ghi nhận điểm danh), Xem lịch điểm danh.
  • Đặc tả và mô hình hóa động: Xây dựng bảng đặc tả chi tiết (Mục tiêu, Tác nhân, Kích hoạt, Tiền điều kiện, Hậu điều kiện, Luồng sự kiện chính) đi kèm biểu đồ hoạt động và biểu đồ tuần tự cho tất cả các ca sử dụng: Đăng nhập, Thay đổi mật khẩu, Thêm/Sửa nhân viên, Xóa nhân viên, Tìm kiếm thông tin, Điểm danh qua camera, và Tra cứu lịch.
  • Phân tích kiến trúc vận hành: Làm rõ sự phối hợp giữa giao diện người dùng, khối xử lý logic của Server phần mềm và cơ sở dữ liệu SQLite.

CHƯƠNG III: KẾT QUẢ THỰC NGHIỆM

Chương III trình bày quá trình cài đặt thực tế và các màn hình chức năng của sản phẩm phần mềm:

  • Quá trình triển khai kỹ thuật: Hiện thực hóa module kết nối và thao tác CSDL SQLite thông qua hàm insertOrUpdate; thu thập tập dữ liệu khuôn mặt nhân viên vào thư mục lưu trữ Dataset; cấu hình lớp nhận diện (detector) để đối soát khuôn mặt thời gian thực sau khi dữ liệu đã được huấn luyện.
  • Giao diện chức năng hoàn thiện:
    • Màn hình chính: Cung cấp 4 phân hệ truy cập gồm [Chế độ Admin], [Điểm danh], [Thông tin ứng dụng] và [Trợ giúp].
    • Giao diện Điểm danh: Cho phép kích hoạt webcam qua nút [Start Camera], hiển thị khung nhận diện khuôn mặt và ghi nhận kết quả điểm danh vào bảng lịch sử.
    • Giao diện Quản trị Admin: Phân hệ đăng nhập bảo mật; bảng điều khiển quản lý nhân viên cho phép tra cứu, thêm mới nhân viên (kích hoạt camera chụp ảnh khuôn mặt vào Dataset), cập nhật thông tin theo ID, xóa bản ghi; chức năng Training Data để cập nhật mô hình nhận diện; và module đổi mật khẩu quản trị.
    • Giao diện Tra cứu lịch và Trợ giúp: Hiển thị bảng dữ liệu lịch sử điểm danh và thông tin hỗ trợ kỹ thuật khi gặp sự cố.

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

1. Kết quả đạt được

  • Xây dựng thành công ứng dụng desktop hoàn chỉnh chạy trên nền tảng Python 3, đáp ứng đầy đủ chu trình nghiệp vụ từ quản lý nhân sự, thu nhận mẫu khuôn mặt, huấn luyện dữ liệu đến nhận diện điểm danh qua camera thời gian thực.
  • Thiết kế và chuẩn hóa được 2 cơ sở dữ liệu quan hệ gọn nhẹ (FaceData.db cho bảng people và data.sqlite cho bảng userdata), đảm bảo khả năng vận hành độc lập không phụ thuộc vào hệ thống máy chủ cơ sở dữ liệu nặng.
  • Xây dựng hệ thống tài liệu phân tích thiết kế phần mềm chi tiết với hệ thống bảng đặc tả ca sử dụng, biểu đồ hoạt động và biểu đồ tuần tự cho 100% các chức năng cốt lõi.
  • Hiện thực hóa thành công giao diện đồ họa trực quan thông qua công cụ Qt Designer và thư viện PyQt5, tích hợp luồng xử lý nhận diện từ OpenCV.

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

  • Ứng dụng quy trình tự động hóa kiểm soát điểm danh nhằm loại bỏ thao tác ghi chép thủ công, giảm thiểu sai sót và gian lận trong chấm công.
  • Tách biệt quy trình quản trị: khi thêm nhân viên mới chưa có ID trong hệ thống, phần mềm tự động kích hoạt camera thu thập mẫu ảnh mặt vào Dataset; trong khi thao tác sửa thông tin nhân viên đã có sẵn ID chỉ cập nhật dữ liệu văn bản mà không ghi đè dữ liệu ảnh nhận diện cũ.

3. Đóng góp về mặt kỹ thuật

  • Cung cấp một mô hình triển khai thực tế kết hợp giữa ngôn ngữ Python, thư viện thị giác máy tính OpenCV và framework GUI PyQt5 trên nền cơ sở dữ liệu nhúng SQLite, đóng vai trò như một tài liệu tham khảo hoàn chỉnh về quy trình phát triển phần mềm nhận diện cục bộ trên Desktop.

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

  • Hạn chế: Theo các phân tích về bài toán nhận dạng mặt người được tác giả đề cập trong văn bản, hệ thống vẫn chịu ảnh hưởng bởi các yếu tố ngoại cảnh thực tế như: góc nghiêng và tư thế khuôn mặt khi đứng trước camera (góc quay quá 45 độ, chụp từ trên xuống/dưới lên); điều kiện ánh sáng môi trường thay đổi; sự che khuất bởi phụ kiện (kính, khẩu trang, râu); và sự biến đổi diện mạo theo thời gian.
  • Hướng phát triển: Đồ án định hướng tiếp tục nghiên cứu nâng cấp các thuật toán nhận dạng để cải thiện độ chính xác trong các điều kiện chụp phức tạp, tối ưu hóa tốc độ huấn luyện dữ liệu (Training Data) và mở rộng các tính năng thống kê, xuất báo cáo chấm công phục vụ quy mô nhân sự lớn hơn.

Giá trị tham khảo

Bản đồ án tốt nghiệp này mang lại giá trị tham khảo thiết thực cho:

  • Sinh viên ngành Công nghệ thông tin và Kỹ thuật phần mềm: Là tài liệu tham khảo hữu ích cho các đồ án tốt nghiệp, tiểu luận chuyên ngành về phân tích thiết kế hệ thống thông tin theo chuẩn UML (đặc tả Use Case, biểu đồ tuần tự, biểu đồ hoạt động) và lập trình ứng dụng Desktop bằng Python/PyQt5.
  • Người nghiên cứu ứng dụng thị giác máy tính cơ bản: Cung cấp hướng dẫn từng bước về việc tích hợp thư viện OpenCV vào giao diện đồ họa tương tác, quy trình thu thập dữ liệu ảnh thô và thiết lập bộ dò nhận dạng khuôn mặt (detector).
  • Phần đáng tham khảo nhất: Hệ thống sơ đồ đặc tả phân tích thiết kế tại Chương II và cấu trúc code xử lý dữ liệu SQLite kết nối với giao diện tại Chương III.

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

1. Hệ thống phần mềm này được xây dựng trên những công nghệ và công cụ nào?
Phần mềm sử dụng ngôn ngữ lập trình Python 3 (viết trên Visual Studio Code và IDLE), thư viện xử lý ảnh OpenCV, framework thiết kế giao diện PyQt5 (sử dụng Qt Designer và lệnh pyuic5), và hệ quản trị cơ sở dữ liệu nhúng SQLite 3 (quản lý qua DB Browser for SQLite).

2. Cơ sở dữ liệu của hệ thống lưu trữ những bảng nào và có cấu trúc ra sao?
Cơ sở dữ liệu gồm 2 tập tin:

  • Tập tin FaceData.db chứa bảng people gồm các trường: ID (Khóa chính), Name, Age, Gender, Phone, Address.
  • Tập tin data.sqlite chứa bảng userdata gồm các trường: username và password dùng cho tài khoản Admin.

3. Hệ thống phân chia bao nhiêu nhóm quyền và gồm những tác nhân (Actors) nào?
Hệ thống xác định 2 tác nhân chính:

  • Quản trị viên (Admin): Có toàn quyền đăng nhập, đổi mật khẩu, thêm/sửa/xóa nhân viên, tìm kiếm, thực hiện Training Data và xem lịch điểm danh.
  • Nhân viên: Có quyền kích hoạt camera để nhận diện điểm danh và tra cứu lịch sử điểm danh của bản thân.

4. Khi Quản trị viên thực hiện "Thêm hoặc sửa thông tin nhân viên", hệ thống xử lý phân nhánh như thế nào?
Dựa trên mã định danh ID:

  • Nếu ID chưa tồn tại trong hệ thống: Phần mềm tự động lưu thông tin văn bản vào CSDL và kích hoạt camera để thu thập dữ liệu ảnh khuôn mặt mới vào thư mục Dataset.
  • Nếu ID đã tồn tại trong hệ thống: Phần mềm chỉ thực hiện cập nhật các thông tin cá nhân trong CSDL mà không thực hiện chụp lại khuôn mặt.

5. Kiến trúc xử lý nhận dạng khuôn mặt tiêu chuẩn được tác giả trình bày gồm những bước nào?
Gồm 4 bước: (1) Phát hiện khuôn mặt (Face Detection), (2) Phân đoạn/Căn chỉnh khuôn mặt (Face Alignment/Segmentation), (3) Trích chọn đặc trưng (Feature Extraction), và (4) Nhận dạng (Face Recognition/Matching).


Kết luận

Đồ án tốt nghiệp của sinh viên Nguyễn Văn Sơn đã hoàn thành mục tiêu xây dựng hệ thống phần mềm nhận diện khuôn mặt và điểm danh trên môi trường desktop bằng ngôn ngữ Python. Đề tài đã hệ thống hóa đầy đủ cơ sở lý thuyết về xử lý ảnh, mô hình hóa chi tiết yêu cầu hệ thống qua chuẩn UML và triển khai thành công sản phẩm ứng dụng tích hợp OpenCV, PyQt5 cùng cơ sở dữ liệu SQLite. Đây là công trình mang tính thực nghiệm kỹ thuật phần mềm rõ ràng, có cấu trúc chặt chẽ và giá trị tham khảo tốt cho sinh viên khối ngành Công nghệ thông tin.