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

Lý do chọn đề tài và bối cảnh thực tiễn

Trong những năm gần đây, kỹ thuật xử lý ảnh số phát triển nhanh chóng và được ứng dụng sâu rộng trong nhiều lĩnh vực như an ninh, quân sự, y sinh học, robotics và các hệ thống tương tác người - máy thông minh. Bên cạnh các phương thức sinh trắc học truyền thống như nhận dạng giọng nói, chữ viết, dấu vân tay hay mống mắt, nhận dạng biểu cảm khuôn mặt giữ vai trò đặc biệt quan trọng trong việc nắm bắt trạng thái tâm lý con người. Theo nghiên cứu tâm lý học của Albert Mehrabian (1968), trong quá trình giao tiếp trực tiếp, thông điệp ngôn ngữ (từ ngữ) chỉ đóng góp 7% tác động, âm lượng và ngữ điệu giọng nói chiếm 38%, trong khi ngôn ngữ cơ thể và biểu cảm nét mặt chiếm tới 55%.

Xuất phát từ nhu cầu phát triển các hệ thống tự động hóa có khả năng hiểu được trạng thái cảm xúc của người dùng mà không cần thiết bị điều khiển trung gian, đồ án tốt nghiệp tập trung nghiên cứu bài toán "Nhận dạng cảm xúc khuôn mặt người" bằng phương pháp xử lý ảnh kết hợp điều khiển cơ cấu chấp hành phần cứng.

Mục tiêu và nhiệm vụ nghiên cứu

Đồ án hướng tới mục tiêu xây dựng một hệ thống hoàn chỉnh có khả năng thu nhận hình ảnh khuôn mặt, tiền xử lý, trích chọn đặc trưng, nhận dạng trạng thái cảm xúc và truyền dữ liệu điều khiển xuống phần cứng thực thi.

Các nhiệm vụ nghiên cứu cụ thể được xác định bao gồm:

  1. Khảo sát và tổng hợp tài liệu chuyên môn về các kỹ thuật nhận dạng khuôn mặt, trọng tâm là phương pháp phân tích thành phần chính (PCA - Principal Component Analysis) và thuật toán Eigenfaces.
  2. Thiết kế và thu thập bộ cơ sở dữ liệu ảnh mẫu gồm 3 trạng thái cảm xúc cơ bản: vui, buồn và ngạc nhiên.
  3. Xây dựng chương trình xử lý ảnh trên môi trường MATLAB để huấn luyện dữ liệu và nhận dạng ảnh khuôn mặt từ hai nguồn: tập tin ảnh tĩnh có sẵn và luồng ảnh trực tiếp từ webcam.
  4. Cài đặt các gói hỗ trợ phần cứng (Hardware Support Package) trên MATLAB nhằm giao tiếp và truyền nhận dữ liệu với kit vi điều khiển Arduino Uno qua giao thức nối tiếp/USB.
  5. Thi công mạch phần cứng điều khiển bao gồm vi điều khiển Arduino Uno, động cơ servo SG90 và hệ thống đèn LED chỉ thị.
  6. Thiết lập kịch bản điều khiển thiết bị tương ứng với kết quả nhận dạng cảm xúc:
    • Cảm xúc vui (cười): Điều khiển động cơ servo quay góc mở cửa.
    • Cảm xúc buồn (không cười): Điều khiển bật đèn LED.
    • Cảm xúc ngạc nhiên: Điều khiển động cơ servo đóng cửa và tắt đèn LED.
  7. Chạy thử nghiệm, thống kê độ chính xác, đánh giá hiệu năng và viết tài liệu hướng dẫn vận hành hệ thống.

