Giới thiệu dự án

Trong kỷ nguyên phát triển mạnh mẽ của Trí tuệ Nhân tạo (AI) và Giao tiếp Người - Máy (Human-Computer Interaction - HCI), khả năng thấu hiểu hành vi và trạng thái tâm lý con người đóng vai trò then chốt. Theo nghiên cứu kinh điển của nhà tâm lý học Albert Mehrabian (1968), trong giao tiếp trực tiếp, ngôn ngữ cơ thể và biểu cảm khuôn mặt chiếm tới 55% hiệu quả truyền tải thông điệp, âm điệu giọng nói chiếm 38%, trong khi từ ngữ chỉ đóng góp 7%. Nhận dạng cảm xúc qua khuôn mặt (Facial Expression Recognition - FER) là bài toán cốt lõi để máy móc có thể tương tác tự nhiên và đồng cảm với người dùng.

                  ┌────────────────────────────────────────┐
                  │   GIAO TIẾP TRỰC TIẾP (Mehrabian, 1968)│
                  └──────────────────┬─────────────────────┘
                                     │
         ┌───────────────────────────┼───────────────────────────┐
         ▼                           ▼                           ▼
┌──────────────────┐       ┌──────────────────┐       ┌──────────────────┐
│  Khuôn mặt &     │       │  Âm điệu &       │       │  Từ ngữ          │
│  Cử chỉ cơ thể   │       │  Giọng nói       │       │  (Verbal)        │
│      55%         │       │      38%         │       │       7%         │
└──────────────────┘       └──────────────────┘       └──────────────────┘

Tuy nhiên, việc triển khai các hệ thống FER trong môi trường thực tế gặp nhiều rào cản kỹ thuật:

  • Biến động ngoại cảnh: Điều kiện ánh sáng thay đổi, góc quay khuôn mặt nghiêng, hiện tượng nhòe chuyển động (motion blur) trong luồng video thời gian thực.
  • Chi phí tính toán cao: Các mô hình Deep Learning truyền thống (như VGG-16, ResNet-50) tiêu tốn tài nguyên phần cứng lớn, khó đạt tốc độ khung hình chuẩn (Real-time $\ge 25\text{ FPS}$) trên các thiết bị phổ thông hoặc hệ thống nhúng không có GPU rời.
  • Độ lệch phân phối dữ liệu (Domain Shift): Các tập dữ liệu chuẩn quốc tế như FER2013 chủ yếu tập trung vào người phương Tây, dẫn đến độ suy giảm chính xác khi áp dụng trực tiếp lên khuôn mặt người Việt Nam.

Đồ án tốt nghiệp "Ứng dụng kỹ thuật nhận dạng cảm xúc qua khuôn mặt" của tác giả Trần Văn Hùng (Khoa Toán - Tin, Trường Đại học Thăng Long, dưới sự hướng dẫn của TS. Nguyễn Công Điều) được nghiên cứu nhằm giải quyết trọn vẹn bài toán trên thông qua việc kết hợp tối ưu giữa thuật toán cổ điển và kiến trúc mạng nơ-ron tích chập hiện đại.

graph TD
    A[Mục tiêu đồ án] --> B[1. Lý thuyết & Nền tảng Toán học]
    A --> C[2. Pipeline Haar Cascade + Mini-Xception]
    A --> D[3. Tập dữ liệu khuôn mặt người Việt]
    A --> E[4. Hệ thống Real-time đa luồng trên PC]

Mục tiêu dự án

  1. Nghiên cứu cơ sở lý thuyết: Hệ thống hóa nền tảng toán học (Đại số tuyến tính, Xác suất thống kê Bayes, Chuẩn ma trận) và cấu trúc mạng nơ-ron tích chập (CNN).
  2. Thiết kế kiến trúc tối ưu: Xây dựng pipeline nhận dạng hai giai đoạn kết hợp thuật toán phát hiện khuôn mặt Haar Cascade (Viola-Jones) và mô hình phân loại cảm xúc Mini-Xception sử dụng tích chập tách rời theo chiều sâu (Depthwise Separable Convolution).
  3. Thu thập và xây dựng Dataset: Xây dựng cơ sở dữ liệu khuôn mặt người Việt (Vietnamese Face Dataset) thông qua cơ chế gán nhãn bán tự động (Semi-supervised labeling).
  4. Phát triển ứng dụng thực tế: Triển khai hệ thống xử lý đa luồng (Multithreading Queue) trên máy tính cá nhân bằng Python, OpenCV và TensorFlow, cho phép phân tích cảm xúc từ webcam với độ trễ thấp.

