Giới thiệu dự án

Thị giác máy tính (Computer Vision) và xử lý ảnh số đã trở thành nền tảng cốt lõi trong thời đại tự động hóa, thúc đẩy thị trường sinh trắc học toàn cầu đạt mức tăng trưởng kép hàng năm (CAGR) trên 16.5%. Trong các phương thức sinh trắc học, nhận diện khuôn mặt sở hữu ưu thế vượt trội nhờ tính phi tiếp xúc (non-intrusive), thu thập dữ liệu thụ động qua camera giám sát mà không yêu cầu đối tượng tương tác trực tiếp như quét vân tay hay mống mắt.

Tuy nhiên, các hệ thống nhận diện khuôn mặt truyền thống đối mặt với những thách thức nghiêm trọng khi triển khai thực tế. Sự biến thiên về điều kiện chiếu sáng (illumination), thay đổi biểu cảm (expression), góc chụp lệch trục (pose variations $> 45^\circ$) và đặc biệt là tình trạng che khuất một phần khuôn mặt (occlusion do kính mắt, khẩu trang, khăn trùm) làm suy giảm nghiêm trọng độ chính xác của các thuật toán so khớp mẫu cổ điển.

Đồ án tốt nghiệp "Ứng dụng xử lý ảnh trong nhận diện khuôn mặt" do sinh viên Bùi Thị Thanh Tuyền thực hiện dưới sự hướng dẫn của TS. Nguyễn Mạnh Hùng tại Khoa Đào tạo Chất lượng cao – Trường Đại học Sư phạm Kỹ thuật TP.HCM (2017) đã giải quyết triệt để bài toán này bằng cách kết hợp khung phát hiện đối tượng thời gian thực với lý thuyết biểu diễn thưa thớt tiên tiến.

+-----------------------------------------------------------------------------+
|                                MỤC TIÊU DỰ ÁN                               |
+-----------------------------------------------------------------------------+
| 1. Nghiên cứu lý thuyết xử lý ảnh số, không gian màu và kỹ thuật ngưỡng ảnh |
| 2. Triển khai thuật toán Viola-Jones để phát hiện khuôn mặt tự động        |
| 3. Xây dựng thuật toán phân loại dựa trên biểu diễn thưa thớt (SRC)        |
| 4. Thiết kế phần mềm giao diện đồ họa người dùng (MATLAB GUIDE) hoàn chỉnh  |
+-----------------------------------------------------------------------------+

Phương pháp tiếp cận được lựa chọn mang tính đột phá: sử dụng giải thuật Viola-Jones để phát hiện và cô lập vùng mặt người từ luồng video webcam thời gian thực, sau đó áp dụng Phương pháp phân loại dựa trên biểu diễn thưa thớt (Sparse Representation-based Classification - SRC) kết hợp bài toán tối ưu hóa chuẩn $\ell_1$ ($\ell_1$-minimization). Phương pháp này giúp hệ thống có khả năng tái tạo và phân loại chính xác danh tính ngay cả khi mẫu khuôn mặt bị che khuất hoặc suy hao dữ liệu.

Phạm vi nghiên cứu tập trung vào hệ thống nhận diện ảnh mặt người tĩnh và động thông qua webcam máy tính trong môi trường trong nhà, thử nghiệm trên tập dữ liệu chuẩn AR Face Database (700 ảnh của 100 đối tượng) và cơ sở dữ liệu mẫu thực nghiệm tại chỗ. Giới hạn đề tài chưa bao quát trường hợp quay góc nghiêng lớn ($> 60^\circ$) hoặc điều kiện ánh sáng cực yếu (thiếu camera hồng ngoại).


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

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

Trước khi đề xuất mô hình biểu diễn thưa thớt, các hệ thống nhận dạng mặt người chủ yếu dựa trên 4 hướng tiếp cận chính: dựa trên tri thức (knowledge-based), đặc trưng không đổi (feature invariant), so khớp mẫu (template matching) và diện mạo học máy (appearance-based).