Đối tượng và phạm vi nghiên cứu

  • Đối tượng nghiên cứu: Các đặc trưng hình học và cường độ điểm ảnh trên khuôn mặt người (trọng tâm là khu vực mắt, mũi và miệng) tương ứng với 3 trạng thái biểu cảm: vui, buồn, ngạc nhiên.
  • Phạm vi dữ liệu: Bộ dữ liệu tự xây dựng gồm 390 ảnh (130 ảnh cảm xúc vui, 130 ảnh cảm xúc buồn, 130 ảnh cảm xúc ngạc nhiên).
  • Phạm vi kỹ thuật và môi trường thực nghiệm:
    • Thu nhận ảnh thông qua webcam máy tính chuẩn RGB, khoảng cách thu nhận tối ưu là 50 cm trực diện, trong điều kiện ánh sáng ổn định (không quá tối hoặc quá chói).
    • Thuật toán xử lý và nhận dạng được lập trình trên phần mềm MATLAB.
    • Khối điều khiển thực thi sử dụng kit vi điều khiển Arduino Uno R3 (chip ATmega328P) kết nối trực tiếp với máy tính.

Cơ sở lý thuyết và phương pháp nghiên cứu

Khung lý thuyết và mô hình toán học

Đồ án ứng dụng phương pháp Phân tích thành phần chính (Principal Component Analysis - PCA) kết hợp kỹ thuật Eigenfaces (được phát triển bởi Turk và Pentland) để giảm số chiều không gian dữ liệu và trích chọn vector đặc trưng khuôn mặt.

Quy trình toán học của thuật toán Eigenfaces trong đề tài được triển khai qua các bước:

  1. Chuẩn hóa dữ liệu đầu vào: Tập hợp $M$ ảnh huấn luyện được chuyển đổi thành các vector cột $\Gamma_i$ kích thước $N^2 \times 1$ (với $N \times N$ là số điểm ảnh).
  2. Tính vector khuôn mặt trung bình ($\Psi$): $$\Psi = \frac{1}{M} \sum_{i=1}^{M} \Gamma_i$$
  3. Tính vector sai phân ($\Phi_i$): $$\Phi_i = \Gamma_i - \Psi$$ Tập hợp các vector sai phân tạo thành ma trận $A = [\Phi_1, \Phi_2, \dots, \Phi_M]$ kích thước $N^2 \times M$.
  4. Tính ma trận hiệp phương sai ($C$): $$C = \frac{1}{M} \sum_{n=1}^{M} \Phi_n \Phi_n^T = A \cdot A^T \quad (\text{kích thước } N^2 \times N^2)$$ Để tối ưu khối lượng tính toán khi $N^2 \gg M$, thuật toán tìm các vector riêng $v_i$ của ma trận phụ $L = A^T \cdot A$ (kích thước $M \times M$). Từ đó, các vector riêng $u_i$ của ma trận $C$ (Eigenfaces) được suy ra theo công thức: $$u_i = A \cdot v_i$$ Các vector $u_i$ sau đó được chuẩn hóa sao cho $|u_i| = 1$.
  5. Chọn lọc $K$ thành phần chính: Sắp xếp các giá trị riêng (eigenvalues) theo thứ tự giảm dần và chọn ra $K$ vector riêng ($K \le M$) có độ biến thiên lớn nhất để tạo thành không gian con Eigenfaces.
  6. Biểu diễn ảnh vào không gian vector: Mỗi ảnh khuôn mặt được chiếu vào không gian đặc trưng tạo thành vector trọng số $\Omega = [\omega_1, \omega_2, \dots, \omega_K]^T$.
  7. Phân loại cảm xúc: Ảnh cần nhận dạng sau khi chiếu vào không gian Eigenfaces sẽ được so sánh với các vector mẫu bằng khoảng cách Euclid ($e_r$): $$e_r = |\Omega - \Omega_k|$$ Nhãn cảm xúc của ảnh kiểm tra được gán theo ảnh mẫu trong tập huấn luyện có khoảng cách Euclid nhỏ nhất.

Phương pháp nghiên cứu và công cụ thực tế

  • Thu thập và tiền xử lý ảnh: Sử dụng các hàm xử lý ảnh chuyên dụng trong Image Processing Toolbox của MATLAB để chuyển đổi ảnh màu sang ảnh mức xám (rgb2gray), cân bằng kích thước ảnh (imresize), và xác định vùng đặc trưng khuôn mặt, miệng (regionprops).
  • Trích chọn đặc trưng và phân loại: Sử dụng hàm princomp(X, 'econ') cùng các thuật toán đại số tuyến tính trên ma trận để trích xuất trị riêng, vector riêng và tính toán khoảng cách vector.
  • Giao tiếp phần cứng: Cài đặt gói MATLAB Support Package for Arduino Hardware và MATLAB Support Package for USB Webcams để điều khiển thiết bị ngoại vi và thu nhận khung hình trực tiếp qua lệnh phần mềm.