Phương pháp tiếp cận và kết quả kỳ vọng

  • Phương pháp: Sử dụng kiến trúc tích chập Depthwise Separable Convolution giúp giảm thiểu số lượng tham số học và độ phức tạp tính toán so với tích chập tiêu chuẩn, đồng thời kết hợp cơ chế hàng đợi xử lý đa luồng để khử độ trễ I/O của camera.
  • Chỉ số đo lường kỳ vọng:
    • Độ chính xác trên tập dữ liệu chuẩn quốc tế FER2013: $\ge 70%$.
    • Độ chính xác thực nghiệm trên dữ liệu khuôn mặt người Việt: $70% - 80%$.
    • Tốc độ xử lý luồng video thời gian thực: $\ge 25\text{ FPS}$ trên CPU thương mại.
  • Phạm vi nghiên cứu: Phân loại 6–7 trạng thái cảm xúc cơ bản: Vui vẻ (Happy), Buồn bã (Sad), Ngạc nhiên (Surprise), Sợ hãi (Fear), Giận dữ (Angry), Chán ghét (Disgust) và Bình thường (Neutral).

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

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

Trước khi xây dựng hệ thống, các phương pháp nhận dạng cảm xúc truyền thống và hiện đại đã được phân tích đối sánh chi tiết:

Tiêu chí Phương pháp Truyền thống (SVM + HOG/LBP) Deep CNN Tiêu chuẩn (VGG-16 / ResNet-50) Giải pháp Đề xuất (Haar + Mini-Xception)
Trích xuất đặc trưng Thủ công (Handcrafted features) Tự động qua các lớp tích chập Tự động qua Depthwise Separable Conv
Kích thước mô hình Rất nhỏ ($< 5\text{ MB}$) Rất lớn ($> 100\text{ MB} - 500\text{ MB}$) Siêu nhẹ ($\approx 1.8\text{ MB} - 3.5\text{ MB}$)
Độ chính xác (FER2013) $55.0% - 62.0%$ $72.0% - 75.5%$ $70.5% - 73.2%$
Tốc độ suy luận (CPU) Rất nhanh ($> 40\text{ FPS}$) Chậm ($5 - 10\text{ FPS}$, nghẽn cổ chai) Thời gian thực ($28 - 35\text{ FPS}$)
Khả năng khái quát hóa Kém khi gặp góc nghiêng Tốt nhưng dễ Overfitting dữ liệu nhỏ Tốt, chống Overfitting nhờ Residual + GAP

Phân loại yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc): Phát hiện vị trí khuôn mặt thời gian thực; nhận diện chính xác 6 cảm xúc cơ bản; hỗ trợ webcam 720p/1080p; tốc độ $\ge 25\text{ FPS}$.
  • Should have (Nên có): Cơ chế lọc khử nhòe (Laplacian blur detection); pipeline gán nhãn bán tự động dữ liệu mới; biểu đồ trực quan hóa phân phối xác suất cảm xúc.
  • Could have (Có thể có): Lưu trữ lịch sử chuỗi cảm xúc vào tệp nhật ký CSV/JSON; xuất báo cáo thống kê theo phiên làm việc.
  • Won't have (Chưa hỗ trợ): Tích hợp nhận diện biểu cảm vi mô (Micro-expressions); nhận dạng cảm xúc từ âm thanh/giọng nói.

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc module hóa kết hợp luồng xử lý không đồng bộ (Producer-Consumer Pattern) để tối đa hóa hiệu năng.

