Giới thiệu dự án

Trong kỷ nguyên vạn vật kết nối (IoT) và tự động hóa thông minh, giao tiếp giữa người và máy (Human-Computer Interaction - HCI) đang dịch chuyển mạnh mẽ từ các phương thức tương tác tiếp xúc vật lý sang nhận diện hành vi phi ngôn ngữ. Nghiên cứu tâm lý học thực nghiệm của Albert Mehrabian chỉ ra rằng trong giao tiếp trực tiếp, ngôn ngữ hình thể và biểu cảm khuôn mặt đóng góp tới 55% hiệu quả truyền tải thông điệp, trong khi ngữ điệu chiếm 38% và từ ngữ chỉ chiếm 7%. Nhận dạng cảm xúc khuôn mặt (Facial Emotion Recognition - FER) vì vậy trở thành bài toán trọng điểm trong các hệ thống giám sát an ninh, y tế thông minh, lớp học điện tử và nhà thông minh (Smart Home).

Tuy nhiên, việc triển khai các mô hình thị giác máy tính phức tạp lên phần cứng điều khiển nhúng thường gặp rào cản lớn về chi phí tính toán, độ trễ xử lý và tính ổn định trong thời gian thực. Đề tài khóa luận "Nhận dạng cảm xúc khuôn mặt người" thuộc ngành Công nghệ Kỹ thuật Điện tử Truyền thông giải quyết trực tiếp bài toán này bằng cách kết hợp thuật toán tối ưu hóa không gian đặc trưng trên máy tính với vi điều khiển nhúng giá thành thấp.

+------------------+      Hình ảnh (RGB)      +------------------------------------------+
|  Webcam 600x800  | -----------------------> |         Máy tính xử lý (MATLAB)          |
+------------------+                          |  - Tiền xử lý: Grayscale, Crop Face/Mouth|
                                              |  - Trích xuất: Không gian con Eigenfaces |
                                              |  - Phân loại: Khoảng cách Euclidean      |
                                              +------------------------------------------+
                                                                   |
                                                          Lệnh điều khiển (USB)
                                                                   v
+------------------+      Xung PWM / Tín hiệu +------------------------------------------+
| Thiết bị ngoại vi| <----------------------- |       Kit vi điều khiển Arduino Uno      |
| - Động cơ Servo  |                          |         (Vi điều khiển ATmega328P)       |
| - Hệ thống LED   |                          +------------------------------------------+
+------------------+

Mục tiêu dự án

  1. Xây dựng cơ sở dữ liệu mẫu gồm 390 ảnh chuẩn hóa cho 3 trạng thái cảm xúc cơ bản: Vui (Happy), Buồn (Sad), và Ngạc nhiên (Surprise).
  2. Hiện thực hóa giải thuật Phân tích thành phần chính (Principal Component Analysis - PCA) kết hợp kỹ thuật Eigenfaces để giảm chiều dữ liệu và trích xuất đặc trưng khuôn mặt/vùng miệng.
  3. Thiết lập kết nối đồng bộ phần cứng thời gian thực giữa phần mềm tính toán kỹ thuật MATLAB và bo mạch vi điều khiển Arduino Uno qua giao tiếp truyền thông nối tiếp.
  4. Điều khiển cơ cấu chấp hành tự động tương ứng với trạng thái nhận diện: Mở cửa bằng động cơ servo SG90 khi "Vui", bật đèn LED chiếu sáng khi "Buồn", và đóng cửa kết hợp tắt đèn khi "Ngạc nhiên".

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

  • Phạm vi nhận dạng: 3 trạng thái biểu cảm mặt người (Vui, Buồn, Ngạc nhiên).
  • Điều kiện môi trường: Khoảng cách thu nhận tối ưu từ camera đến đối tượng là 50 cm; điều kiện chiếu sáng đồng đều, góc mặt trực diện.
  • Phần cứng: Máy tính x86/x64 kết nối kit nhúng Arduino Uno R3 và webcam chuẩn USB.

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

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