Thiết kế và triển khai hệ thống

Kiến trúc tổng thể và sơ đồ khối

Hệ thống được thiết kế theo mô hình tích hợp phần mềm - phần cứng khép kín gồm 5 khối chức năng chính:

Khối chức năng Phần cứng / Module sử dụng Chức năng thực hiện
Khối thu nhận ảnh Webcam máy tính Thu nhận tín hiệu hình ảnh trực tiếp hoặc đọc file ảnh lưu trữ
Khối xử lý trung tâm (PC) Máy tính chạy phần mềm MATLAB Tiền xử lý, trích xuất đặc trưng PCA, so sánh phân loại và xuất lệnh điều khiển
Khối điều khiển Kit vi điều khiển Arduino Uno (ATmega328P) Tiếp nhận tín hiệu từ MATLAB qua cổng USB, xuất xung PWM và mức logic điều khiển
Khối cơ cấu chấp hành Động cơ Servo SG90, 4 Đèn LED (trắng, đỏ) Thực thi hành động đóng/mở cửa mô phỏng và bật/tắt đèn chiếu sáng
Khối nguồn Nguồn 5V từ cổng USB / Adapter ngoài Cung cấp điện áp hoạt động cho mạch Arduino, servo và đèn LED

Thiết kế phần cứng và đấu nối mạch

  1. Kết nối Arduino với Động cơ Servo SG90:
    • Dây đỏ (VCC): Nối chân nguồn 5V của Arduino.
    • Dây đen (GND): Nối chân 0V (GND) của Arduino.
    • Dây vàng (Signal): Nối chân xuất xung PWM (chân có ký hiệu ~) trên board Arduino.
  2. Kết nối Arduino với Đèn LED:
    • Cực dương (Anode) của LED nối với chân Digital Output của Arduino.
    • Cực âm (Cathode) nối qua điện trở hạn dòng $R$ về chân GND.
    • Công thức tính toán điện trở hạn dòng: $$R = \frac{V_{cc} - V_{led}}{I} = \frac{5\text{V} - 0{,}7\text{V}}{15\text{mA}} \approx 286{,}67\ \Omega$$ (Sử dụng điện trở tiêu chuẩn để đảm bảo LED hoạt động ở dòng danh định 15mA).

Triển khai phần mềm và giao diện điều khiển

Hệ thống được xây dựng với giao diện đồ họa người dùng (GUI) trên nền MATLAB, tích hợp các nút điều khiển và hiển thị:

  • Open Camera: Khởi động kết nối và mở luồng thu hình từ webcam (preview).
  • Show Image: Chụp và giữ khung hình tĩnh hiện tại (snapshot).
  • Add Image: Mở hộp thoại chọn tập tin ảnh có sẵn trong thư mục máy tính.
  • Axes1 & Axes2: Hai khung hiển thị hình ảnh trực tiếp từ webcam và ảnh sau khi xử lý cắt vùng đặc trưng.
  • Open Data: Nạp tập tin cơ sở dữ liệu huấn luyện (file định dạng .mat).
  • Result: Thực hiện thuật toán nhận dạng và hiển thị kết quả cảm xúc (Vui / Buồn / Ngạc nhiên) lên bảng kết quả, đồng thời truyền tín hiệu điều khiển xuống kit Arduino qua tập lệnh giao tiếp arduino.
  • Close: Giải phóng camera, ngắt kết nối cổng COM và thoát chương trình.

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

Chương 1: Tổng quan