graph LR
    subgraph Capture Thread
        A[Webcam / Video Source] -->|Capture Frame| B[Frame Buffer Queue]
    end

    subgraph Processing Thread
        B -->|Pop Frame| C[Face Detection - Haar Cascade]
        C -->|Crop & Grayscale 48x48| D[Data Preprocessing & Normalization]
        D -->|Inference| E[Mini-Xception CNN Model]
        E -->|Softmax Probability| F[Emotion Classifier]
    end

    subgraph UI & Storage
        F -->|Render Bounding Box & Label| G[Display Screen]
        F -->|Save Frame to Class Folder| H[Vietnamese Dataset Storage]
    end

Technology Stack & Môi trường thực nghiệm

  • Ngôn ngữ: Python 3.8.12
  • Framework Học sâu: TensorFlow 2.8.0 / Keras 2.8.0
  • Thị giác máy tính: OpenCV (opencv-python) 4.5.5.64
  • Tính toán khoa học: NumPy 1.21.6, SciPy 1.7.3, Scikit-learn 1.0.2
  • Môi trường phát triển: Anaconda Navigator, Jupyter Notebook, Visual Studio Code
+-----------------------------------------------------------------------+
|                           HỆ THỐNG PHẦN MỀM                           |
+-----------------------------------+-----------------------------------+
|  Tầng Ứng Dụng (Application Layer)| OpenCV GUI, Video Stream Renderer |
+-----------------------------------+-----------------------------------+
|  Tầng Mô Hình (Inference Layer)   | Mini-Xception, Softmax Classifier |
+-----------------------------------+-----------------------------------+
|  Tầng Thị Giác (Vision Layer)     | Haar Cascade, Bilateral Filter    |
+-----------------------------------+-----------------------------------+
|  Tầng Nền Tảng (Core Layer)       | Python 3.8, TensorFlow 2.8, NumPy |
+-----------------------------------+-----------------------------------+

Cân nhắc An toàn & Bảo mật

Hệ thống xử lý trực tiếp hình ảnh tại máy trạm cục bộ (Edge/Local Computing), không gửi luồng video thô (Raw Video) lên máy chủ đám mây, đảm bảo tuân thủ quyền riêng tư dữ liệu cá nhân theo tiêu chuẩn bảo vệ dữ liệu.

Phương pháp nghiên cứu (Methodology)

Dự án áp dụng mô hình phát triển lặp từng bước (Iterative & Agile Methodology) kéo dài trong 12 tuần với các mốc đánh giá rủi ro rõ ràng:

gantt
    title Kế hoạch triển khai dự án (12 tuần)
    dateFormat  YYYY-MM-DD
    section Giai đoạn 1
    Nghiên cứu lý thuyết & Toán học :2022-01-01, 14d
    section Giai đoạn 2
    Tiền xử lý FER2013 & Xây dựng CNN Baseline :2022-01-15, 21d
    section Giai đoạn 3
    Tối ưu Mini-Xception & Haar Cascade :2022-02-05, 21d
    section Giai đoạn 4
    Thu thập dữ liệu VN & Gán nhãn bán tự động :2022-02-26, 14d
    section Giai đoạn 5
    Tích hợp đa luồng, Thử nghiệm & Đánh giá :2022-03-12, 14d

Quản trị rủi ro kỹ thuật

  • Rủi ro Overfitting trên FER2013: Áp dụng Data Augmentation (xoay ảnh ngẫu nhiên, lật ngang, co giãn $\pm 10%$) và Dropout ($p=0.5$), kết hợp lớp Global Average Pooling thay thế hoàn toàn Fully Connected layers truyền thống.
  • Rủi ro nghẽn luồng xử lý thời gian thực: Sử dụng threading.Thread và module queue.Queue tách biệt luồng đọc camera và luồng tính toán AI.

Implementation và kết quả

Quá trình phát triển & Thuật toán then chốt

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

Viola-Jones sử dụng các đặc trưng hình chữ nhật dạng Haar kết hợp biểu diễn Hình ảnh tích phân (Integral Image) để tính tổng các giá trị điểm ảnh trong bất kỳ vùng chữ nhật nào với độ phức tạp $O(1)$:

$$ii(x, y) = \sum_{x' \le x, y' \le y} i(x', y')$$

Để tính tổng điểm ảnh trong vùng chữ nhật $D = [x_1, x_2] \times [y_1, y_2]$:

$$\text{Sum}(D) = ii(x_2, y_2) - ii(x_1-1, y_2) - ii(x_2, y_1-1) + ii(x_1-1, y_1-1)$$

Thuật toán huấn luyện AdaBoost kết hợp hàng loạt bộ phân loại yếu (Weak Classifiers) $h_j(x)$ thành một bộ phân loại mạnh (Strong Classifier):

$$H(x) = \text{sign}\left(\sum_{t=1}^T \alpha_t h_t(x)\right), \quad \alpha_t = \frac{1}{2} \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right)$$

Trọng số mẫu dữ liệu được cập nhật qua từng vòng lặp $t$:

$$D_{t+1}(i) = \frac{D_t(i) \exp\left(-\alpha_t y_i h_t(x_i)\right)}{Z_t}$$

Trong đó $Z_t$ là hằng số chuẩn hóa để $\sum_i D_{t+1}(i) = 1$.

+------------------+------------------+
|  Vùng A          |  Vùng B          |
|  (ii(x1, y1))    |  (ii(x2, y1))    |
+------------------+------------------+
|  Vùng C          |  Vùng D (Target) |
|  (ii(x1, y2))    |  (ii(x2, y2))    |
+------------------+------------------+
Sum(D) = ii(x2,y2) - ii(x1,y2) - ii(x2,y1) + ii(x1,y1)

2. Tích chập tách rời theo chiều sâu (Depthwise Separable Convolution)

Kiến trúc Mini-Xception thay thế tích chập chuẩn 2D bằng 2 bước:

  1. Depthwise Convolution: Áp dụng 1 bộ lọc $D_K \times D_K$ độc lập cho từng kênh đầu vào ($M$ kênh).
  2. Pointwise Convolution: Áp dụng tích chập $1 \times 1$ qua tất cả các kênh để tạo ra $N$ kênh đầu ra.

Tỷ lệ tối ưu chi phí tính toán:

$$\text{Tỷ lệ} = \frac{D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_F \cdot D_F}{D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F} = \frac{1}{N} + \frac{1}{D_K^2}$$

Với bộ lọc chuẩn $3 \times 3$ ($D_K = 3$) và số kênh đầu ra $N$ lớn, khối lượng tính toán giảm xấp xỉ 8 đến 9 lần ($\approx \frac{1}{9}$ chi phí tính toán thông thường).

import tensorflow as tf
from tensorflow.keras.layers import (Input, Conv2D, BatchNormalization, 
                                     Activation, SeparableConv2D, 
                                     MaxPooling2D, GlobalAveragePooling2D)
from tensorflow.keras.models import Model
from tensorflow.keras.regularizers import l2

def build_mini_xception(input_shape=(48, 48, 1), num_classes=7, l2_reg=0.01):
    """
    Xây dựng kiến trúc Mini-Xception siêu nhẹ cho bài toán FER
    """
    img_input = Input(shape=input_shape)
    
    # Khối Base Convolution đầu vào
    x = Conv2D(8, (3, 3), strides=(1, 1), kernel_regularizer=l2(l2_reg), use_bias=False)(img_input)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = Conv2D(8, (3, 3), strides=(1, 1), kernel_regularizer=l2(l2_reg), use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    
    # Các khối Residual Depthwise Separable Convolution
    for filters in [16, 32, 64, 128]:
        residual = Conv2D(filters, (1, 1), strides=(2, 2), padding='same', use_bias=False)(x)
        residual = BatchNormalization()(residual)
        
        x = SeparableConv2D(filters, (3, 3), padding='same', kernel_regularizer=l2(l2_reg), use_bias=False)(x)
        x = BatchNormalization()(x)
        x = Activation('relu')(x)
        x = SeparableConv2D(filters, (3, 3), padding='same', kernel_regularizer=l2(l2_reg), use_bias=False)(x)
        x = BatchNormalization()(x)
        
        x = MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x)
        x = tf.keras.layers.add([x, residual])
        
    # Tầng phân loại đầu ra
    x = Conv2D(num_classes, (3, 3), padding='same')(x)
    x = GlobalAveragePooling2D()(x)
    output = Activation('softmax', name='predictions')(x)
    
    model = Model(img_input, output, name='mini_XCEPTION')
    return model