Phương pháp Ưu điểm Nhược điểm Khả năng chống che khuất (Occlusion)
Phân tích thành phần chính (PCA / Eigenfaces) Tốc độ trích xuất nhanh, giảm số chiều dữ liệu tốt Nhạy cảm cao với thay đổi ánh sáng và góc chụp Rất kém ($< 60%$)
Phân tích phân biệt tuyến tính (LDA / Fisherfaces) Tối ưu hóa phân tách giữa các lớp đối tượng Yêu cầu số lượng mẫu huấn luyện lớn, dễ bị quá khớp Kém
Máy vector hỗ trợ (SVM) Độ chính xác cao với bài toán phân lớp nhị phân Khó mở rộng khi số lượng lớp đối tượng $N$ tăng vọt Trung bình
Biểu diễn thưa thớt (SRC - Đề xuất) Kháng nhiễu vượt trội, nhận diện chuẩn xác khi bị che khuất Độ phức tạp tính toán giải bài toán tối ưu $\ell_1$ Xuất sắc ($> 85%$)

Theo mô hình ưu tiên yêu cầu MoSCoW:

  • Must have (Bắt buộc): Chức năng chụp ảnh từ webcam; phát hiện khuôn mặt thời gian thực; trích xuất ma trận đặc trưng; phân loại định danh chính xác đối tượng.
  • Should have (Nên có): Giao diện đồ họa tương tác (GUI); chức năng lưu trữ và quản lý cơ sở dữ liệu ảnh mẫu; cơ chế tiền xử lý chuẩn hóa kích thước.
  • Could have (Có thể có): Chế độ chụp và xử lý ảnh hàng loạt (batch capture/processing); báo cáo sai số thặng dư trực quan.
  • Won't have (Chưa thực hiện): Tích hợp phân quyền phần cứng nhúng; nhận diện khuôn mặt đa góc độ 3D.

Thiết kế hệ thống

Kiến trúc hệ thống được phân lớp rõ ràng từ khâu thu nhận tín hiệu vật lý đến tầng phân lớp toán học:

[Webcam Thu Nhận Ảnh] 
       │
       ▼
[Khối Tiền Xử Lý: RGB -> Grayscale -> Thresholding / Filtering]
       │
       ▼
[Khối Phát Hiện Khuôn Mặt: Viola-Jones (Haar-like + AdaBoost + Cascaded Classifier)]
       │
       ▼
[Khối Chuẩn Hóa & Hạ Mẫu (Downsampling): Matrix A_i]
       │
       ▼
[Khối Nhận Dạng: SRC Tối Ưu Hóa Chuẩn L1 via Linprog]
       │
       ▼
[Tính Số Dư Tối Thiểu r_i(y) -> Xuất Danh Tính Lớp]
  • Công nghệ & Công cụ sử dụng:
    • Môi trường phát triển: MATLAB R2016a / R2017a (MathWorks).
    • Thư viện: MATLAB Image Processing Toolbox v9.4, Optimization Toolbox v7.4 (hàm linprog).
    • Giao diện: MATLAB Graphical User Interface Design Environment (GUIDE).
    • Thu nhận ảnh: MATLAB Image Acquisition Toolbox qua DirectShow Webcam Interface.
  • Thiết kế cấu trúc dữ liệu ma trận: Dữ liệu khuôn mặt huấn luyện gồm $k$ đối tượng, mỗi đối tượng có $n_i$ ảnh mẫu kích thước $m_1 \times n_1$. Mỗi ảnh được duỗi thành một vector cột $v_{i,j} \in \mathbb{R}^m$ ($m = m_1 \times n_1$). Tập huấn luyện của lớp thứ $i$ lập thành ma trận $A_i = [v_{i,1}, v_{i,2}, \dots, v_{i,n_i}] \in \mathbb{R}^{m \times n_i}$. Toàn bộ từ điển huấn luyện là ma trận ghép $A = [A_1, A_2, \dots, A_k] \in \mathbb{R}^{m \times n}$, với $n = \sum_{i=1}^k n_i$.

Methodology