Chương 1 trình bày tính cấp thiết của đề tài trong bối cảnh công nghệ xử lý ảnh và tương tác người - máy đang phát triển mạnh mẽ. Tác giả dẫn chứng nghiên cứu của Mehrabian (1968) về tầm quan trọng của ngôn ngữ cơ thể (chiếm 55% tác động truyền tải thông điệp) để khẳng định giá trị của việc nhận dạng nét mặt. Chương này xác định rõ mục tiêu chế tạo hệ thống nhận dạng 3 trạng thái cảm xúc (vui, buồn, ngạc nhiên) kết nối MATLAB với Arduino để điều khiển servo và đèn LED; đồng thời vạch rõ giới hạn nghiên cứu về mặt thiết bị thu nhận (webcam) và phạm vi phân loại.

Chương 2: Cơ sở lý thuyết

Chương 2 cung cấp nền tảng lý thuyết chi tiết về:

  • Cấu trúc phần cứng kit Arduino Uno R3, thông số vi điều khiển ATmega328P (14 chân Digital I/O, 6 chân Analog, bộ nhớ Flash 32KB, SRAM 2KB, tần số dao động 16MHz).
  • Tổng quan môi trường tính toán MATLAB, cấu trúc hệ thống gồm Workspace, Xử lý đồ họa, Thư viện toán học và API.
  • Phân tích cơ sở sinh học và dấu hiệu nhận biết của 3 trạng thái cảm xúc:
    • Vui: Nét mặt rạng rỡ, khuôn miệng cười mở rộng.
    • Buồn: Vùng trán nhăn, khóe mắt trùng xuống, mặt ủ dột, miệng khép.
    • Ngạc nhiên: Lông mày nhô cao, mắt mở to, miệng há tròn.
  • Bản chất toán học của phương pháp phân tích thành phần chính PCA (độ lệch chuẩn, phương sai, hiệp phương sai, ma trận hiệp phương sai, vector riêng, giá trị riêng).
  • Quy trình thuật toán Eigenfaces trong nhận dạng khuôn mặt và tập hợp các hàm xử lý ảnh trong MATLAB (princomp, rgb2gray, imcrop, imresize, regionprops, imshow...).

Chương 3: Tính toán và thiết kế

Chương 3 xây dựng mô hình hệ thống với hai quy trình độc lập: Quá trình huấn luyện (tạo cơ sở dữ liệu đặc trưng từ 390 ảnh) và Quá trình nhận dạng (tiền xử lý ảnh kiểm tra, trích xuất đặc trưng và so khoảng cách Euclid). Tác giả mô tả chi tiết các bước cài đặt phần mềm bổ trợ trên MATLAB bao gồm MATLAB Support Package for Arduino Hardware và gói kết nối USB Webcam, đồng thời hướng dẫn phương thức khởi tạo biến đối tượng phần cứng (a = arduino, cam = webcam) để kiểm tra liên kết.

Chương 4: Thi công hệ thống

Chương 4 mô tả quá trình lắp ráp phần cứng thực tế và cấu trúc mã lệnh. Tác giả trình bày sơ đồ đấu nối chi tiết giữa Arduino Uno với động cơ servo SG90 và đèn LED qua điện trở hạn dòng tính toán; xây dựng lưu đồ giải thuật cho chương trình chính, chương trình con xử lý ảnh chụp, chương trình trích chọn đặc trưng và chương trình nhận dạng. Cuối chương là tài liệu hướng dẫn vận hành chi tiết từng bước trên giao diện phần mềm mô phỏng.

Chương 5: Kết quả, nhận xét và đánh giá

Chương 5 công bố kết quả thực nghiệm của hệ thống trên cả hai chế độ: nhận dạng từ tập tin ảnh có sẵn và nhận dạng trực tiếp qua webcam. Tác giả trình bày các ảnh chụp giao diện khi nhận dạng thành công các trạng thái cảm xúc và kích hoạt cơ cấu chấp hành tương ứng (mở cửa khi vui, mở đèn khi buồn, đóng cửa và tắt đèn khi ngạc nhiên).


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

Kết quả thực nghiệm

