Nhận diện cảm xúc khuôn mặt dựa trên học máy vàthị giác máy đã trở thành một trong những ứng dụng quan trọng của trí tuệ nhân tạo.Việc có khả năng tự động nhận diện và phân loại các cảm
Mục tiêu nghiên cứu
Mục tiêu chính của đề tài nà y là xây dựng một mạng diện cảm xúc khuôn mặt hiệu quả và chính xác Hệ thống này sẽ có khả năng phân loại các biểu hiện cảm xúc như vui, buồn, giận dữ, sợ hãi và bất ngờ dựa trên dữ liệu hình ảnh khuôn mặt Nhận diện cảm xúc khuôn mặt có thể được áp dụng trong nhiều lĩnh vực, bao gồm công nghệ giao tiếp, xử lý hình ảnh, quảng cáo, y tế và nhiều lĩnh vực khác.
Trong đồ án này, ứng viên sẽ sử dụng các phương pháp và công nghệ tiên tiến, bao gồm học máy, mạng nơ-ron hồi quy và học sâu nhằm xây dựng mô hình nhận diện cảm xúc khuôn mặt Việc sử dụng các tập dữ liệu chất lượng cao và kỹ thuật tiền xử lý dữ liệu đảm bảo tính chính xác và hiệu suất tối ưu của hệ thống.
Phương pháp nghiên cứu
- Tìm kiếm và nghiên cứu các tài liệu về nhận dạng khuôn mặt
- Tìm kiếm và nghiên cứu các tài liệu về nhận diện cảm xúc.
- Tìm hiểu các công cụ để xây dựng hệ thống.
- Sử dụng model đã được huấn luyện để trích xuất các thuộc tính đặc trưng của dữ liệu.
- Kiểm thử và đánh giá kết quả.
TỔNG QUAN VỀ HỆ THỐNG NHẬN DIỆN CẢM XÚC
Tổng quan sinh trắc học
Sinh trắc học hay Công nghệ sinh trắc học (tiếng Anh: Biometric) là công nghệ sử dụng những thuộc tính vật lý, đặc điểm sinh học riêng của mỗi cá nhân như vân tay, mống mắt, khuôn mặt, giọng nói, để nhận diện.
Bài toán nhận diện cảm xúc
Bài toàn nhận dạng cảm xúc đã bắt đầu được nghiên cứu từ những năm 1970 nhưng kết quả đạt được vẫn còn nhiều hạn chế Hiện nay vấn đế này vẫn đang được rất nhiều người quan tâm bởi tính hấp dẫn cùng những vấn đề phức tạ p của nó.
Ngày nay cùng với sự bùng nổ thông tin, sự phát triển công nghệ cao, sự giao tiếp giữa con người và máy tính đang phát triển rất nhanh, giờ đây gia o tiếp này không còn đơn thuần dùng các thiết bị cơ học như chuột, bàn phím… mà có thể thông qua các biểu hiện của khuôn mặt Trong s ố đó có thể nói đến hệ thống nhận diện cảm xúc, hệ thống này có thể giúp con người và máy tính giao tiếp với nhau tốt hơn Những nghiên cứu trong hệ thống này chủ yếu dựa trên những thông tin trong ảnh để phát hiện biểu cảm khuôn mặt, tạo tiền đề cho các ứng dụng tiếp theo
Nhận dạng cảm xúc cũng gặp phải nhiều khó khăn do tác động từ các yếu tố bên ngoài như ánh sáng, hướng nghiêng, kích thước ảnh, diện mạo, biểu hiện cảm xúc của khuôn mặt hay ảnh hưởng của tham số môi trường.
Hình 1 Các đặc trưng trên khuôn mặt Để xây dựng một mô hình mạ ng nhận dạng cảm xúc có đầu vào của hệ thống là một hình ảnh kỹ thuật số hay một khung hình video từ một nguồn video Đầu ra là xác định đưa ra thông tin cảm xúc đúng nhấ t với biểu cảm trên khuôn mặt. Hướng tới mục tiêu này chúng ta thường c hia thủ tục nhận dạng cảm xúc gồm ba bước: Phát hiện khuôn mặt, trích rút đặc trưng và nhận diện cảm xúc
Hình 2 Mô hình nhận diện cảm xúc
Cơ bản một hệ thống nhận dạng cảm xúc sẽ có đầu vào là một ảnh tĩnh hoặc một khung hình của một video Bước tiền xử lý sẽ giúp nâng cao chất lượng hình ảnh, chuẩn hóa về mặt dữ liệu và kích thước hình ảnh, giúp cho việc trích rút đặc trưng được chính xác hơn.
● Trích chọn đặc trưng (Feature Extraction): Sau khi phát hiện ra khuôn mặt trong bức ảnh, chúng ta tiến hành trích chọn những đặc trưng trên khuôn mặt Bước này trích xuất ra một vector đặc trưng đại diện cho một biể u cảm Mục đích của bộ mô tả là có khả năng phân biệt giữa các loại cảm xúc.
● Phát hiện khuôn mặt (Face Detection): Chức năng chính của bước này là phát hiện ra khuôn mặt xem nó có xuất hiện ở trong một bức hình hay một đoạn video hay không? Tỉ lệ phát hiệ n ra khuôn mặt phụ thuộc nhiều vào điều kiện về độ sáng, hướng khuôn mặt hay các yếu tố môi trường khác. Để hệ thống nhận dạng hoạt động đạt hiệu quả cao thì hình ảnh khuôn mặt sau khi được phát hiện cần chuẩn hóa về kích thước, ánh sáng.
● Nhận dạng cảm xúc (Emotion Recognition): Với hình ảnh đầu vào sau khi phát hiện ra khuôn mặt, trích rút các đặc trưng của các loại cảm xúc và đem so sánh các đặc trưng này với bộ cơ sở dữ liệu cảm xúc Từ đó đưa ra thông tin đúng nhất với biểu cảm đấy.
Những khó khăn và thách thức trong bài toán
Bài toán nhận diện cảm xúc là một lĩnh vực nghiên cứu trong trí tuệ nhân tạo đầy thách thức Cho tới hiện nay, các nghiên cứu về nhận diện cảm xúc vẫn chưa đạt được những kết quả như mong muốn.
- Đa dạng cảm xúc: C on người có thể có rất nhiều cảm xúc khác nhau và thường xuyên thể hiện chúng bằng các hình thức nonverbal như biểu cảm khuôn mặt, giọng điệu, ngôn ngữ cơ thể Việc nhận diện và phân loại các cảm xúc này đòi hỏi mô hình phải có khả năng nhạy bé n và phong phú để xử lý đa dạng các biểu hiện cảm xúc.
Sự xuất hiện hoặc thiếu vắng các thành phần khuôn mặt như râu, ria, mắt kính làm cho bài toán nhận dạng khuôn mặt trở nên phức tạp hơn Các đặc điểm này có thể thay đổi theo thời gian hoặc tùy thuộc vào hoàn cảnh, tạo ra nhiều biến thể khác nhau của cùng một khuôn mặt.
- Sự tương đối và mâu thuẫn trong cảm xúc: Đôi khi cảm xúc của con người có thể là một sự kết hợp hoặc mâu thuẫn giữa các cảm xúc khác nhau Ví dụ, một người có thể cảm thấy vừa vui vẻ vừa lo lắng trong một tình huống cụ thể Việc xử lý sự tương đối và mâu thuẫn này đòi hỏi mô hình phải có khả năng phân loại và hiểu được các tình huống phức tạp.
- Thiếu dữ liệu huấn luyện: Để xây dựng mô hình nhận diện cảm xúc chính xác, cần có một lượng lớn dữ liệu huấn luyện có nhãn đầy đủ và đa dạng.Tuy nhiên, việc xây dựng tập dữ liệu như vậy có thể gặp khó khăn, do cảm xúc là một khái niệm cá nhân và khó khăn trong việc định n ghĩa và gán nhãn cho các trạng thái cảm xúc một cách chính xác.
Ứng dụng của bài toán
Ứng dụng của bài toán này rất đa dạng và có thể áp dụng trong nhiều lĩnh vực khác nhau, bao gồm:
Xử lý ngôn ngữ tự nhiên:
Trong lĩnh vực xử lý ngôn ngữ tự nhiên, nhận diện cảm xúc có thể được sử dụng để phân tích và đánh giá cảm xúc trong các tài liệ u văn bản, bình luận, tin nhắn, đánh giá sản phẩm, và bài viết trên mạng xã hội Điều này có thể giúp các doanh nghiệp, tổ chức và chính phủ hiểu được ý kiến, suy nghĩ và tình cảm của người dùng vớ i mục đích cải thiện sản phẩm, dịch vụ hoặc tương tác với khách hàng.
Trong lĩnh vực giao diện người-máy, nhận diện cảm xúc có thể được sử dụng để cải thiện tương tác giữa con người và máy tính Máy tính có thể nhận biết cảm xúc của người dùng thông qua giọng nói, ngôn ngữ cử chỉ, khuôn mặt hoặc các tín hiệu sinh lý khác, và tương tác theo cách phù hợp với cảm xúc đó Ví dụ, máy tính c ó thể tự động điều chỉnh nội dung, âm lượng hoặc tốc độ phản hồi dựa trên cảm xúc của người dùng.
Phân tích truyền thông xã hội:
Trong lĩnh vực phân tích truyền thông xã hội, nhận diện cảm xúc có thể được sử dụng để phân tích và đo lường cảm xúc của người dùng trên các nền tảng truyền thông xã hội như Facebook, Twitter, và Instagram Các công ty và tổ chức có thể sử dụng thông tin này để nắm bắt ý kiến công chúng, phản hồi phản ứng của khách hàng và đo lường hiệu quả chiến dịch tiếp thị hoặc quản lý dư luận.
Y tế và chăm sóc sức khỏe:
Trong lĩnh vực y tế và chăm sóc sức khỏe, nhận diện cảm xúc có thể được sử dụng để giúp đánh giá và theo dõi tình trạng tâm lý của bệnh nhân Các ứng dụng này có thể phát hiện các biểu hiện của lo â u, trầm cảm hoặc căng thẳng trong giọng nói, diễn đạt và cử chỉ của bệnh nhân, từ đó đưa ra đề xuất điều trị hoặc hỗ trợ tâm lý thích hợp.
Khái quát về xử lí ảnh
Xử lý ảnh là một trong những mảng quan trọng nhất trong kỹ thuật thị giác máy tính, là tiền đề cho nhiều nghiên cứu thuộc lĩnh vực này Hai nhiệm vụ cơ bản của quá trình xử lý ảnh là nâng cao chất lượng thông tin hình ảnh và xử lý số liệu cung cấp cho c ác quá trình khác trong đó có việc ứng dụng thị giác vào điều khiển.
Quá trình bắt đầu từ việc thu nhận ảnh nguồn (từ các thiết bị thu nhận ảnh dạng số hoặc tương tự) gửi đến máy tính Dữ liệu ảnh được lưu trữ ở định dạng phù hợp với quá trình xử lý Người lập trình sẽ tác động các thuật toá n tương ứng lên dữ liệu ảnh nhằm thay đổi cấu trúc ảnh phù hơp với các ứng dụng khác nhau.
- Chuyển ảnh màu thành ảnh xám.
- Lược đồ xám của ảnh (Histogram).
- Các bộ lọc không gian.
Hình 3: Các đặc trưng cơ bản trong xử lí ảnh
Mạng nơ-ron tích chập
1.6.1 Tổng quan mạng nơ-ron nhân tạo.
Mạng nơ-ron nhân tạo (Artificial Neural Network – ANN) là một mô hình xử lí thông tin phỏng theo cách thức xử lí cụ thể thông tin của các hệ nơ-ron sinh học Nó được tạo nên từ một số lượng lớn các phần tử(nơ-ron) kết nối với nhau thông qua các liên kết(trọng số liên kế t) làm việc như một thể thống nhất để giải quyết một vấn đề cụ thể nào đó Cấu trúc nơ-ron nhận tạo có dạng như hình 4.
Hình 4: Cấu trúc nơ-ron nhân tạo
Các thành phần cơ bản của một nơ-ron nhân tạo bao gồm:
Tập các đầu vào: là c ác tín hiệu vào ( input signals) của nơ-ron, các tín hiệu này thường được đưa vào dưới dạng một vector N chiều. Tập các liên kết: mỗi liên kết được thể hiện bởi một trọng số liên kết –Synaptic weight.
Bộ tổng (Summing function): thường dùng để tính tổng của các tích các đầu vào với trọng số liên kết của nó.
Ngưỡng (còn gọi là một độ lệch – bias): ngưỡng này thường được đưa vào như một thành phần của hàm truyền.
Hàm truyền (transfer function): hà m này được dùng để giới hạn phạm vi đầu ra của mỗi nơ-ron Nó nhận đầu vào là kết quả của hàm tổng và ngưỡng. Đầu ra: là tín hiệu đầu ra của một nơ -ron, với mỗi nơ-ron sẽ có tối đa một đầu ra.
Xét về mặt toán học, cấu trúc của một nơ-ron k, được mô tả bằng biểu thức sau:
Trong đó: x1, x2, …., xp: là các tín hiệu vào
: là các trọng số liên kết của nơ-ron thứ k là hàm tổng, là một ngưỡng, f là hà m truyền, là tín hiệu đầu ra của nơ-ron.
Một số kiểu mạng Nơ-ron:
Kết hợp khác kiểu (Heteroassociative)
Kiến trúc truyền thẳng (Feedforward architechture)
Kiến trúc phản hồi( Feedback architechture)
1.6.2 Khái niệm về mạng nơ-ron tích chập (CNN)
CNN (Convolutional Neural Network) là một mô hình Deep Learning tiên tiến sử dụng nơ-ron tích chập, cho phép xây dựng các hệ thống thông minh và chính xác cao.
Hình 5: Cấu trúc mạng CNN
Là một cửa sửa trượt (Sliding Windows) trên một ma trận
Hình 6: Ma trận mô tả convolutional
Các convolutional layer có các parameter(kernel) đã được học để tự điều chỉnh lấy ra những thông tin chính xác nhất mà không cần chọn các feature.
Trong hình ảnh ví dụ trên, ma trận bê n trái là một hình ảnh trắng đen được số hóa Ma trận có kích thước 5×5 và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm của dòng và cột.
Tích chập là phép nhân từng phần tử giữa ma trận đầu vào và ma trận nhỏ hơn (Sliding Window), hay còn gọi là nhân, bộ lọc hoặc tính năng.
Convolution hay tích chập là nhân từng phần tử bên trong ma trận 3×3 với ma trận bê n trái Kết quả được một ma trận gọi là Convoled feature được s inh ra từ việc nhận ma trận Filter với ma trận ảnh 5×5 bên trái.
1.6.4 Cấu trúc của Convolutonal Neural Network
Mạng CNN gồm nhiều lớp Convolution chồng lên nhau, sử dụng các hàm và tanh để kích hoạt các trọng số Mỗi một lớp sau khi được kích hoạt sẽ cho ra kết quả tr ừu tượng cho các lớp tiếp theo Mỗi layer kế tiếp chính là thể hiện kết quả của layer trước đó
Thông qua quá trình training, các lớp layer CNN tự động học các giá trị được thể hiện qua các lớp filter.
Hình 7: Cấu trúc của Convolutional Network Neural
Các trường cục bộ Tác dụng của lớp này chính là nó giúp chúng ta tách lọc các dữ liệu, thông tin của ảnh và chọn được những vùng ảnh có giá trị sử dụng nhất.
Trọng số chia sẻ, làm giảm tối đa số lượng các tham số là tác dụng chính của yếu tố này trong mạng CNN hiện nay Bởi trong mỗi convolution có những feature map khác nhau, mỗi feature ma p lại giúp detect một vài feature trong ảnh.
Pooling layer đóng vai trò then chốt trước khi kết quả được tạo ra, giúp đơn giản hóa thông tin đầu ra Quá trình này thực hiện sau khi các phép tính và quét lớp được hoàn tất, lọc bớt thông tin không cần thiết, từ đó cho ra kết quả mong muốn, dễ hiểu và hữu dụng.
1.6.5 Chọn tham số Convolutional Neural Network Để lựa chọn được tha m số phù hợp nhất cho CNN cần chú ý đến các thông số như: filter size, pooling size, số convolution và việc train test.
Nếu lớp này có số lượng nhiều thì chương trình chạy của bạn lại càng được cải thiện Sử dụng các layer với số lượng lớn có thể dẫn đến tác động được giảm một cách đáng kể Thường chỉ sau 3-4 layer là bạn sẽ đạt được kết quả như mong muốn.
Thông thường các filter size đều có kích thước là 3*3 hoặc 5*5.
Giới thiệu về OpenCV
OpenCV là thư viện mã nguồn mở của Intel, có khả năng nhúng vào trong các chương trình nhận diện hình ảnh c ủa máy tính Nó bao gồm khả năng tiên tiến như phát hiện khuôn mặt, theo dõi khuôn mặt, nhận diện khuôn mặt, … Ngoà i ra nó còn cùng cấp rất nhiều các thuật toán xử lý ảnh thông qua các hàm API.
Intel phát hành phiên bản đầu tiên của OpenCV vào năm 1999 Ban đầu, nó yêu cầu như là thư viện xử lý ảnh của Intel Nhưng các vấn đề phụ thuộc đã được gỡ bỏ và bây giờ bạn có thể sử dụng OpenCV là một thư viện độc lập OpenCV hỗ trợ đa nền tảng, nó hỗ trợ cả Windows và Linux, và gần đây hơn là MacOSX, với giao diện của nó là nền tảng độc lập
Các tính năng của OpenCV:
General computer-vision and image-processing algorithms (mid-and low- level APIs): Sử dụng các interface này bạn có thể thử nghiệm nhiều tiêu chuẩn thuật toán tầm nhìn máy tính mà không cần phải code chúng Bao gồm các việc như: phát hiện cạnh, đường và phát hiện góc, …
High-level computer-vision modules: OpenCV bao gồm mốt số khả năng cao cấp Ngoài việc phát hiện khuôn mặt, nhận diện và theo dõi, nó còn ba o gồm dòng chảy quang học (bằng cách sử dụng máy ảnh chuyển động để xác định cấu trúc 3D), hiệu chuẩn máy ảnh.
AI and machine-learning methods: Ứng dụng tầm nhìn máy tính thường đòi hỏi máy học hoặc sử dụng phương thức AI khác Một trong số này có sẵn trong gói phần mềm OpenCV’s Machine Learning.
Image sampling and view transformations: Thường hữu ích để xử lý một nhóm các điểm ảnh như một khối OpenCV bao gồm giao diện cho tiểu vùng trích xuất hình ảnh, lấy mẫu ngẫu nhiên, thay đổi kích thước, cong vênh, xoay và các hiệu ứng quan điểm áp dụng.
Methods for creating and analyzing binary (two-valued) images: Ảnh nhị phận thường được sử dụng trong các hệ thống kiểm tra quét phát hiện các khuyết tật hoặc trong các bộ đế m Ảnh nhị phân cũng thuận tiện khi định vị vị trí đối tượng để nắm bắt.
Methods for computing 3D information: Các chức năng này rất hữu ích để lập bản đồ và nội địa hóa hoặc với nhiều góc nhìn từ một máy ảnh.
Math rotines for image processing, computer vision, and image interpretation: OpenCV bao gồm các thuật toán toán học thường được sử dụng trong đại số tuyến tính, thống kê, và hình học tính toán
Graphics: Các interface này cho phép viết văn bản và vẽ trên hình ảnh.
Ngoài chức năng ghi chú và đánh dấu thông thường, các chức năng này rất hữu ích trong các tác vụ gắn nhãn Ví dụ, trong chương trình phát hiện đối tượng, chúng ta có thể sử dụng các chức năng này để đánh dấu hình ảnh với kích thước và vị trí của đối tượng được phát hiện.
GUI methods: OpenCV bao gồm các interface, window riêng của nó Trong khi đây là những hạn chế so với những gì có thể được thực hiện trên các nền tảng khác, họ c ung cấp một cách đơn giản và đa nền tảng API để hiển thị hình ảnh, chấp nhận đầu vào người dùng là chuột hoặc bàn phím, và thực hiện kiểm soát thanh trượt.
Data Structures and algorithms: Với các interface chúng ta có thể thực hiện hiệu quả hơn các việc như: tìm kiếm, lưu, và thao tác các danh sách lớn, bộ sưu tập, đồ thị,…
Data persistence: Cung cấp giao diện thuận tiện để lưu trữ các loại dữ liệu vào ổ lưu trữ và lấy chúng sau này.
Chức năng OpenCV được chứa trong một số module:
● CXCORE chứa các định nghĩa kiểu dữ liệu cơ bản Ví dụ cấu trúc dữ liệu điểm cho hình ảnh, hình chữ nhật và được quy định tại cxtypes.h
● CV bao gồm xử lý hình ảnh và các phương pháp hiệu chỉnh máy ảnh. Các chức năng tính toán hình học cũng nằm ở đây.
● CVAUX chưa mã thử nghiệm và thực nghiệm, các giao diện đơn giản nhất để nhận dạng khuôn mặt nằm trong module này.
● ML chứa Machine Learning interfaces.
● Các chức năng còn lại được chứa trong HighGUI và CVCAM Cả hai đều nằm trong thư mục “otherlibs” Nó chứa các cửa sổ đa nền tả ng, đa chức năng.
● CVCAM chứa các giao diện để truy cập video thông qua DirectX trên nền tảng Windows 32-bit Tuy nhiên, HighGUI cũng chứa các giao diện video.
Các thư viện dùng cho bài toán
Pandas là một thư viện mã nguồn mở của Python được sử dụng để xử lý và phân tích dữ liệ u Pandas cho phép người dùng đọc, ghi và xử lý các dữ liệu được lưu trữ trong các định dạng phổ biến như CSV, Excel, SQL database, JSON, HTML và nhiều định dạng khác.
Các tính năng chính của Pandas bao gồm:
- Cung cấp hai đối tượng dữ liệu chính: Series và DataFrame Series là một mảng một c hiều của các giá trị có kiểu dữ liệu giống nhau, trong khi DataFrame là một bảng hai chiều được tổ chức thành các cột và hàng.
Pandas cung cấp nhiều công cụ thao tác dữ liệu bao gồm: tùy chọn truy cập dữ liệu, lọc, sắp xếp, nhóm, ghép nối và tính toán thống kê.
- Tích hợp tốt với các thư viện khác: Pandas tích hợp tốt với các thư viện khác như NumPy, Matplotlib và Scikit-learn để phân tích và trực quan hóa dữ liệu.
- Hỗ trợ đọc và ghi dữ liệu từ nhiều nguồn khác nhau: Pandas có thể đọc và ghi dữ liệu từ nhiều nguồn khác nhau như CSV, Excel, SQL database, JSON, HTML và nhiều định dạng khác.
- Dễ sử dụng: Pandas cung cấp cú pháp dễ hiểu và dễ sử dụng, giúp người dùng dễ dàng xử lý các tác vụ phức tạp với dữ liệu.
NumPy (Numerical Python) là một thư viện mã nguồn mở của Python được sử dụng để xử lý mảng số học và thực hiện các tính toán số học Nó cung cấp các đối tượng mảng và các chức năng tính toán số học cho các mảng đó, cũng như các chức năng hỗ trợ trên ma trận và các phép toán đại số tuyến tính khác.
Các tính năng chính của thư viên NumPy bao gồm:
- Đối tượng mảng: NumPy cung cấp đối tượng mảng đa chiều (ndarray) để lưu trữ các dữ liệu số học Đối tượng mảng có thể chứa các giá trị số, boolean, chuỗi và đối tượng khác.
NumPy cung cấp các phép toán số học toàn diện, bao gồm phép cộng, trừ, nhân, chia, lũy thừa, căn bậc hai, logarit, sin, cos và nhiều phép toán khác, cho phép người dùng thực hiện các phép tính số học một cách hiệu quả và chính xác trong các ứng dụng của họ.
- Các phép toán đại số tuyến tính: NumPy hỗ trợ các phép toán đại số tuyến tính như ma trận chuyển vị, nhân ma trận, giả i phương trình tuyến tính và giải phương trình vi phân.
- Xử lý mảng số lớ n: NumPy cho phép xử lý các mảng số lớn, bao gồm các mảng có hàng và cột hàng tỉ phần tử.
- Tích hợp với các thư viện khác: NumPy có thể tích hợp với các thư viện khác như SciPy, Pandas, Matplotlib và OpenCV để xử lý dữ liệu số học, thực hiện tính toán và hiển thị kết quả.
Keras là một thư viện mã nguồn mở dành cho Python được sử dụng để xây dựng các mô hình mạng nơ-ron nhân tạo (Artificial Neural Network - ANN). Keras được thiết kế để đơn giản hóa quá trình xây dựng mô hình, cho phép người dùng tập trung vào các khía cạnh cao cấp của mô hình, chẳng hạn như thiết kế kiến trúc của mạng và tinh chỉnh siêu tham số.
Các tính năng chính của thư viện Keras bao gồm:
Keras sở hữu một API dễ sử dụng để xây dựng các mô hình mạng nơ-ron, giúp người dùng dễ dàng tạo mô hình chỉ với một vài dòng mã.
- Hỗ trợ đa nền tảng: Keras hỗ trợ nhiều kiến trúc mạng nơ-ron như mạng nơ- ron tích chập (Convolutional Neural Network - CNN), mạng nơ-ron hồi quy (Recurrent Neural Network - RNN), mạng nơ-ron sâu (Deep Neural Network - DNN) và nhiều kiến trúc khác.
- Tích hợp với nhiều thư viện khác: Keras có thể tích hợp với các thư viện khác như TensorFlow, Theano và CNTK để thực hiện tính toán trên GPU, tăng tốc độ tính toán và hiệu quả của mô hình.
- Cung cấp các lớp và hàm tính toán tiêu chuẩn: Keras cung cấp một loạt các lớp và hàm tính toán tiêu chuẩn để xử lý các tác vụ phổ biến như xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP), xử lý hình ảnh và phân loại.
Phát hiện khuôn mặt
Tập dữ liệu nhận dạng khuôn mặt Haa r Cascade là một tập dữ liệu được sử dụng rộng rãi trong lĩnh vực nhận dạng khuôn mặt và được tích hợp sẵn trong thư viện OpenCV Tập dữ liệu này được sử dụng để huấn luyện các mô hình nhận dạng khuôn mặt dựa trên phương pháp "Haar-like features" (tính năng giống Haar)
Tập dữ liệu Haar Cascade bao gồm một loạt các tệp tin XML, mỗi tệp tin đại diện cho một mô hình nhận dạng khuôn mặt cụ thể Mỗi mô hình trong tập dữ liệu tập trung vào việc nhận dạng các đặc điểm phổ biến trong khuôn mặt, chẳng hạn như mắt, mũi, miệng, và các đường viền của khuôn mặt.
Về cơ bản HaarCascade sử dụng các đ ặc trưng Haar nhiều lần liên tiếp
Các bộ lọc được liệt kê ở dưới trong đó a) là các bộ lọc bắt các cạnh trong ảnh, b) bắt các đường thẳng trong ảnh, đây là 2 bộ lọc cơ bản của đặc trưng Haar. Ngoài ra còn có các bộ lọc Haar khác, ví dụ như c) là đặc trưng 4 hình vuông
Hình 8: Đặc trưng Haar-1 hoặc đặc trưng nằm gọn trong trung tâm một vùng
Tuy nhiên, cách áp dụng các bộ lọc này có khác hơn so với c ác bộ lọc thường dùng Chúng ta thường áp dụng bộ lọc cho toàn cửa sổ trượt trên ảnh, trong khi ở đặc trưng Haar, bộ lọc chỉ chiếm một phần trong cửa sổ trượt, như sau:
Hình 10: Mô phỏng hoạt động của bộ lọc
Trong hình trên, cửa sổ trượt được đặt ngay ngắn vừa gọn để nhìn được toàn bộ ảnh Chúng ta có thể thấy bộ lọc của đặ c trưng Haar đang tìm một cạnh phân cách giữa “mắt-lông mà y” với “mũi”, ở bộ lọc sau lại tìm đường sống mũi bởi nó sẽ sáng màu hơn so với hai bên cánh mũi Bộ lọc Haar sẽ chỉ nhìn vào một vùng cụ thể trong cửa sổ trượt để tìm các đặc trưng của khuôn mặt
Để xác định tính chính xác khi tìm kiếm cạnh bằng bộ lọc, với mắt thường, chúng ta có thể quan sát trực tiếp Tuy nhiên, với máy tính, cần phải tính toán các giá trị đặc trưng Haar, phản ánh sự chênh lệch giữa tổng giá trị pixel vùng đen và vùng trắng theo công thức:f(x) = Tổng vùng đen (mức xám của pixel) – Tổng vùng trắng (mức xám của pixel)
Viola và Joines đã đưa ra một phương pháp giúp tính tổng các giá trị mức xám của một vùng bất kỳ nào đó trên ảnh, sử dụng ảnh tích phân, là một mảng hai chiều có kích thước bằng kích thước ảnh cần tính đặc trưng Haar, mỗi phầ n tử của mảng này là tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó.
Công thức tính Intergral Image
Sau khi tính được Intergral Image, việc tính tổng các giá trị mức xám của một vùng bất kỳ trên ảnh được thực hiện đơn giản như sau:
Giả sử chúng ta cần tính tổng giá trị mức xám của vùng D như hình dưới:
Với A + B + C + D chính là giá trị tại điể m P4 trên Integral Image, tương tự như vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm P1 Vậy ta có thể viết lại biểu thức tính D ở trên như sau:
XÂY DỰNG MÔ HÌNH HỆ THỐNG
Phân tích hệ thống
Trong phạm vi đồ án tốt nghiệp, em đã mô phỏng mô hình bằng laptop cá nhân, camera được em sử dụng là webcam của laptop Khi chạy chương trình, camera sẽ bắt các khung h ình và phát hiện xem có mặt người trong đó không, nếu có sẽ nhận dạng hiển thị thông tin cảm xúc biểu cảm của người đó.
2.1.1 Xác định yêu cầu. Đầu vào: Luồng stream thu được từ camera theo thời gian thực Đầu ra: Chương trình giúp chúng ta phát hiện, theo vết và nhận diện cảm xúc mặt trong khung hình, đưa ra thông tin cảm xúc của người ấy ngay lúc đóYêu cầu chức năng:
● Đưa ra cảm xúc của đối tượng tìm được trong khung hình lên màn hình hiển thị theo thời gian thực
Yêu cầu phi chức năng:
● Ấn nút để dừng chương trình.
Môi trường và công cụ hỗ trợ:
● Sử dụng ngôn ngữ Python, và các Framework của Học Sâu
● Sử dụng thư viện Numpy, Keras,….
● Sử dụng công cụ Google Colab và Visual Studio Code.
● Điều kiện ánh sáng tốt, khoảng cách giữa khuôn mặt với camera không quá gần
Tập dữ liệu nhận dạng khuôn mặt Haar Cascade là một tập dữ liệu được sử dụng rộng rãi trong lĩnh vực nhận dạng khuôn mặt và được tích hợp sẵn trong thư viện OpenCV Tập dữ liệu này được sử dụng để huấn luyện các mô hình nhận dạng khuôn mặt dựa trên phương pháp "Haar-like features" (tính năng giống Haar)
Tập dữ liệu Haar Cascade bao gồm một loạt các tệp tin XML, mỗi tệp tin đại diện cho một mô hình nhận dạng khuôn mặt cụ thể Mỗi mô hình trong tập dữ liệu tập trung vào việc nhận dạng các đặc điểm phổ biến trong khuôn mặt, chẳng hạn như mắt, mũi, miệng, và các đường viền của khuôn mặt.
Khi sử dụng OpenCV, có thể sử dụng các mô hình nhận dạng khuôn mặt từ tập dữ liệu Haar Cascade để phát hiện và nhận dạng khuôn mặt trong hình ảnh hoặc video.
FER-2013 là tập dữ liệu chứa các hình ảnh khuôn mặt của con người được gắn nhãn c ảm xúc như vui vẻ, buồn bã, sợ hãi, ghét bỏ, tức giận, bất ngờ và trạng thái bình thường Tập dữ liệu này được sử dụng để huấn luyện các mô hình nhận diện khuôn mặt và phân loại cảm xúc trên khuôn mặt.
Hình 11: Hình ảnh cảm xúc của tập dữ liệu FER-2013
Trong quá trình xây dựng mô hình nhận diện khuôn mặt sử dụng FER-2013, các nhà nghiên cứu sử dụng các mô hình học sâu như Convolutional Neural Networks (CNNs) để huấn luyện mô hình CNNs là một loại mô hình học sâu thông dụng trong lĩnh vực học máy và thị giác máy tính, được thiết kế để học cách trích xuất các đặc trưng từ hình ảnh.
Quá trình huấn luyện mô hình s ử dụng FER-2013 bao gồm việc đưa tập dữ liệu vào mô hình và cập nhật trọng số của mô hình dựa trên lỗi giữa đầu ra dự đoán của mô hình và nhãn thực tế của dữ liệu Sau khi mô hình được huấn luyện, nó có thể được sử dụng để phân loại cảm xúc trên các hình ảnh khuôn mặt mới.
Tập dữ liệu FER-2013 chứa 35.887 hình ảnh màu RGB với kích thước 48x48 pixel Tập dữ liệu này được chia thành 3 phần: tập huấn luyện, tập xác thực và tập kiểm tra Tập huấn luyện chứa 28.709 hình ả nh, tập xác thực chứa 3.589 hình ảnh, và tập kiểm tra chứa 3.589 hình ảnh.
Những hình ảnh dữ liệu này thì được lưu trữ dưới dạng file csv:
Hình 12: Đoạn dữ liệu phân bổ của tập dữ liệu FER-2013
Hàng đầu tiên sẽ là tên 3 cột: emotion, pixels, usage Còn lại 35,887 row sẽ lưu thông tin từng ảnh với các chỉ số: (0=Angry, 1 = Disgust, 2 = Fear, 3 Happy, 4 = Sad, 5 = Surprise, 6 = Neutral)
Tập dữ liệu FER-2013 được sử dụng phổ biến trong lĩnh vực học máy và trí tuệ nhân tạo để huấn luyện các mô hình nhận diện khuôn mặt và phân loại cảm xúc
Mô hình này mang lại tính chính xác cao cho tới thời điểm bây giờ, vậy nên em sẽ dùng tập dữ liệu có sẵn này để mô phỏng trong đề tài của mình.
Tổng quan về phần mềm
Google Colab là một sản phẩm giống Jupyter Notebook của Google Research.Nói cách khác, Google C olab là phiên bản được lưu trữ trên đám mây Để sử dụng Google Colab, bạn không cần cài đặt và thời gian chạy hoặc nâng cấp phần cứng máy tính của mình Để đáp ứng các yêu cầu về khối lượng công việc nặng về C PU/GPU của Python Hơn nữa, Colab cung cấp cho bạn quyền truy cập miễn phí vào cơ sở hạ tầng điện toán như bộ lưu trữ bộ nhớ, khả, năng xử lý, đơn vị xử lý đồ họa (GPU) và đơn vị xử lý tensor (TPU).
Các tính năng của google colab
- Cài đặt thư viện đặc biệt.
Colab cho phép bạn cài đặt các thư viện không phải của Colaboratory (AWS S3, GCP, SQL, MySQL, v.v.) không có sẵn trong Đoạn mã.
- Thư viện được cài đặt sẵn
Google Colab cung cấp nhiều thư viện được cài đặ t sẵn để bạn có thể nhập thư viện cần thiết từ Đoạn mã Những thư viện như vậy bao gồm NumPy, Pandas, Matplotlib, PyTorch, TensorFlow, Keras và nhiều thư viện ML khác.
- Mã hóa cộng tác. Đồng mã hóa là không thể thiếu cho các dự án nhóm Nó giúp nhóm của bạn hoàn thành các mốc quan trọng sớm hơn khung thời gian dự kiến Nếu nhóm của bạn cần cộng tác trong thời gian thực trên các dự á n khoa học dữ liệu và
ML, thì Google Collaborative chính là công cụ.
Google Colab sử dụng hạn ngạch bộ nhớ Google Drive của bạn cho mục đích lưu tệp Do đó, bạn có thể tiếp tục công việc từ bất kỳ máy tính nào mà bạn có thể truy cập vào tài khoản Google Drive của mình
Có thể liên kết tài khoản GitHub của mình với Google Colab để nhập và xuất các tệp mã một cách liền mạch
Google Colaboratory hỗ trợ nhiều nguồn dữ liệu khác nhau cho các dự án đào tạo ML và AI của bạn
- Kiểm soát phiên bản tự động.
Google Colab có nhật ký theo dõi lịch sử đầy đủ, ghi lại tất cả các thay đổi kể từ khi tạo tệp Bạn có thể truy cập nhật ký này từ menu Tệp bằng cách nhấp vào tùy chọn Lịch sử sửa đổi.
Vì vậ y, nhóm e m quyết định chọn Google Cola b có s ẵn để thực hiện quá trình huấn luyện mô hình.
Hình 13: Màn hình làm việc của Google Colab
Visual Studio Code (VS Code) là một trình chỉnh sửa mã nguồn mở và miễn phí được phát triển bởi Microsoft Nó được xây dựng trên nền tảng Electron, giúp hỗ trợ đa nền tảng cho Windows, macOS và Linux VS Code là một công cụ lập trình mạnh mẽ, nhẹ nhàng và linh hoạt, được ưa chuộng bởi các lập trình viên trên toàn thế giới.
Một số điểm nổi bật về Visual Studio Code:
- Giao diện người dùng: VS Code có giao diện sạch sẽ và dễ sử dụng Nó cung cấp các tính năng như gói mở rộng, thanh bên, tìm kiếm nhanh và hỗ trợ nhiều cửa sổ chỉnh sửa cùng một lúc.
- Đa ngôn ngữ: VS Code hỗ trợ nhiều ngôn ngữ lập trình phổ biến như C++, Điều này cho phép bạn làm việc trên nhiều dự án khác nhau trong một môi trường duy nhất.
- Hỗ trợ mở rộng: VS Code cho phép bạn mở rộng chức năng của nó thông qua các tiện ích mở rộng (extensions) Có hàng ngàn tiện ích mở rộng có sẵn, cho phép bạn tùy chỉnh và mở rộng khả năng của trình biên soạn mã theo nhu cầu của bạn.
- Gỡ lỗi và kiểm tra: VS Code cung cấp tính năng gỡ lỗi (debugging) tích hợp cho nhiều ngôn ngữ Bạn có thể dễ dàng gỡ lỗi mã nguồn và theo dõi các biến, bước thực thi và điểm dừng.
- Hỗ trợ Git: VS Code tích hợp sẵn hỗ trợ Git, cho phép bạn quản lý phiên bản mã nguồn, xem sự thay đổi, tạo và gửi commit, và là m việc với các nhánh (branches) và kho chứa (repositories) trên Git.
- Tích hợp terminal: VS Code đi kèm với một terminal tích hợ p, cho phép bạn chạy các lệnh và quản lý môi trường phát triển ngay trong trình soạn thảo mã.
- Tích hợp xây dựng và triển khai: VS Code hỗ trợ tích hợp các công cụ xây dựng (build) và triển khai (deployment) cho các dự án phát triển phần mềm.
Hình 14: Màn hình làm việc của Visual Studio Code
Chương trình chính
2.3.1 Chương trình trên Google Colab.
- Import các thư viện và module cần thiết:
- Load và xử lí tập dữ liệu FER-2013:
- Khởi tạo mô hình mạng neuron tích chập:
2.3.2 Chương trình trên visual studio code
- Load các tập dữ liệu:
THỬ NGHIỆM VÀ KẾT QUẢ MÔ PHỎNG
Kết quả mô phỏng
Hình 15: Kết quả phát hiện qua hình ảnh Đối với video.
Hình 16: Kết quả phát hiện cảm xúc vui vẻ
Hình 17: Kết quả phát hiện cảm xúc ngạc nhiên
Hình 18: Kết quả phát hiện cảm xúc bình thường
Hình 19: Kết quả phát hiện cảm xúc sợ hãi
Nhận xét
Kết quả nhận diện biểu cảm trên ảnh đầu ra đạt độ chính xác khoảng 70% Trong khi đó, đối với hình ảnh thu được từ camera, độ chính xác chỉ vào khoảng 50-60% Điều này là do ảnh hưởng của các yếu tố như chất lượng ảnh, điều kiện ánh sáng không thuận lợi hay camera không đủ sắc nét.
Qua đồ án em đã xây dựng được mô hình mạng tự động phá t hiện và nhận diện cảm xúc trên khuôn mặt sử dụng Học Sâu và Trí tuệ nhân tạo Trong báo cáo em đã trình bày tổng quan về bài toán nhận diện cảm xúc và các thuật toán cũng như các mô hình mạng Neural được em lựa chọn sử dụng cho bài toán này. Đồng thời em đã hoàn thiện việc mô phỏng, đi qua từng bước xây dựng một mô hình.
Bên cạnh những kết quả đã đạt được thì vẫn còn tồn tại khá nhiều hạn chế:
●Chưa xây dựng được hệ thống camera phục vụ cho quá trình chụp ảnh đối tượng làm dữ liệu ảnh nhận diện Hiệ n tại em chỉ làm được với một camera là webcam của máy tính laptop
●Chưa thể thiết kế được giao diện để thuận tiện trong việc đọc dữ liệu.
●Do vấn đề thời gian và cấu hình máy tính không đá p ứng yêu cầu nên dữ liệu dùng để huấn luyện cho việc phát hiện và nhận diện còn chưa đủ để hệ thống có thể cho ra dự đoán với độ chính xác cao.
Hướng phát triển trong tương lai
● Phát triển và hoàn thiện thêm dữ liệu cung cấp cho máy tính học để nhận diện.
●Nghiên cứu và phát triển mô hình mạng nơ-ron để cải thiện độ chính xác
●Áp dụng hệ thống máy thiết bị mạnh hơn để việc xử lý được nhanh hơn, cụ thể ở đây chúng ta có thể sử dụng các máy tính có GPU dung lượng lớn, sử dụng server để thực hiện việc huấn luyện và lưu trữ mô hình, tham số của mạng neural
●Ứng dụng hệ thống trên các thiết bị mini PC như Raspberry Pi, Jetson Nano,… kết hợp với cụm camera tạo thành một hệ thống.
●Xây dựng thiết kế một mô hình robot nhân tạo có thể giao tiếp với con người tuỳ vào từng tâm trạng của con người,…