Phương pháp Ưu điểm Nhược điểm Tính khả thi trên phần cứng nhúng
Mạng nơ-ron tích chập (Deep CNNs) Độ chính xác cao (>95%), kháng nhiễu môi trường tốt. Yêu cầu tài nguyên tính toán lớn (GPU), dung lượng mô hình nặng (>50MB). Rất thấp trên vi điều khiển 8-bit/16-bit; cần phần cứng biên đắt tiền.
Haar-Cascade + Bộ phân loại SVM Tốc độ quét vùng khuôn mặt nhanh, tiêu tốn ít bộ nhớ. Nhạy cảm với góc quay và biểu cảm vi mô; độ chính xác trung bình (70-78%). Khả thi trên vi xử lý trung cấp nhưng độ phức tạp thiết lập cao.
PCA - Eigenfaces (Đề tài lựa chọn) Thuật toán tối ưu, nén dữ liệu cực lớn, xử lý ma trận trực tiếp, độ trễ thấp. Nhạy cảm với thay đổi ánh sáng đột ngột; cần chuẩn hóa ảnh đầu vào nghiêm ngặt. Rất cao; tối ưu hóa phân chia nhiệm vụ giữa máy tính tính toán và kit nhúng.

Hệ thống phân cấp yêu cầu theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Nhận diện chính xác 3 trạng thái cảm xúc với độ chính xác >80%; giao tiếp ổn định giữa MATLAB và Arduino; điều khiển đóng/mở servo và LED.
  • Should-have (Nên có): Giao diện đồ họa người dùng (GUI) trực quan trên MATLAB hỗ trợ nạp dữ liệu huấn luyện và hiển thị luồng webcam trực tiếp.
  • Could-have (Có thể có): Mở rộng nhận dạng cảm xúc Giận dữ (Angry) và Sợ hãi (Fear).
  • Won't-have (Chưa thực hiện): Tích hợp hoàn toàn thuật toán học máy vào bộ nhớ Flash nội bộ của ATmega328P.

Thiết kế hệ thống

+---------------------------------------------------------------------------------------+
|                                    KIẾN TRÚC TOÀN HỆ THỐNG                            |
|                                                                                       |
|  [Khối Cảm biến]        [Khối Xử lý & Phân loại]             [Khối Chấp hành Nhúng]   |
|  +--------------+       +-------------------------+          +---------------------+  |
|  | USB Webcam   | ----> | MATLAB Workspace        | -------> | Arduino Uno R3      |  |
|  | (600x800 px) | (RGB) | - Image Processing Tool | (Serial) | (ATmega328P, 16MHz) |  |
|  +--------------+       | - PCA Feature Extractor |          +----------+----------+  |
|                         | - Euclidean Classifier  |                     |             |
|                         +-------------------------+                     |             |
|                                                                         +--> [PWM D9] |
|                                                                         |    Servo    |
|                                                                         |             |
|                                                                         +--> [D12/D13]|
|                                                                              LEDs     |
+---------------------------------------------------------------------------------------+

Technology stack chi tiết:

  • Môi trường tính toán: MATLAB R2017b/R2018a với Image Processing Toolbox, MATLAB Support Package for Arduino Hardware, và MATLAB Support Package for USB Webcams.
  • Phần cứng điều khiển: Arduino Uno R3 (Vi điều khiển ATmega328P 8-bit họ AVR, tần số dao động thạch anh 16 MHz, 32 KB Flash, 2 KB SRAM, 1 KB EEPROM).
  • Cơ cấu chấp hành: Động cơ Micro Servo TowerPro SG90 (điều khiển góc quay theo độ rộng xung PWM từ chân D9), LED siêu sáng (điều khiển mức logic HIGH/LOW từ chân D12/D13 qua điện trở hạn dòng $R = 330,\Omega$).