Đề tài áp dụng quy trình phát triển lặp kết hợp kiểm chứng thực nghiệm (Iterative Engineering Methodology) trong 12 tuần:

  1. Giai đoạn 1 (Tuần 1–3): Khảo sát lý thuyết xử lý ảnh số, định lý lấy mẫu Shannon (SST), luật lấy mẫu Nyquist (NSL) và nguyên lý Lấy mẫu nén (Compressed Sensing - CS).
  2. Giai đoạn 2 (Tuần 4–7): Xây dựng module phát hiện khuôn mặt bằng thuật toán Viola-Jones; tối ưu hóa cấu trúc Haar-like và tầng phân loại Cascade.
  3. Giai đoạn 3 (Tuần 8–10): Hiện thực thuật toán SRC, chuyển đổi bài toán tối ưu $\ell_1$-norm sang quy hoạch tuyến tính (Linear Programming), thử nghiệm trên ma trận chuẩn hóa.
  4. Giai đoạn 4 (Tuần 11–12): Thiết kế giao diện GUI, ghép nối toàn bộ khối xử lý, đo kiểm benchmark và đánh giá kết quả nghiệm thu.

Implementation và kết quả

Development process

Quá trình lập trình tập trung vào việc giải quyết hai bài toán cốt lõi: phát hiện khuôn mặt và phân loại thưa thớt.

1. Thuật toán phát hiện khuôn mặt Viola-Jones

Giải thuật sử dụng 3 kỹ thuật đột phá:

  • Ảnh tích phân (Integral Image): Cho phép tính tổng cường độ điểm ảnh trong bất kỳ vùng chữ nhật nào chỉ với 4 phép truy xuất: $$\text{Sum} = D - (B + C) + A$$
  • Bộ đặc trưng Haar-like: Bao gồm đặc trưng cạnh (Edge features), đặc trưng đường (Line features) và đặc trưng xung quanh tâm (Center-surround features).
  • Mô hình phân tầng Cascade: Kết hợp hàng loạt bộ phân loại yếu (Weak Classifiers) được chọn lọc bởi AdaBoost thành bộ phân loại mạnh, nhanh chóng loại bỏ các vùng nền không chứa mặt người để tiết kiệm tài nguyên CPU.
┌─────────────────────────────────────────────────────────────┐
│              SƠ ĐỒ PHÂN TẦNG CASCADE CLASSIFIER             │
├─────────────────────────────────────────────────────────────┤
│  Ảnh ngõ vào ──> [ Tầng 1 ] ──(True)──> [ Tầng 2 ] ──(True) │
│                     │                      │                │
│                  (False)                (False)             │
│                     │                      │                │
│                     ▼                      ▼                │
│                [ Loại Bỏ ]            [ Loại Bỏ ]           │
│                                                             │
│       ──(True)──> [ Tầng N ] ──(True)──> [ Khuôn Mặt ]      │
│                      │                                      │
│                   (False)                                   │
│                      │                                      │
│                      ▼                                      │
│                 [ Loại Bỏ ]                                 │
└─────────────────────────────────────────────────────────────┘

2. Thuật toán phân loại dựa trên biểu diễn thưa thớt (SRC)

Khi đưa vào một ảnh kiểm tra $y \in \mathbb{R}^m$, giả thiết $y$ có thể được biểu diễn xấp xỉ tuyến tính qua các mẫu huấn luyện: $$y = Ax_0 + e$$ Trong đó $x_0 = [0, \dots, 0, \alpha_{i,1}, \dots, \alpha_{i,n_i}, 0, \dots, 0]^T$ là vector hệ số thưa thớt chỉ chứa giá trị khác không tại các vị trí tương ứng với lớp của đối tượng, còn $e$ là vector nhiễu thưa thớt đại diện cho phần bị che khuất.

Để tìm $x$, ta giải bài toán tối ưu lồi $\ell_1$-minimization: $$\hat{x}_1 = \arg\min_x |x|_1 \quad \text{thỏa mãn} \quad |Ax - y|_2 \le \varepsilon$$

Để thực thi trong MATLAB, bài toán được biến đổi tương đương thành bài toán Quy hoạch tuyến tính (Linear Programming) bằng cách phân tách $x = u - v$ với $u, v \ge 0$:

% Trích xuất đoạn mã thực thi cốt lõi từ file gui.m
function btnRecon_Callback(hObject, eventdata, handles)
    global A m1 n1 No_Files_In_Class_Folder Class_Count Training_Set_Folder
    axes(handles.imgRecog); cla;
    axes(handles.imgLoad); drawnow;
    
    Test_File = [pwd, '\test.jpg'];
    test = imread(Test_File);
    
    % Tiền xử lý: Chuyển ảnh màu RGB sang Grayscale
    if length(size(test)) == 3
        Test_Image = rgb2gray(test);
    else
        Test_Image = test;
    end
    
    % Hạ mẫu ảnh kiểm tra về kích thước ma trận [m1 x n1]
    Test_Image_Down_Sampled = double(imresize(Test_Image, [m1 n1]));
    y = Test_Image_Down_Sampled(:); % Duỗi ma trận thành vector cột
    
    % Cấu hình bài toán Quy hoạch tuyến tính giải L1-minimization
    n = size(A, 2);
    f = ones(2 * n, 1);
    Aeq = [A -A];
    lb = zeros(2 * n, 1);
    
    % Giải nghiệm x1 tối ưu bằng hàm linprog
    x1 = linprog(f, [], [], Aeq, y, lb, [], [], []);
    
    % Phân loại dựa trên phần dư phục hồi nhỏ nhất (Minimum Residual)
    % r_i(y) = || y - A * delta_i(x1) ||_2

Testing và validation

Hệ thống được kiểm thử qua hai kịch bản độc lập:

  1. Kịch bản 1: Thử nghiệm trên tập dữ liệu chuẩn AR Face Database

    • Tập dữ liệu: 700 ảnh của 100 đối tượng (7 ảnh/người), bao gồm các biến thể biểu cảm (cười, nhăn mặt), điều kiện chiếu sáng và che khuất (đeo kính râm, quàng khăn).
    • Độ phân giải hạ mẫu: $32 \times 32$ pixel ($m = 1024$).
    • Độ chính xác nhận diện: Đạt 95.4% trong điều kiện bình thường và 87.6% trong điều kiện bị che khuất ngẫu nhiên lên tới $30%$ diện tích khuôn mặt.
  2. Kịch bản 2: Thử nghiệm hệ thống thực tế qua Webcam USB 2.0 (DirectShow)

    • Mẫu thử nghiệm: Chụp trực tiếp 5 đối tượng tại phòng thí nghiệm trong nhiều góc độ và điều kiện ánh sáng phòng.
    • Thời gian phát hiện khuôn mặt trung bình (Viola-Jones): 45 ms / frame.
    • Thời gian nhận diện và giải $\ell_1$-minimization: 180 ms / ảnh trên cấu hình phần cứng CPU Intel Core i5.
    • Tỷ lệ nhận diện đúng thực tế: 92.3%.

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

  • Đột phá về cơ chế chống che khuất: Khác với PCA hay LDA vốn suy sụp hoàn toàn khi khuôn mặt bị che khuất (kính mắt, khẩu trang), việc ứng dụng lý thuyết Biểu diễn thưa thớt (Sparse Representation) kết hợp Lấy mẫu nén (Compressed Sensing) cho phép hệ thống "bỏ qua" các pixel hỏng/bị che khuất nhờ xem chúng như thành phần nhiễu thưa thớt $e$, tái tạo lại chính xác danh tính người dùng.
  • Vượt qua giới hạn định lý lấy mẫu Nyquist-Shannon: Tận dụng tính chất thưa của tín hiệu ảnh trong miền từ điển cơ sở, hệ thống chỉ cần một lượng nhỏ phép đo hạ mẫu ($m \ll n$) nhưng vẫn đảm bảo độ chính xác phân lớp trọn vẹn, giúp tiết kiệm không gian lưu trữ và bộ nhớ đệm ma trận.
  • Giải pháp phần mềm độc lập, dễ mở rộng: Đóng gói trọn vẹn quy trình tiền xử lý, huấn luyện ma trận từ điển $A$ và giao diện GUI tương tác trực quan trên nền tảng MATLAB, cung cấp nền tảng mẫu chuẩn cho các nghiên cứu chuyên sâu về thị giác máy tính ứng dụng.
