3.3.1 Thiết kế sơ đồ khối hệ thống
Với mục tiêu xây dựng cơ sở dữ liệu huấn luyện cho hệ thống và chương trình nhận dạng ảnh đầu vào từ cơ sở dữ liệu huấn luyện. Hệ thống được chia thành thành 2 phần chính: Huấn luyện và nhận dạng.
Huấn luyện gồm các quá trình: Lấy ảnh đầu vào, xử lý ảnh đầu vào, tạo cơ sở dữ liệu.
Nhận dạng gồm các quá trình: Lấy ảnh đầu vào, xử lý đầu vào, so sánh với cơ sở dữ liệu huấn luyện, đưa ra kết quả.
Hình 3.6. Sơ đồ quá trình tạo cơ sở dữ liệu huấn luyện.
Hình 3.7. Sơ đồ quá trình nhận dạng.
Khối lấy ảnh đầu vào (bao gồm khối lấy ảnh đầu vào để huấn luyện và khối lấy ảnh đầu vào để nhận dạng). Chương trình nhận đầu vào từ ảnh chụp hoặc từ camera, tuy nhiên việc nhận dạng cảm xúc khuôn mặt được thực hiện trên các bức ảnh. Do đó
Lấy ảnh vào để huấn luyện ( ảnh chụp hoặc camera) Xử lý ảnh Tạo cở sở dữ liệu (lưu lại cảm xúc) Lấy ảnh vào để nhận dạng ( ảnh chụp hoặc từ camera) Xử lý ảnh
So sánh với cơ sở dữ liệu đã huấn luyện
việc lấy ảnh từ camera ta phải chuyển thành các ảnh tĩnh và xử lý trên từng ảnh tĩnh. Khi đã có ảnh đầu vào, tiếp tục chuyển ảnh cho quá trình xử lý tiếp theo.
Khối xử lý ảnh đầu vào: Hệ thống đòi hỏi ảnh đầu vào, ảnh huấn luyện và ảnh nhận dạng phải có cùng kích thước với nhau. Do đó, ảnh sau khi lấy phải được cắt, chỉnh sửa sao cho có cùng kích thước nhất định.
Khối tạo cơ sở dữ liệu: Các ảnh sau khi được xử lý trong quá trình huấn luyện sẽ được lưu cảm xúc tương ứng vào cơ sở dữ liệu để phục vụ nhận dạng.
Khối so sánh với cơ sở dữ liệu đã huấn luyện: Các ảnh sau khi được xử lý cảm xúc ở quá trình nhận dạng sẽ được đem đi so sánh với ảnh được huấn luyện trong cơ sở dữ liệu để đưa ra kết luận.
Khối xuất kết quả-ứng dụng: Hệ thống sẽ đưa ra thông tin ảnh cần nhận dạng có cảm xúc như thế nào, sau đó chạy ứng dụng trên kit Arduino.
3.3.2 Thiết kế các khối hệ thống
Hệ thống được xây dựng toàn bộ trên nền Matlab nhúng dữ liệu xuống kit Arduino nên quá trình tính toán và thiết kế được thực hiện chủ yếu trên phần mềm.
a. Thiết kế khối đầu lấy ảnh đầu vào
Ở khối đầu vào nhóm sử dụng 2 bộ ảnh để huấn luyện: một chụp từ điện thoại, một chụp từ camera webcam của máy tính.
Mỗi bộ ảnh có tất cả 60 ảnh bao gồm: 12 ảnh cho cảm xúc vui, 12 ảnh cho cảm xúc buồn, 12 ảnh cho cảm xúc giận, 12 ảnh cho cảm xúc ngạc nhiên và 12 ảnh cho trạng thái không cảm xúc (bình thường). Các bức ảnh này phải có cùng kích thước, được chụp ở cùng một khoảng cách để hổ trợ cho việc xử lý vào cở sở dữ liệu phục vụ cho nhận dạng.
Khi lấy ảnh chụp từ camera ta dùng các hàm: camlist= webcamlist: hiển thông tin camera. cam= webcam() : kết nối với webcam. preview(cam) : mở cửa sổ webcam để ảnh snapshot(cam): chụp ảnh
b. Thiết kế khối xử lý đầu vào
Ở khối xử lý đầu vào: xây dựng một chương trình để xử lý bằng các lệnh, hàm được thư viện Matlab hỗ trợ. Sau khi có ảnh đầu vào chuyển đổi chúng sang cùng kích thước, chuyển đổi hình ảnh màu RGB sang xám bằng cách sử dụng chức năng
imresize(), rgb2gray(). Tiếp theo tách ảnh khuôn mặt bằng công cụ Image Processing toolbox bằng hàm regionprops(L,properties).
c. Thiết kế khối tạo cơ sở dữ liệu
Ở khối này hệ thống sẽ lưu trữ các các ảnh đầu vào đã được xử lý trước đó để phục vụ quá trình nhận dạng bằng cách tạo một file .txt lưu trữ tên cảm xúc từng ảnh đã được xử lý.
d. Thiết kế so sánh với cơ sở dữ liệu huấn luyện
Ở khối này hệ thống sử dụng phương pháp Eigenfaces bằng cách chuyển các ảnh trong cơ sở dữ liệu thành các vector riêng, biểu diễn chúng trong một không gian mới, sau đó làm tương tự cho ảnh cần nhận dạng. Tìm khoảng cách gần nhất giữa ảnh cần nhận dạng với ảnh trong cơ sở dữ liệu bằng phương pháp Euclid và ảnh đó chính là cảm xúc cần nhận dạng.
e. Thiết kế khối xuất kết quả- ứng dụng
Khối này sẽ đọc kết quả cảm xúc nhận dạng được từ khối so sánh với cơ sở dữ liệu huấn luyện, tương ứng với mỗi cảm xúc điều khiển ứng dụng trên kit Arduino.
Cảm xúc vui điều khiển led màu xanh lam. Cảm xúc ngạc nhiên điều khiển led màu xanh lá. Cảm xúc buồn điều khiển led vàng và bật nhạc. Cảm xúc giận điều khiển led màu đỏ.
Hình 3.8. Sơ đồ nguyên lý khối ứng dụng. Hình 3.9. Hình ảnh khối ứng dụng. D IG IT A L ( P W M ~ ) A N A L O G IN AREF 13 12 ~11 ~10 RX < 0 ~9 8 7 ~6 ~5 4 ~3 2 TX > 1 S IM U L IN O A R D U IN O A0 A1 A2 A3 A4 A5 RESET 5V GND P O W E R A T M E G A 3 2 8 P A T M E L www.arduino.cc blogembarcado.blogspot.com SIM1 SIMULINO UNO D2 LED-BLUE D3 LED-GREEN D1 LED-RED D4 LED-YELLOW
3.4 CÀI ĐẶT CÁC GÓI HỖ TRỢ PHẦN CỨNG CHO MATLAB 3.4.1 Kết nối Arduino với Matlab 3.4.1 Kết nối Arduino với Matlab
Đầu tiên tiến hành cài đặt gói Arduino trên nền Matlab. Matlab có hỗ trợ các Package từ phần cứng Ardunio và giao tiếp với nhau thông qua cổng USB. Các gói Package được tạo ra dựa trên hoạt động của các chương trình trên board, nó có hỗ trợ trên môi trường như Windows, Mac OS, Linux. Trong phần này nhóm chỉ tập trung vào giao tiếp giữa Ardunio và Matlab. Để cài đặt gói Package làm như sau:
Từ giao diện Matlab, click vào Add-Ons chọn Get Hardware Support Package.
Cửa sổ Support Package Installer hiện lên, chọn Install from Internet
Hình 3.11. Cửa sổ Support Package Installer. Sau đó chọn vào Arduino và tick vào cài đặt các Package
Đăng nhập vào tài khoản Matlab.
Hình 3.13. Đăng nhập cho cửa sổ MathWorks Account Log In.
Sau khi đăng nhập xong, nhấn Next để cài đặt đến hết. Nhấn Finish để kết thúc phần cài đặt.
Kiểm tra kết nối Arduino với Matlab. Trên Command Window gõ lệnh: a= arduino.
Đây là câu lệnh để kiểm tra kết nối giữa Arduino với Matlab và các Packages đã được cài đặt để hỗ trợ cho Arduino hay chưa.
3.4.2 Cài đặt Camera cho Matlab
Để kết nối Camera, chúng ta cài đặt các gói hỗ trợ phần cứng bổ sung vào Matlab. Từ cửa sổ Support Package Installer ở Hình 3.11, chúng ta cài đặt tương tự giống như cho Arduino.
Chọn vào USB webcam và OS Generic video Interface để cài đặt .
Hình 3.15. Cài đặt Camera cho Matlab.
Đăng nhập vào tài khoản Matlab như Hình 3.13 và nhấn Next cho đến khi cài đặt hoàn tất.
Kiểm tra kết nối Camera cho Matlab Để kiểm tra việc này gõ lệnh
Kiểm tra thông tin chi tiết của Camera:
>> cam=webcam(1)
(b) cam= webcam(1)
Chương 4. THI CÔNG HỆ THỐNG
4.1 GIỚI THIỆU
Chương này nhóm giới thiệu về hệ thống nhóm đã thực hiện, lưu đồ cho chương trình nhận dạng cảm xúc trên khuôn mặt, chương trình chính và các bước thao tác để sử dụng mô hình.
4.2 THI CÔNG HỆ THỐNG
Mô hình do nhóm đồ án thực hiện:
4.3 LƯU ĐỒ GIẢI THUẬTLưu đồ hệ thống: Lưu đồ hệ thống: Bắt đầu Huấn luyện Nhận dạng Kết thúc Hình 4.2. Lưu đồ chương trình chính.
Để đi đến mục tiêu là nhận dạng được cảm xúc trên khuôn mặt, ta phải xây dựng thành công chương trình huấn luyện ảnh và chương trình nhận dạng ảnh đầu vào. Đầu tiên, khởi tạo cơ sở dữ liệu hay nói cách khác là tạo bộ ảnh huấn luyện bằng cách tạo chương trình con huấn luyện ảnh.
Sau đó tiến hành nhận dạng ảnh và cho ra kết quả nhận dạng để điều khiển ứng dụng. Hệ thống nhận dạng trên hai loại ảnh:
Ảnh có sẵn chụp từ điện thoại.
Chương trình tiến hành huấn luyện ảnh theo lưu đồ:
Bắt đầu
Biến đếm = 0
Khởi tạo Camera
Chụp ảnh Chuyển ảnh xám và cân bằng xám Trích đặc trưng Chuyển kích thước ảnh
Tạo và lưu thông tin ảnh Biến đếm + 1 Biến đếm > 59 S Thông báo Đ Kết thúc
Chế độ huấn luyện ảnh sẽ tiến hành chụp 60 ảnh có chứa các cảm xúc trên khuôn mặt gồm: cảm xúc vui, cảm xúc buồn, cảm xúc giận, cảm xúc ngạc nhiên và trạng thái không cảm xúc-bình thường. Đầu tiên đặt một biến đếm bằng 0, sau đó tiến hành khởi động camera. Camera sẽ tiến hành chụp ảnh các cảm xúc trên khuôn mặt sau đó hệ thống sẽ cân bằng xám và hiệu chỉnh kích thước ảnh theo kích thước đã quy định trước sau đó lưu thông tin ảnh. Quá trình được thực hiện đến khi hoàn tất với một thông báo.
Chương trình tiến hành nhận dạng ảnh theo lưu đồ: Bắt đầu
Xử lý cơ sở dữ liệu
Xử lý ảnh chụp
So sánh ảnh chụp với cơ sở dữ liệu
Xuất trạng thái Điều khiển ứng dụng trên Arduino Kết thúc Trích đặc trưng Hình 4.4. Lưu đồ chương trình nhận dạng.
Xử lý cơ sở dữ liệu: quá trình bắt đầu với việc tạo file .mat trong matlab sau đó tiến hành xử lý tập ảnh huấn luyện và lưu lại dữ liệu. Khi cần so sánh ảnh chụp với cơ sở dữ liệu phải tiến hành nạp lại file .mat.
Xử lý ảnh chụp: xử lý ảnh đầu vào chụp từ camera theo lưu đồ.
Bắt đầu
Khởi tạo Camera
Chụp ảnh Chuyển ảnh xám và cân bằng xám Tách khuôn mặt Chuẩn hóa kích thước Kết thúc Hình 4.5. Lưu đồ chương trình xử lý ảnh chụp.
Trích đặc trưng sử dụng thuật toán để lấy thông tin mang tính chất riệng biệt của một ảnh.
Các khâu trong quá trình trích đặc trưng: Đầu vào sử dụng ảnh đã được chuẩn hóa.
Đầu ra cho ra vector đặc trưng của ảnh đầu vào. Quá trình trích đặc trưng thể hiện theo lưu đồ:
Lấy tập ảnh đã chuẩn hóa Bắt đầu Chuẩn hóa ma trận ảnh Tính trung bình các ảnh Ma trận ảnh so với ảnh trung bình Tính các Eigenfaces
Chiếu lên không gian Eigenfaces
Trích các vector đặc trưng
Kết thúc
So sánh ảnh chụp với cơ sở dữ liệu: Tiến hành so sánh ảnh chụp với cơ sở dữ liệu cụ thể là dùng phương pháp Euclid để tìm ảnh thuộc cơ sở dữ liệu trong không gian Eigenfaces có khoảng cách gần nhất với ảnh cần nhận dạng. Từ đó, xuất ra trạng thái cảm xúc tương ứng.
Điều khiển ứng dụng trên Arduino: Đọc kết quả nhận dạng cảm xúc trên Arduino. Đặt một biến trạng thái ban đầu bằng 0 sau đó thay đổi theo trạng thái cảm xúc: vui, ngạc nhiên, giận, buồn và điều khiển ứng dụng tương ứng với mỗi trạng thái.
Bắt đầu Xuất trạng thái Đặt biến trạng thái = 0 Tt = 1 Đ Bật đèn xanh lục Tt = 2 S Bật đèn xanh lam Đ Tt = 3 S Bật đèn đỏ Đ Tt = 4 S Bật đèn vàng và mở nhạc Đ Kết thúc S
4.4 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC
4.4.1 Tài liệu hướng dẫn sử dụng
Bước 1: Kết nối kit Arduino với máy tính
Bước 2: Tiến hành chạy chương trình với 60 ảnh huấn luyện.
Bước 3: Chụp ảnh cảm xúc nhận dạng trên Camera sau đó đưa ảnh vào thư mục TestImage.
Bước 4: Chạy chương trình chính.
Bước 5: Quan sát kết quả.
4.4.2 Quy trình thao tác
Hình 4.8. Quy trình thao tác. Quy trình đã được giải thích trong mục 4.4.1.
Chương 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
5.1 KẾT QUẢ
5.1.1 Tổng quan kết quả đạt được
Sau hơn 2 tháng tìm hiểu tài liệu chuyên môn, tài liệu trên Internet cùng với sự giúp đỡ tận tình của giáo viên hướng dẫn, nhóm thực hiện đề tài: “Nhận dạng cảm xúc trên khuôn mặt” đã hoàn thành xong theo yêu cầu và đúng thời gian quy định với những nội dung sau:
Nắm được kiến thức cơ bản về kit Arduino, cài đặt được gói hỗ trợ Arduino, camera trên phần mềm Matlab.
Nắm được phương pháp trích đặc trưng PCA, đồng thời áp dụng được phương pháp này vào bài toán nhận dạng cảm xúc trên khuôn mặt.
Xây dựng tốt chương trình huấn luyện ảnh (từ ảnh chụp và camera) để tạo cơ sở dữ liệu nhận dạng.
Xây dựng được chương trình nhận dạng cảm xúc từ ảnh huấn luyện. Nhận dạng thành công trên 80% cho từng loại cảm xúc.
Tương ứng với từng loại cảm xúc, điều khiển thành công ứng dụng cơ bản ( hiệu ứng Led, nhạc) cho kit Arduino từ phần mềm Matlab.
5.1.2 Kết quả thực tế
a. Kết quả huấn luyện và nhận dạng từ ảnh chụp
Kết quả huấn luyện
Nhóm xây dựng chương trình huấn luyện gồm 60 ảnh gồm: 12 ảnh cảm xúc vui, 12 ảnh cảm xúc buồn, 12 ảnh cảm xúc giận, 12 ảnh cảm xúc ngạc nhiên và 12 ảnh có trạng thái bình thường.
Hình 5.1. 60 ảnh huấn luyện từ ảnh chụp. Kết quả nhận dạng
Nhận dạng 4 cảm xúc chính gồm: vui, buồn, giận, ngạc nhiên.
Hình 5.3. Nhận dạng thành công cảm xúc “buồn” từ ảnh chụp.
Hình 5.5. Nhận dạng thành công cảm xúc “ngạc nhiên” từ ảnh chụp.
b. Kết quả huấn luyện và nhận dạng trực tiếp từ camera
Kết quả huấn luyện
Chương trình huấn luyện 60 ảnh tương tự như ở phần ảnh chụp gồm: 12 ảnh cảm xúc vui, 12 ảnh cảm xúc buồn, 12 ảnh cảm xúc giận, 12 ảnh cảm xúc ngạc nhiên và 12 ảnh có trạng thái bình thường .
Hình 5.6. 60 ảnh huấn luyện từ camera. Kết quả nhận dạng
Nhận dạng 4 cảm xúc chính gồm: vui, buồn, giận, ngạc nhiên.
Hình 5.8. Nhận dạng thành công cảm xúc “buồn” từ camera.
Hình 5.10. Nhận dạng thành công cảm xúc “ngạc nhiên” từ camera.
c. Kết quả điều khiển ứng dụng trên Arduino
Sau quá trình nhận dạng cảm xúc từ chương trình chính là quá trình nhúng dữ liệu từ Matlab xuống kit Arduino:
Cảm xúc vui điều khiển led xanh lam. Cảm xúc buồn điều khiển led xanh lá. Cảm xúc giận điều khiển led đỏ.
Cảm xúc buồn điều khiển led vàng và bật nhạc.
Hình 5.11. Kết quả điều khiển ứng dụng Led. d. Kết quả thống kê
Thống kê kết quả nhận dạng 100 ảnh từ ảnh chụp cho mỗi trạng cảm xúc (ảnh huấn luyện và nhận dạng đều là ảnh chụp sẵn), đồng thời ảnh nhận dạng được chụp trong cùng điều kiện ảnh huấn luyện .
Cảm xúc Vui Buồn Giận Ngạc nhiên
Độ chính xác 95% 88% 93% 92%
Bảng 5.1. Thống kê kết quả nhận dạng từ ảnh chụp.
Thống kê kết quả nhận dạng 100 ảnh lấy trực tiếp từ camera cho mỗi trạng thái cảm xúc, đồng thời các ảnh lấy trực tiếp từ camera trong cùng điều kiện môi trường huấn luyện.
Cảm xúc Vui Buồn Giận Ngạc nhiên
Độ chính xác 90% 82% 83% 86%
5.2 NHẬN XÉT VÀ ĐÁNH GIÁ
Đồ án do nhóm thực hiện đã đạt được khoảng 95% mục tiêu do nhóm đặt ra. Điều khiển các ứng dụng trên Arduino tương đối tốt, đúng yêu cầu đặt ra.Tuy nhiên, do chưa có nhiều kinh nghiệm nên việc cài đặt Arduino cho Matlab lúc ban đầu gặp nhiều khó khăn làm tốn nhiều thời gian.
Tốc độ đáp ứng của hệ thống còn chậm và có thể cải thiện bằng cách giảm số