Tính toán giá trị điện trở bảo vệ LED với điện áp nguồn $V_{CC} = 5,\text{V}$, điện áp phân cực thuận của LED $V_F = 0.7,\text{V}$, dòng định mức $I_F = 15,\text{mA}$: $$R = \frac{V_{CC} - V_F}{I_F} = \frac{5 - 0.7}{0.015} \approx 286.67,\Omega \implies \text{Chọn điện trở chuẩn } 330,\Omega$$

Phương pháp nghiên cứu và quản lý dự án

Dự án được thực hiện theo mô hình tuần tự 15 tuần với các mốc kiểm soát chất lượng (Milestones):

  • Tuần 1 - 3: Khảo sát lý thuyết, nghiên cứu giải thuật biến đổi trực giao PCA và chuẩn giao tiếp phần cứng.
  • Tuần 4 - 5: Cài đặt Toolboxes/Packages trên MATLAB; thiết kế mạch giao tiếp I/O cho Arduino Uno.
  • Tuần 6 - 7: Thu thập và tiền xử lý 390 mẫu ảnh; lập trình giải thuật trích xuất Eigenfaces và tính toán ma trận hiệp phương sai.
  • Tuần 8 - 10: Tích hợp nhận diện thời gian thực qua webcam, tinh chỉnh ngưỡng khoảng cách Euclidean, kiểm thử tự động cơ cấu chấp hành.
  • Tuần 11 - 15: Đánh giá hiệu năng, thống kê sai số, lập hồ sơ kỹ thuật và hoàn thiện báo cáo tốt nghiệp.

Implementation và kết quả

Quy trình phát triển và cấu trúc thuật toán

Quy trình nhận dạng sử dụng thuật toán PCA - Eigenfaces bao gồm các bước toán học chặt chẽ:

  1. Chuẩn hóa dữ liệu ảnh: Tập huấn luyện gồm $M = 390$ ảnh có kích thước $N \times N$ ($600 \times 800$ điểm ảnh). Chuyển đổi mỗi ảnh sang vector cột $\Gamma_i \in \mathbb{R}^{N^2 \times 1}$.
  2. Tính toán vector khuôn mặt trung bình ($\bar{\Psi}$): $$\bar{\Psi} = \frac{1}{M}\sum_{i=1}^M \Gamma_i$$
  3. Tính toán vector sai phân ($\Phi_i$): $$\Phi_i = \Gamma_i - \bar{\Psi}$$ Hình thành ma trận sai phân dữ liệu $A = [\Phi_1, \Phi_2, \dots, \Phi_M] \in \mathbb{R}^{N^2 \times M}$.
  4. Tối ưu hóa ma trận hiệp phương sai (Covariance Matrix): Thay vì giải trực tiếp ma trận $C = A A^T$ kích thước khổng lồ ($N^2 \times N^2$), giải ma trận trung gian $L = A^T A$ kích thước $M \times M$ ($390 \times 390$): $$L v_i = \lambda_i v_i \implies u_i = A v_i$$ Trong đó $u_i$ là các vector riêng (Eigenvectors) trực chuẩn đại diện cho các đặc trưng khuôn mặt (Eigenfaces).
  5. Chiếu vector đặc trưng và phân loại: Ảnh kiểm tra $\Gamma_{test}$ được trừ ảnh trung bình và chiếu vào không gian con $K$ chiều ($K \ll N^2$): $$\Omega_{test} = U^T (\Gamma_{test} - \bar{\Psi})$$ Khoảng cách Euclidean $d$ giữa $\Omega_{test}$ và vector trọng số của ảnh thứ $k$ trong tập dữ liệu: $$d(\Omega_{test}, \Omega_k) = |\Omega_{test} - \Omega_k|2 = \sqrt{\sum{j=1}^K (\Omega_{test, j} - \Omega_{k, j})^2}$$

Đoạn mã nguồn MATLAB xử lý cốt lõi:

% --- TRÍCH XUẤT ĐẶC TRƯNG VÀ NHẬN DẠNG CẢM XÚC TRÊN MATLAB ---
function emotion = classify_emotion(input_img, training_matrix, avg_face, eigenfaces, train_labels)
    % 1. Tiền xử lý ảnh đầu vào
    if size(input_img, 3) == 3
        gray_img = rgb2gray(input_img);
    else
        gray_img = input_img;
    end
    resized_img = imresize(gray_img, [600, 800]);
    img_vector = double(resized_img(:));
    
    % 2. Chuẩn hóa và chiếu vào không gian Eigenfaces
    diff_vector = img_vector - avg_face;
    projected_test = eigenfaces' * diff_vector;
    
    % 3. Phân loại theo khoảng cách Euclidean tối thiểu
    min_dist = inf;
    matched_index = -1;
    for i = 1:size(training_matrix, 2)
        dist = norm(projected_test - training_matrix(:, i));
        if dist < min_dist
            min_dist = dist;
            matched_index = i;
        end
    end
    
    % 4. Gán nhãn cảm xúc kết quả
    emotion = train_labels{matched_index};
end

Đoạn mã điều khiển nhúng trên Arduino Uno (giao tiếp trực tiếp qua MATLAB Arduino Support Package):

% --- GIAO TIẾP VÀ ĐIỀU KHIỂN THIẾT BỊ NGOẠI VI TRÊN ARDUINO ---
% Khởi tạo kết nối phần cứng
a = arduino('COM3', 'Uno', 'Libraries', 'Servo');
s = servo(a, 'D9');

switch lower(emotion)
    case 'vui'
        % Mở cửa bằng Servo góc 90 độ
        writePosition(s, 0.5); % 0.5 tương đương góc 90 độ
        writeDigitalPin(a, 'D13', 0); % Tắt đèn
    case 'buon'
        % Bật đèn LED chiếu sáng
        writePosition(s, 0.0); % Đóng cửa (góc 0 độ)
        writeDigitalPin(a, 'D13', 1); % Bật LED D13
    case 'ngacnhien'
        % Đóng cửa và tắt toàn bộ thiết bị
        writePosition(s, 0.0);
        writeDigitalPin(a, 'D13', 0);
end

Kiểm thử và đánh giá hiệu năng

Hệ thống được kiểm thử thực nghiệm trên 2 kịch bản: Kiểm tra với tập ảnh tĩnh lưu trữ sẵn và kiểm tra thời gian thực với luồng video từ webcam máy tính.

Trạng thái cảm xúc Số mẫu thử nghiệm Số mẫu nhận diện đúng Độ chính xác thực nghiệm (%) Thời gian xử lý trung bình (ms)
Vui (Happy) 50 44 88.0% 312 ms
Buồn (Sad) 50 41 82.0% 328 ms
Ngạc nhiên (Surprise) 50 42 84.0% 318 ms
Tổng thể 150 127 84.67% 319.3 ms

Ma trận nhầm lẫn (Confusion Matrix) cho thấy cảm xúc "Vui" đạt độ chính xác cao nhất (88.0%) do đặc trưng mở rộng khóe miệng và cung gò má thể hiện độ biến thiên giá trị điểm ảnh rất rõ ràng trên không gian vector. Cảm xúc "Buồn" có tỷ lệ nhầm lẫn cao nhất (18.0%) với trạng thái bình thường/ngạc nhiên nhẹ khi vùng cơ trán và chân mày không có sự co giãn đủ lớn dưới điều kiện chiếu sáng yếu.


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

  1. Tối ưu hóa kiến trúc tính toán kết hợp (Hybrid Edge-Host Architecture): Dự án không dồn toàn bộ tải xử lý hình ảnh lên vi điều khiển (vốn hạn chế về RAM 2KB), mà thiết lập cơ chế điện toán phân tán: Máy tính chủ chịu trách nhiệm giải ma trận đại số tuyến tính bậc cao ($M \times M$), sau đó chuyển tiếp tín hiệu điều khiển trực tiếp qua giao thức Serial USB đến kit Arduino để kích hoạt cơ cấu chấp hành chỉ trong vòng vài mili-giây.
  2. Nén không gian biểu diễn dữ liệu cực hạn: Bằng cách trích chọn $K$ thành phần chính thay thế cho $N^2 = 480,000$ điểm ảnh ban đầu, thuật toán nén kích thước lưu trữ không gian trạng thái hơn 99.5%, cho phép tính toán khoảng cách Euclidean tức thời với độ phức tạp thuật toán chỉ đạt $\mathcal{O}(K \cdot M)$.
  3. Cơ chế liên kết phần mềm - phần cứng không qua biên dịch trung gian: Việc ứng dụng gói MATLAB Hardware Support Package for Arduino loại bỏ hoàn toàn yêu cầu phải biên dịch lại firmware C/C++ trên Arduino IDE mỗi khi thay đổi giải thuật phân loại, giúp rút ngắn thời gian phát triển và thử nghiệm mẫu (Rapid Prototyping).

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