ĐỘ CHÍNH XÁC NHẬN DIỆN TRONG ĐIỀU KIỆN KHUÔN MẶT BỊ CHE KHUẤT (OCCLUSION 30%)
SRC (Đề xuất)  : [█████████████████████████████████████▍     ] 87.6%
SVM Tuyến tính : [███████████████████████▍                   ] 58.2%
Eigenfaces PCA : [█████████████████                          ] 42.5%

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

Kịch bản ứng dụng (Use cases)

  1. Hệ thống kiểm soát ra vào thông minh (Access Control): Tích hợp tại cổng văn phòng, cơ quan, phòng server để nhận diện nhân sự tự động mà không cần mang thẻ từ hoặc chạm vân tay.
  2. Xác thực an toàn tại cây ATM: Tự động đối chứng khuôn mặt người đang giao dịch với dữ liệu chủ thẻ lưu trữ, ngăn chặn tình trạng chiếm đoạt mã PIN hoặc giả mạo chủ tài khoản.
  3. Điểm danh sinh viên / Giám sát thi cử: Triển khai chụp ảnh lớp học và tự động đối soát với cơ sở dữ liệu sinh viên đã đăng ký trong hệ thống đào tạo.

Yêu cầu triển khai hệ thống (System Requirements)

+-------------------+---------------------------------------------------------+
| HẠNG MỤC          | YÊU CẦU TỐI THIỂU                                       |
+-------------------+---------------------------------------------------------+
| Vi xử lý (CPU)    | Intel Core i3 / AMD Ryzen 3 trở lên (x86_64 architecture)|
| Bộ nhớ RAM        | Tối thiểu 4 GB (Khuyến nghị 8 GB khi ma trận A lớn)      |
| Camera            | Webcam độ phân giải HD 720p, chuẩn giao tiếp USB 2.0+   |
| Hệ điều hành      | Microsoft Windows 7 / 8 / 10 (64-bit) hoặc Ubuntu Linux |
| Môi trường chạy   | MATLAB R2016a+ hoặc MATLAB Compiler Runtime (MCR v9.0+) |
+-------------------+---------------------------------------------------------+

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

Hạn chế kỹ thuật

  • Độ phức tạp tính toán của thuật toán tối ưu: Thuật toán linprog (Quy hoạch tuyến tính điểm trong - Interior Point hoặc Simplex) có độ phức tạp tăng nhanh khi kích thước ma trận từ điển $A$ mở rộng (hàng nghìn mẫu nhận diện), dẫn đến độ trễ nhận diện tăng.
  • Hạn chế về góc nghiêng khuôn mặt: Giải thuật Viola-Jones Cascade tiêu chuẩn chủ yếu phát hiện tốt khuôn mặt nhìn thẳng ($\pm 15^\circ$), hiệu năng giảm rõ rệt với góc quay nghiêng lớn ($> 45^\circ$).
  • Cơ chế quản lý thư mục ảnh: Chương trình nguyên bản cần cải tiến cơ chế ghi đè tệp tin tạm test.jpg để hỗ trợ lưu trữ đa luồng và nhận diện liên tục.

Hướng phát triển mở rộng

  • Tăng tốc thuật toán: Thay thế linprog bằng các thuật toán giải bài toán tối ưu $\ell_1$ chuyên dụng tốc độ cao như Homotopy Method, Augmented Lagrange Multiplier (ALM) hoặc FISTA.
  • Chuyển đổi sang hệ thống nhúng: Chuyển đổi mã nguồn MATLAB sang C++/Python sử dụng thư viện OpenCV và tối ưu hóa chạy trên các kit nhúng hiệu năng cao như Raspberry Pi 4, NVIDIA Jetson Nano.
  • Kết hợp mạng nơ-ron tích chập (CNN): Tích hợp các backbone học sâu (như MobileNetV2, FaceNet) ở bước trích xuất đặc trưng kết hợp bộ phân loại thưa thớt ở tầng cuối để tối đa hóa độ chính xác.

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

  • Sinh viên & Học viên ngành Điện tử / CNTT: Nguồn tài liệu học tập toàn diện về việc kết hợp giữa xử lý ảnh cổ điển (Viola-Jones, chuyển đổi mức xám, ngưỡng ảnh) và toán tối ưu hiện đại (Compressed Sensing, $\ell_1$-minimization).
  • Kỹ sư R&D & Lập trình viên Thị giác máy tính: Cung cấp mẫu thiết kế hoàn chỉnh từ khâu bắt luồng video phần cứng, xử lý ma trận số liệu lớn đến thiết kế giao diện vận hành trên MATLAB.
  • Doanh nghiệp & Cơ quan quản lý: Cơ sở khả thi để nghiên cứu phát triển các giải pháp chấm công, giám sát an ninh phi tiếp xúc với chi phí phần cứng thấp, khả năng chịu lỗi và chống che khuất tốt.

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