3. Pipeline xử lý Video Đa luồng & Khử mờ nhòe (Blur Handling)

Để khắc phục hiện tượng tụt FPS do độ trễ đọc camera, luồng thu thập và luồng nhận diện được đồng bộ qua hàng đợi an toàn thread-safe:

import cv2
import threading
import queue

class VideoStreamQueue:
    def __init__(self, src=0):
        self.stream = cv2.VideoCapture(src)
        self.q = queue.Queue(maxsize=2)
        self.stopped = False
        self.thread = threading.Thread(target=self.update, args=())
        self.thread.daemon = True

    def start(self):
        self.thread.start()
        return self

    def update(self):
        while not self.stopped:
            if not self.q.full():
                ret, frame = self.stream.read()
                if not ret:
                    self.stop()
                    break
                self.q.put(frame)

    def read(self):
        return self.q.get() if not self.q.empty() else None

    def stop(self):
        self.stopped = True
        self.stream.release()

def is_frame_blurry(image, threshold=100.0):
    """Đánh giá độ mờ nhòe khung hình bằng phương sai toán tử Laplace"""
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    variance_of_laplacian = cv2.Laplacian(gray, cv2.CV_64F).var()
    return variance_of_laplacian < threshold

Thử nghiệm và đánh giá (Testing & Validation)

Hệ thống được huấn luyện trên tập dữ liệu chuẩn FER2013 gồm 35,887 ảnh thang độ xám kích thước $48 \times 48$ pixel và kiểm thử thực tế trên tập Vietnamese Face Dataset (1,500 ảnh thu thập đa dạng góc chụp).

Ma trận nhầm lẫn và Chỉ số hiệu năng (Confusion Matrix Metrics)

$$\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}, \quad \text{Precision} = \frac{TP}{TP + FP}$$

$$\text{Recall} = \frac{TP}{TP + FN}, \quad F_1\text{-Score} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}$$

Nhãn Cảm xúc Số lượng mẫu (Test) Precision (%) Recall (%) F1-Score (%)
Hạnh phúc (Happy) 1,774 88.4% 89.1% 88.7%
Ngạc nhiên (Surprise) 831 81.2% 82.5% 81.8%
Bình thường (Neutral) 1,233 71.5% 72.3% 71.9%
Buồn bã (Sad) 1,247 62.8% 60.1% 61.4%
Giận dữ (Angry) 958 63.4% 61.7% 62.5%
Sợ hãi (Fear) 1,024 56.7% 53.2% 54.9%
Chán ghét (Disgust) 111 68.2% 64.0% 66.0%
Trung bình toàn cục (Macro Avg) 7,178 70.3% 69.0% 69.6%
                MA TRẬN NHẬM LẪN (TÓM TẮT XU HƯỚNG DỰ ĐOÁN)
                ------------------------------------------
                Thực tế \ Dự đoán   Tích cực (Happy/Surprise)   Tiêu cực (Sad/Angry/Fear)
                Tích cực                      [ 88.5% ]                  [ 11.5% ]
                Tiêu cực                      [ 14.2% ]                  [ 85.8% ]

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

Mục tiêu ban đầu Kết quả thực tế đạt được Đánh giá
Độ chính xác FER2013 $> 70%$ $71.8%$ trên tập Test unseen Đạt vượt chỉ tiêu (+1.8%)
Nhận diện khuôn mặt người Việt ($70% - 80%$) $75.4%$ độ chính xác trung bình Hoàn thành xuất sắc mục tiêu
Tốc độ khung hình $\ge 25\text{ FPS}$ $28.5 - 32.0\text{ FPS}$ (Core i5, No GPU) Đảm bảo trải nghiệm mượt mà
Cơ chế gán nhãn dữ liệu thực tế Hoàn thiện pipeline bán tự động Giảm 65% thời gian tạo dataset

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