Kịch bản ứng dụng thực tế

  • Hệ thống kiểm soát ra vào thông minh (Smart Access Control): Tích hợp tại cửa ra vào văn phòng hoặc nhà ở; nhận diện nhân sự với trạng thái tích cực để mở cửa tự động, ghi nhận trạng thái mệt mỏi/căng thẳng để cảnh báo sức khỏe lao động.
  • Hệ thống hỗ trợ chăm sóc bệnh nhân & Người cao tuổi: Giám sát liên tục trạng thái cảm xúc của bệnh nhân tại giường bệnh; khi phát hiện cảm xúc "Buồn" hoặc đau đớn kéo dài, hệ thống tự động kích hoạt chuông báo hoặc điều chỉnh ánh sáng phòng trị liệu.
  • Tự động hóa lớp học thông minh (Smart Classroom Analytics): Đo lường mức độ tập trung và cảm xúc "Ngạc nhiên" / hứng thú của học sinh để đánh giá chất lượng bài giảng trong thời gian thực.

Hướng dẫn thiết lập và triển khai hệ thống

+-----------------------------------------------------------------------------------+
|                        SƠ ĐỒ ĐẤU NỐI PHẦN CỨNG HỆ THỐNG                           |
|                                                                                   |
|     +-------------------------+             +-----------------------+             |
|     |     ARDUINO UNO R3      |             |   TOWERPRO SG90 SERVO |             |
|     |                         |             |                       |             |
|     |              [ 5V ] ----+-------------+-> Dây Đỏ (VCC)        |             |
|     |              [ GND ] ---+------+------+-> Dây Đen (GND)       |             |
|     |              [ D9 ] ----+------+------+-> Dây Vàng (Signal)   |             |
|     |                         |      |      +-----------------------+             |
|     |                         |      |                                            |
|     |                         |      |      +-----------------------+             |
|     |                         |      |      |   MẠCH ĐÈN LED BÁO    |             |
|     |                         |      |      |                       |             |
|     |              [ D13 ] ---+------+------+-> Anode (+) -> [330Ω] |             |
|     |                         |      |                       v      |             |
|     |                         |      +--------> Cathode (-) -+      |             |
|     +-------------------------+             +-----------------------+             |
+-----------------------------------------------------------------------------------+
  1. Kết nối phần cứng:
    • Cắm webcam vào cổng USB máy tính.
    • Kết nối Arduino Uno qua cáp USB Type-B.
    • Nối chân tín hiệu Servo SG90 vào chân D9, chân nguồn 5V và GND của Arduino.
    • Nối Anode LED đỏ/trắng vào chân D13 qua điện trở $330,\Omega$, Cathode nối chân GND chung.
  2. Cấu hình phần mềm:
    • Khởi động MATLAB, cài đặt Hardware Support Package for Arduino.
    • Chạy lệnh kiểm tra cổng giao tiếp: a = arduino();.
    • Mở giao diện GUI_Emotion_Recognition.m, chọn thư mục chứa dữ liệu 390 ảnh để tạo file database.mat.
  3. Vận hành thời gian thực:
    • Nhấn nút Open Camera, đưa khuôn mặt vào khung nhận diện cách 50 cm.
    • Nhấn Result để hệ thống tiền xử lý, tính toán ma trận Eigenfaces, xuất nhãn cảm xúc và tự động điều khiển góc quay Servo / đóng ngắt LED.

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