Hệ thống đã hoàn thành việc tích hợp giữa phần mềm xử lý ảnh và mạch phần cứng điều khiển. Các kết quả cụ thể ghi nhận trong văn bản bao gồm:

  • Xây dựng thành công bộ cơ sở dữ liệu mẫu gồm 390 hình ảnh chuẩn hóa, phân bổ đồng đều cho 3 trạng thái cảm xúc (130 ảnh/loại).
  • Tỷ lệ nhận dạng chính xác thực tế đạt trên 80% cho từng loại cảm xúc riêng biệt (vui, buồn, ngạc nhiên).
  • Hệ thống thực thi chính xác 100% các kịch bản điều khiển phần cứng tương ứng với kết quả nhận dạng:
    • Nhận dạng cảm xúc vui $\rightarrow$ MATLAB gửi lệnh điều khiển servo quay mở cửa.
    • Nhận dạng cảm xúc buồn $\rightarrow$ MATLAB gửi lệnh bật sáng đèn LED.
    • Nhận dạng cảm xúc ngạc nhiên $\rightarrow$ MATLAB gửi lệnh điều khiển servo đóng cửa và ngắt đèn LED.
Cảm xúc nhận dạng Dấu hiệu đặc trưng trên mặt Hành vi điều khiển phần cứng tương ứng
Vui Nụ cười, cơ miệng mở rộng Động cơ Servo SG90 quay mở cửa
Buồn Trán nhăn, khóe mắt trùng, miệng khép Đèn LED bật sáng
Ngạc nhiên Lông mày nhô cao, mắt mở to, miệng mở tròn Động cơ Servo đóng cửa và tắt đèn LED

Đóng góp của đề tài

  1. Đã cụ thể hóa thuật toán Eigenfaces dựa trên phân tích thành phần chính (PCA) vào bài toán phân loại biểu cảm nét mặt trên môi trường MATLAB với cấu trúc tính toán ma trận tối ưu.
  2. Xây dựng giải pháp kết nối trực tiếp giữa thuật toán xử lý ảnh trên máy tính với vi điều khiển Arduino qua gói hỗ trợ phần cứng (Support Package), tạo thành mô hình tương tác người - máy vật lý hoàn chỉnh mà không cần lập trình truyền thông nối tiếp thủ công phức tạp.
  3. Thiết kế giao diện điều khiển trực quan, cho phép kiểm thử linh hoạt trên cả ảnh lưu trữ tĩnh và hình ảnh thời gian thực từ webcam.

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

Hạn chế của đề tài

  • Số lượng cảm xúc nhận dạng còn hẹp: Hệ thống mới chỉ nhận diện được 3 trạng thái biểu cảm cơ bản (vui, buồn, ngạc nhiên), chưa bao quát được các trạng thái phức tạp khác như giận dữ, sợ hãi, khinh bỉ hay trạng thái trung tính.
  • Độ nhạy với điều kiện môi trường: Quá trình nhận dạng qua webcam phụ thuộc nhiều vào điều kiện chiếu sáng; hệ thống hoạt động kém chính xác khi ánh sáng quá yếu hoặc bị chói lóa.
  • Yêu cầu khắt khe về tư thế: Người dùng bắt buộc phải hướng mặt trực diện vào webcam ở khoảng cách cố định (tối ưu khoảng 50 cm) và không bị che khuất các vùng đặc trưng (miệng, mắt).

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

  • Mở rộng cơ sở dữ liệu huấn luyện với số lượng mẫu lớn hơn, đa dạng hóa đối tượng và góc chụp để tăng cường độ chính xác.
  • Bổ sung các thuật toán phân loại nâng cao (như mạng nơ-ron nhân tạo, SVM hoặc học sâu) nhằm nhận dạng đầy đủ 7 trạng thái cảm xúc cơ bản.
  • Tối ưu hóa thuật toán để xử lý nhận dạng thời gian thực với tốc độ khung hình cao hơn và tự động thích ứng với sự thay đổi của cường độ ánh sáng môi trường.

Giá trị tham khảo