graph TD
    subgraph Đóng góp cốt lõi
        A[Mini-Xception + Residual Blocks] --> D[Giảm 88% tham số tính toán]
        B[Xử lý luồng Video bất đồng bộ] --> E[Ổn định 30 FPS trên CPU thường]
        C[Pipeline Gán nhãn Bán tự động] --> F[Xây dựng Dataset chuẩn người Việt]
    end
  1. Cải tiến kiến trúc mạng gọn nhẹ: Ứng dụng thành công cấu trúc Residual Depthwise Separable Convolutions thay thế toàn bộ mạng tích chập tiêu chuẩn, giúp giảm kích thước mô hình xuống chỉ còn $1.8\text{ MB}$ (so với $138\text{ MB}$ của VGG-16), loại bỏ hoàn toàn các lớp Dense dễ gây Overfitting bằng lớp Global Average Pooling.
  2. Cơ chế gán nhãn dữ liệu bán tự động (Semi-Supervised Active Bootstrap): Thiết lập pipeline tự động phát hiện khuôn mặt, lọc khung hình mờ (Laplacian threshold $< 100$), dự đoán nhãn cảm xúc sơ bộ kèm độ tin cậy ($> 85%$) và phân loại tự động vào các thư mục tương ứng để chuyên viên hậu kiểm, tăng tốc độ mở rộng dữ liệu lên $280%$.
  3. Kỹ thuật xử lý luồng khử nghẽn cổ chai (Zero I/O Lag Pipeline): Tách biệt hoàn toàn luồng phần cứng Camera Capture và luồng AI Inference qua cấu trúc hàng đợi Queue(maxsize=2), triệt tiêu hiện tượng giật lag khung hình khi vận hành liên tục.
  4. Đóng góp học thuật & Ứng dụng thực tiễn: Cung cấp mã nguồn mở, tài liệu đối sánh chuyên sâu về hiệu năng toán học giữa phương pháp SVM truyền thống và CNN hiện đại cho sinh viên và kỹ sư nghiên cứu trong lĩnh vực Computer Vision.

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

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

+-------------------------------------------------------------------------------+
|                          HỆ SINH THÁI ỨNG DỤNG THỰC TẾ                        |
+-----------------------+-------------------------------+-----------------------+
|  1. GIÁO DỤC TRỰC TUYẾN|  2. BÁN LẺ & MARKETING         |  3. Y TẾ & TÂM LÝ     |
|  - Đo độ tập trung    |  - Đo phản ứng với quảng cáo  |  - Hỗ trợ bệnh nhân câm|
|  - Cảnh báo buồn ngủ  |  - Đánh giá trải nghiệm tại quầy| - Đánh giá stress     |
+-----------------------+-------------------------------+-----------------------+
  1. EdTech & Đào tạo trực tuyến: Đo lường mức độ tập trung, hứng thú hoặc chán nản của học viên theo thời gian thực trong các lớp học trực tuyến; hỗ trợ giảng viên điều chỉnh phương pháp sư phạm kịp thời.
  2. Nghiên cứu thị trường & Bán lẻ (Retail Analytics): Đặt camera tại quầy trải nghiệm sản phẩm hoặc trước biển quảng cáo thông minh để đo lường tỷ lệ hài lòng (Happy rate) thực tế của khách hàng đối với từng dòng sản phẩm.
  3. Y tế & Chăm sóc sức khỏe tâm thần: Hỗ trợ chẩn đoán và theo dõi mức độ căng thẳng, trầm cảm mãn tính của bệnh nhân gặp trở ngại trong giao tiếp ngôn ngữ.

Yêu cầu hệ thống và Triển khai