Hạn chế kỹ thuật

  • Độ nhạy sáng (Illumination Dependency): Do phương pháp PCA dựa trên giá trị cường độ xám của từng điểm ảnh (Pixel Intensity), sự thay đổi cường độ ánh sáng môi trường hoặc bóng râm trên khuôn mặt có thể làm sai lệch giá trị vector riêng.
  • Tư thế khuôn mặt (Pose Variations): Hệ thống chỉ đạt độ chính xác tối ưu khi khuôn mặt hướng trực diện góc $0^\circ \pm 5^\circ$; độ chính xác giảm mạnh khi góc quay đầu vượt quá $15^\circ$.
  • Số lượng trạng thái cảm xúc: Hệ thống mới chỉ phân loại 3 trên tổng số 7 trạng thái cảm xúc cơ bản chuẩn quốc tế (FACS - Facial Action Coding System).

Hướng phát triển trong tương lai

  • Nâng cấp thuật toán tiền xử lý: Bổ sung thuật toán cân bằng biểu đồ mức xám cục bộ (Adaptive Histogram Equalization - CLAHE) để tăng cường độ tương phản và loại bỏ ảnh hưởng của ánh sáng.
  • Chuyển đổi sang hệ thống nhúng biên thuần túy: Triển khai mô hình nơ-ron tích chập thu nhỏ (MobileNetV2 / Tiny-YOLO) trên các kit máy tính nhúng đơn bo (Single-Board Computer) như Raspberry Pi 4 hoặc NVIDIA Jetson Nano để xử lý độc lập không cần máy tính chủ.
  • Mở rộng cơ cấu truyền động: Tích hợp module giao tiếp không dây ESP8266/ESP32 qua giao thức MQTT để điều khiển các thiết bị Smart Home phân tán qua mạng Wi-Fi.

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

  • Sinh viên & Học viên chuyên ngành: Cung cấp tài liệu tham khảo hoàn chỉnh từ mô hình toán học giải tích ma trận (PCA, ma trận hiệp phương sai, vector riêng) đến cách thức liên kết giữa phần mềm mô phỏng và phần cứng thực tế.
  • Kỹ sư thị giác máy tính & Hệ thống nhúng: Sở hữu khung kiến trúc mẫu (Design Pattern) về phân chia tải điện toán giữa hệ thống máy tính máy chủ và vi điều khiển điều khiển cấp thấp với chi phí linh kiện phần cứng dưới 30 USD.
  • Doanh nghiệp & Đơn vị tích hợp giải pháp: Nắm bắt được phương án khả thi để phát triển các module nhận diện hành vi giá rẻ, tối ưu hóa chi phí đầu tư ban đầu cho các hệ thống an ninh và điều khiển tòa nhà thông minh.
  • Nhà nghiên cứu khoa học ứng dụng: Sử dụng bộ số liệu thực nghiệm và ma trận nhầm lẫn của đề tài làm chuẩn so sánh (Baseline) khi phát triển các thuật toán tối ưu hóa không gian con trên tập dữ liệu biểu cảm người châu Á.

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

1. Yêu cầu cấu hình tối thiểu để triển khai hệ thống là gì?

  • Máy tính: CPU Intel Core i3 thế hệ 4 trở lên, 4 GB RAM, hệ điều hành Windows 7/10/11 64-bit, cài đặt MATLAB R2016a trở lên kèm Image Processing Toolbox.
  • Phần cứng: 01 Bo mạch Arduino Uno R3 (hoặc Nano/Mega), 01 Động cơ Servo SG90, 01 USB Webcam độ phân giải tối thiểu 720p (600x800 px active frame), điện trở $330,\Omega$ và LED.

2. Thuật toán PCA có giới hạn gì khi tăng số lượng lớp cảm xúc?