Tài liệu đồ án là nguồn tư liệu tham khảo phù hợp cho:

  • Sinh viên ngành Kỹ thuật Điện tử - Truyền thông, Kỹ thuật Y sinh, Tự động hóa và Công nghệ thông tin: Nắm bắt quy trình từng bước áp dụng thuật toán PCA/Eigenfaces để xử lý ảnh khuôn mặt trong MATLAB.
  • Người làm đề tài về hệ thống nhúng và IoT: Tham khảo phương pháp cài đặt và sử dụng MATLAB Support Package for Arduino Hardware để biến MATLAB thành bộ xử lý trung tâm điều khiển trực tiếp các ngoại vi phần cứng (servo, cảm biến, LED) qua cổng USB.
  • Nội dung đáng tham khảo nhất: Chương 2 (các bước biến đổi toán học của ma trận hiệp phương sai trong PCA/Eigenfaces) và Chương 4 (lưu đồ thuật toán xử lý ảnh, trích chọn đặc trưng và mã lệnh điều khiển phần cứng).

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

1. Đề tài sử dụng thuật toán nào để nhận dạng cảm xúc khuôn mặt?

Đồ án sử dụng phương pháp Phân tích thành phần chính (PCA) kết hợp kỹ thuật không gian con Eigenfaces để giảm số chiều dữ liệu và trích chọn vector đặc trưng từ vùng mặt/miệng. Việc phân loại cảm xúc được thực hiện bằng cách tính khoảng cách Euclid tối thiểu giữa vector ảnh cần kiểm tra với các vector ảnh trong tập huấn luyện.

2. Bộ dữ liệu huấn luyện của đề tài có quy mô như thế nào?

Cơ sở dữ liệu huấn luyện do nhóm tác giả tự xây dựng gồm 390 ảnh khuôn mặt, chia đều cho 3 trạng thái cảm xúc: 130 ảnh cảm xúc vui, 130 ảnh cảm xúc buồn và 130 ảnh cảm xúc ngạc nhiên. Các ảnh đều được chuẩn hóa về cùng kích thước và chuyển sang ảnh mức xám trước khi huấn luyện.

3. MATLAB giao tiếp và điều khiển phần cứng Arduino bằng cách nào?

Hệ thống không nạp code độc lập vào Arduino rồi giao tiếp qua cổng COM truyền thống, mà sử dụng gói hỗ trợ phần cứng MATLAB Support Package for Arduino Hardware. Gói này cho phép MATLAB khởi tạo đối tượng Arduino (a = arduino) và điều khiển trực tiếp trạng thái logic các chân I/O cũng như góc quay của động cơ servo thông qua lệnh gọi hàm từ MATLAB.

4. Hệ thống thực thi hành động vật lý gì khi nhận dạng được từng cảm xúc?

  • Khi nhận diện cảm xúc vui: MATLAB điều khiển động cơ servo SG90 quay để mở cửa mô phỏng.
  • Khi nhận diện cảm xúc buồn: MATLAB xuất tín hiệu mức cao ra chân Digital để bật sáng đèn LED.
  • Khi nhận diện cảm xúc ngạc nhiên: MATLAB điều khiển servo quay đóng cửa và đồng thời tắt đèn LED.

5. Khoảng cách và điều kiện thu nhận ảnh tối ưu của hệ thống là bao nhiêu?

Theo hướng dẫn vận hành của nhóm tác giả, người kiểm tra cần đưa khuôn mặt trực diện với webcam máy tính ở khoảng cách tối ưu là 50 cm, trong điều kiện ánh sáng phòng đầy đủ, không quá tối và không bị chói lóa.


Kết luận

Đồ án tốt nghiệp "Nhận dạng cảm xúc khuôn mặt người" đã nghiên cứu và triển khai thành công mô hình nhận dạng 3 trạng thái biểu cảm (vui, buồn, ngạc nhiên) dựa trên thuật toán phân tích thành phần chính PCA và phương pháp Eigenfaces. Hệ thống được lập trình toàn diện trên môi trường MATLAB, kết nối trực tiếp với kit vi điều khiển Arduino Uno để điều khiển các cơ cấu chấp hành gồm động cơ servo SG90 và đèn LED chỉ thị theo từng trạng thái cảm xúc nhận dạng được. Với độ chính xác đạt trên 80% trong điều kiện thực nghiệm tiêu chuẩn, đề tài là tài liệu tham khảo có giá trị ứng dụng thực tiễn cao cho sinh viên và người nghiên cứu trong lĩnh vực xử lý ảnh kết hợp điều khiển hệ thống nhúng.