+-------------------+---------------------------------------------------+
| THÀNH PHẦN        | YÊU CẦU TỐI THIỂU                                 |
+-------------------+---------------------------------------------------+
| CPU               | Intel Core i3 thế hệ 6 / AMD Ryzen 3 trở lên     |
| RAM               | Tối thiểu 4 GB (Khuyến nghị 8 GB)                 |
| Camera            | Webcam độ phân giải HD 720p @ 30 FPS             |
| Hệ điều hành      | Linux (Ubuntu 18.04+) / Windows 10/11 / macOS     |
| Môi trường chạy   | Python 3.8+ kèm TensorFlow, OpenCV-Python         |
+-------------------+---------------------------------------------------+

Hướng dẫn cài đặt và vận hành 3 bước

# Bước 1: Tạo môi trường ảo và cài đặt thư viện
conda create -n fer_env python=3.8 -y
conda activate fer_env
pip install tensorflow==2.8.0 opencv-python==4.5.5.64 numpy==1.21.6 scikit-learn

# Bước 2: Tải trọng số mô hình đã huấn luyện
# Đảm bảo tệp trọng số 'mini_xception_fer2013.h5' và 'haarcascade_frontalface_default.xml' nằm trong thư mục models/

# Bước 3: Chạy chương trình nhận dạng thời gian thực từ Webcam
python realtime_fer_multithread.py --cam 0 --conf 0.65

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

Hạn chế kỹ thuật hiện tại

  • Góc nghiêng lớn và Che khuất (Occlusion): Thuật toán Haar Cascade giảm độ chính xác khi góc quay khuôn mặt nghiêng quá $45^\circ$ hoặc khi người dùng đeo khẩu trang, kính râm.
  • Biểu cảm phức tạp (Mixed Emotions): Mô hình hiện tại phân loại theo lớp đơn (Single-label softmax), chưa hỗ trợ phân tích đa nhãn cho các biểu cảm hỗn hợp (ví dụ: vừa bất ngờ vừa lo lắng).
  • Cân bằng dữ liệu (Imbalanced Data): Lớp cảm xúc "Chán ghét" (Disgust) trong tập FER2013 có số lượng mẫu rất thấp (chỉ chiếm $< 2%$ tổng dữ liệu), ảnh hưởng đến khả năng hội tụ của lớp này.

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

  1. Chuyển đổi Detector hiện đại: Thay thế Haar Cascade bằng MTCNN hoặc MediaPipe BlazeFace để nâng cao khả năng phát hiện khuôn mặt đa góc độ và định vị điểm mốc (Landmarks).
  2. Ứng dụng Kiến trúc Transformer (Vision Transformer - ViT): Thử nghiệm mô hình MobileViT nhằm tận dụng cơ chế Self-Attention để khai thác tương quan không gian toàn cục trên khuôn mặt.
  3. Đóng gói đa nền tảng: Chuyển đổi mô hình sang định dạng ONNX và TensorFlow Lite (TFLite) để triển khai trực tiếp trên ứng dụng di động Android/iOS và vi điều khiển nhúng Raspberry Pi.

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

+-----------------------------------------------------------------------+
|                       ĐỐI TƯỢNG HƯỞNG LỢI                             |
+-------------------+---------------------------------------------------+
| Sinh viên /       | Nguồn tài liệu học tập toàn diện về Computer       |
| Nghiên cứu sinh   | Vision, kết nối từ toán học đến triển khai code.  |
+-------------------+---------------------------------------------------+
| Lập trình viên    | Thiết kế mẫu kiến trúc nhẹ Mini-Xception và       |
| (Developers)      | kỹ thuật đa luồng xử lý Video tối ưu.             |
+-------------------+---------------------------------------------------+
| Doanh nghiệp      | Giải pháp chi phí thấp (Zero GPU Cost), tích hợp  |
| (Businesses)      | dễ dàng vào hệ thống camera an ninh/giám sát.     |
+-------------------+---------------------------------------------------+
  • Sinh viên & Học viên CNTT: Tiếp cận giáo trình thực hành chuẩn chỉ, hiểu rõ cách chuyển hóa các công thức toán học ma trận, đạo hàm và tích chập thành mã nguồn thực thi.
  • Kỹ sư Trí tuệ Nhân tạo: Nắm bắt kỹ thuật tối ưu hóa mô hình nhúng (Model Quantization & Pruning concepts), xử lý bài toán nghẽn luồng I/O trong xử lý ảnh.
  • Doanh nghiệp vừa và nhỏ (SMEs): Khả năng thương mại hóa hệ thống phân tích cảm xúc khách hàng mà không cần đầu tư hạ tầng máy chủ GPU đắt đỏ, tiết kiệm tới $80%$ chi phí vận hành đám mây.

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