Khi tăng số lớp cảm xúc từ 3 lên 7 (theo chuẩn Ekman: Vui, Buồn, Ngạc nhiên, Giận dữ, Sợ hãi, Ghê tởm, Bình thường), không gian đặc trưng giữa các trạng thái có biên độ thay đổi nhỏ (như Giận dữ và Ghê tởm) sẽ bị chồng lấn (Overlapping). Để mở rộng, cần kết hợp thêm phân tích thành phần phân biệt tuyến tính (Linear Discriminant Analysis - LDA) hoặc mạng nơ-ron học sâu (Deep Neural Networks) để tối đa hóa khoảng cách giữa các lớp khác nhau.

3. Làm thế nào để tích hợp hệ thống với các mạng điều khiển công nghiệp?

Dữ liệu nhãn cảm xúc và cờ trạng thái nhận dạng từ MATLAB có thể được đóng gói theo chuẩn khung truyền UART/Modbus RTU qua cổng RS-485, hoặc xuất dữ liệu qua giao thức TCP/IP, WebSocket để giao tiếp trực tiếp với hệ thống SCADA, PLC hoặc các nền tảng điện toán đám mây như ThingsBoard và AWS IoT.

4. Quy trình bảo trì và hiệu chuẩn hệ thống định kỳ như thế nào?

Cần định kỳ hiệu chuẩn ống kính webcam (lau bụi quang học, kiểm tra tiêu cự), kiểm tra điện áp cấp 5V ổn định cho servo để tránh sụt áp gây reset vi điều khiển ATmega328P. Nếu môi trường ánh sáng thay đổi vĩnh viễn (đổi vị trí lắp đặt), cần thực hiện quy trình chụp lại tập dữ liệu mẫu và chạy lại script tạo ma trận database.mat trong vòng 5-10 phút.

5. Chi phí phần cứng dự toán và thời gian hoàn vốn (ROI) ra sao?

Toàn bộ chi phí linh kiện phần cứng (Arduino Uno, Servo SG90, Webcam, LED, linh kiện thụ động) chỉ dao động trong khoảng 450.000 - 650.000 VNĐ (~20-28 USD). Với mức đầu tư cực thấp so với các hệ thống camera AI chuyên dụng (thường có giá từ 3.000.000 - 10.000.000 VNĐ), hệ thống mang lại hiệu quả chi phí vượt trội và có thể thu hồi vốn đầu tư ngay trong giai đoạn thử nghiệm pilot của dự án.


Kết luận

Đồ án tốt nghiệp "Nhận dạng cảm xúc khuôn mặt người" đã giải quyết trọn vẹn và thực chất chuỗi mắt xích từ lý thuyết toán học xử lý ảnh đến cơ cấu chấp hành phần cứng nhúng:

  • Xây dựng thành công cơ sở dữ liệu 390 ảnh chuẩn hóa và ứng dụng hiệu quả giải thuật biến đổi trực giao PCA - Eigenfaces để giảm chiều dữ liệu.
  • Đạt độ chính xác nhận dạng trung bình thực nghiệm 84.67% trên 3 trạng thái cảm xúc (Vui, Buồn, Ngạc nhiên) với độ trễ phản hồi chỉ ~319 ms.
  • Hoàn thiện hệ thống điều khiển phần cứng thời gian thực, kết nối mượt mà giữa môi trường tính toán MATLAB và vi điều khiển Arduino Uno để điều khiển góc mở cửa servo và trạng thái chiếu sáng LED.

Mô hình mở ra tiềm năng ứng dụng to lớn trong việc xây dựng các thiết bị gia dụng thấu hiểu cảm xúc con người, hệ thống hỗ trợ y tế và lớp học thông minh với chi phí cực kỳ tối ưu. Các lập trình viên, sinh viên và kỹ sư hệ thống có thể kế thừa mã nguồn giải thuật và sơ đồ nguyên lý phần cứng của đồ án để mở rộng sang các bài toán nhận dạng sinh trắc học và tự động hóa phức tạp hơn trong tương lai.