1. Tại sao hệ thống lại chuyển đổi ảnh màu RGB sang ảnh mức xám (Grayscale)?

Ảnh màu RGB chứa 3 kênh độc lập (Red, Green, Blue) tương ứng 24 bits/pixel, tạo ra lượng dữ liệu dư thừa lớn. Việc chuyển về ảnh xám (8 bits/pixel, 256 mức xám) giúp giảm $66.7%$ dung lượng tính toán mà vẫn giữ lại toàn vẹn thông tin về cấu trúc biên, độ tương phản và hình học khuôn mặt cần thiết cho phân lớp.

2. Thuật toán Viola-Jones có bị ảnh hưởng bởi điều kiện ánh sáng không?

Có. Viola-Jones dựa trên độ chênh lệch cường độ sáng giữa các vùng chữ nhật đen và trắng trong đặc trưng Haar-like. Khi ánh sáng thay đổi quá gắt hoặc một bên mặt bị đổ bóng tối, giá trị sai phân sẽ bị lệch, khiến các bộ phân loại Cascade có thể bỏ sót khuôn mặt.

3. SRC giải quyết vấn đề khuôn mặt bị đeo kính hoặc che khẩu trang như thế nào?

SRC mô hình hóa phần bị che khuất dưới dạng một vector sai số thưa thớt $e$ có độ lớn bất kỳ nhưng chỉ xuất hiện ở một số ít vị trí pixel. Khi giải bài toán tối ưu $\ell_1$, hệ thống tự động cô lập phần sai số này và chỉ sử dụng các vùng điểm ảnh không bị che khuất để so khớp tuyến tính với ma trận từ điển $A$.

4. Có thể triển khai hệ thống này trên phần cứng không có MATLAB không?

Có thể. Toàn bộ giải thuật toán học và xử lý ảnh có thể được biên dịch thành file thực thi độc lập (.exe) thông qua công cụ MATLAB Compiler đi kèm MATLAB Runtime, hoặc viết lại bằng C++ kết hợp thư viện OpenCV và thư viện giải tối ưu hóa tuyến tính Clp/GLPK.

5. Giới hạn số lượng người có thể nhận diện trong cơ sở dữ liệu là bao nhiêu?

Với giải thuật Quy hoạch tuyến tính tiêu chuẩn trên máy tính cá nhân, hệ thống hoạt động mượt mà với quy mô từ 50 đến 200 đối tượng ($n \approx 1000 - 2000$ ảnh mẫu). Khi quy mô tăng lên hàng nghìn đối tượng, cần phân cụm dữ liệu (clustering) hoặc sử dụng giải thuật tối ưu thưa thớt song song trên GPU.


Kết luận

Đồ án tốt nghiệp "Ứng dụng xử lý ảnh trong nhận diện khuôn mặt" của tác giả Bùi Thị Thanh Tuyền là một công trình nghiên cứu ứng dụng mẫu mực, kết hợp hài hòa giữa cơ sở lý thuyết xử lý ảnh số, khung phát hiện đối tượng thời gian thực Viola-Jones và phương pháp phân loại dựa trên biểu diễn thưa thớt (SRC). Đề tài không chỉ hoàn thành xuất sắc các mục tiêu học thuật về mặt thuật toán mà còn hiện thực hóa thành công sản phẩm phần mềm có giao diện trực quan, chứng minh khả năng ứng dụng thực tiễn cao trong các hệ thống an ninh và nhận thực sinh trắc học hiện đại.