1. Hệ thống có thể chạy trên máy tính không có card đồ họa rời (GPU) không?

Hoàn toàn được. Nhờ sử dụng mạng Mini-Xception kết hợp tích chập Depthwise Separable Convolution và xử lý đa luồng, mô hình chỉ tiêu tốn khoảng $15 - 25%$ năng lực xử lý của CPU Intel Core i5 thông thường và đạt tốc độ mượt mà từ $28 - 32\text{ FPS}$.

2. Làm thế nào để khắc phục hiện tượng nhận diện nhầm cảm xúc trong điều kiện thiếu sáng?

Có thể bổ sung bước tiền xử lý cân bằng độ sáng tự động bằng thuật toán Histogram Equalization (hoặc CLAHE - Contrast Limited Adaptive Histogram Equalization) trong OpenCV trước khi đưa khuôn mặt vào mạng phân loại:

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
face_enhanced = clahe.apply(face_gray_48x48)

3. Tại sao không sử dụng các mạng mạnh hơn như ResNet-101 hay EfficientNet-B7?

Các kiến trúc lớn như ResNet-101 chứa hàng chục triệu tham số ($> 44\text{ triệu}$ parameters), đòi hỏi băng thông tính toán lớn và gây độ trễ suy luận cao ($> 120\text{ ms/frame}$ trên CPU), dẫn đến hiện tượng đứng hình (Lagging) trong các ứng dụng tương tác thời gian thực. Mini-Xception chỉ có khoảng $\approx 60,000$ tham số, tạo sự cân bằng hoàn hảo giữa độ chính xác và tốc độ.

4. Hệ thống có bảo mật thông tin hình ảnh người dùng không?

Toàn bộ quy trình từ thu nhận khung hình, cắt khuôn mặt đến phân loại cảm xúc đều được thực thi nội bộ trong bộ nhớ RAM của thiết bị (In-Memory Processing). Không có bất kỳ dữ liệu hình ảnh nào được lưu trữ cố định hay truyền tải qua Internet nếu không có sự cho phép chủ động của người dùng.

5. Chi phí ước tính và thời gian hoàn vốn (ROI) khi ứng dụng giải pháp này cho doanh nghiệp?

Chi phí triển khai phần mềm gần như bằng $0$ (sử dụng mã nguồn mở). Doanh nghiệp chỉ cần tận dụng hệ thống camera hoặc máy tính sẵn có. Đối với cửa hàng bán lẻ, việc tối ưu trải nghiệm khách hàng nhờ dữ liệu cảm xúc có thể giúp tăng tỷ lệ chuyển đổi đơn hàng thêm $10 - 15%$, mang lại thời gian hoàn vốn đầu tư trong vòng 1 đến 3 tháng.


Kết luận

Đồ án tốt nghiệp "Ứng dụng kỹ thuật nhận dạng cảm xúc qua khuôn mặt" của tác giả Trần Văn Hùng đã giải quyết xuất sắc bài toán cân bằng giữa độ chính xác học máy và tốc độ thực thi thời gian thực. Bằng việc kết hợp hài hòa giữa bộ phát hiện khuôn mặt Haar Cascade và mạng nơ-ron tích chập Mini-Xception cải tiến, công trình đã minh chứng tính khả thi vượt trội của các mô hình Deep Learning siêu nhẹ trên thiết bị phần cứng phổ thông.

Công trình không chỉ đạt kết quả thực nghiệm ấn tượng trên tập chuẩn quốc tế FER2013 ($71.8%$) và tập dữ liệu người Việt ($75.4%$), mà còn mở ra tiềm năng ứng dụng rộng lớn trong các ngành công nghiệp EdTech, Bán lẻ thông minh và Y tế số.