Các cách tiếp cận cho bài toán phát hiện mặt người...4 CHƯƠNG 2 : CÁC THÀNH PHẦN CỦA MỘT HỆ THỐNG PHÁT HIỆN TRẠNG THÁI NGỦ GẬT CỦA NGƯỜI LÁI XE...7 Chương này trình bày về các thành phần
Sự cần thiết của việc giải quyết bài toán
Theo thống kê của Tổ chức Y tế Thế giới, hàng năm có khoảng 1,24 triệu người chết do tai nạn giao thông, tương đương 2,4 người mỗi phút, và 50 triệu người bị thương Trong đó, 80% nguyên nhân tai nạn liên quan đến việc lái xe khi mệt mỏi, ngủ gật và thiếu tập trung, trong đó tài xế ngủ gật chiếm 35% Nghiên cứu này tập trung phát triển một hệ thống phần mềm ứng dụng công nghệ thị giác máy tính để phát hiện tình trạng ngủ gật của tài xế thông qua hình ảnh từ webcam trên xe, từ đó đưa ra cảnh báo nhằm giảm thiểu nguy cơ tai nạn giao thông Đề tài này có tính cấp thiết, thực tiễn và khoa học.
Các phương pháp giải quyết bài toán
Bài toán phát hiện tình trạng ngủ gật của người lái xe ô tô có nhiều phương pháp tiếp cận khác nhau Các phương pháp này bao gồm phân tích chuyển động vùng da quanh mắt, áp dụng các kỹ thuật trích chọn đặc trưng như sóng nhỏ Gabor và mẫu nhị phân cục bộ (LBP), sử dụng đặc trưng Haar để nhận dạng tình trạng mắt, cũng như xác định cảm xúc của người lái Một số phương pháp khác tập trung vào phát hiện hướng khuôn mặt và truy vết, trong khi đó, một số tác giả áp dụng học đại diện, phương pháp SVM, học trạng thái mắt và phân tích nháy mắt để tìm ra giải pháp Cuối cùng, các cách tiếp cận khác sử dụng phân tích Fourier nhanh, học sâu, và phân tích hình ảnh kết hợp với phát hiện nháy mắt để đưa ra kết luận chính xác về tình trạng ngủ gật.
Các phương pháp tiếp cận trong việc phân tích hình ảnh lái xe thường bắt đầu bằng việc phát hiện khuôn mặt người Tiếp theo, quá trình này xác định hình ảnh của mắt và các thành phần khác như cằm và hướng nhìn Cuối cùng, trạng thái của mắt, chẳng hạn như nhấp nháy hoặc đóng, được coi là yếu tố quyết định để đánh giá tình trạng của người lái xe.
Mục đích của bài toán …
Đề tài này tập trung vào việc phát triển một hệ thống nhằm xác định tình trạng ngủ gật của tài xế thông qua việc phân tích hình ảnh khuôn mặt được thu nhận từ camera đặt ở vị trí chính diện với người lái.
Hệ thống phát hiện người lái xe sử dụng các phương pháp HOG và Haar-like để nhận diện khuôn mặt và mắt Trạng thái ngủ ngật được xác định dựa trên thời gian mắt nhắm hoặc mở Hệ thống bao gồm các module: nhận diện khuôn mặt, nhận diện mắt, xác định trạng thái mắt và đưa ra cảnh báo kịp thời.
CƠ SỞ LÝ THUYẾT CỦA BÀI TOÁN …
Giới thiệu
Phát hiện mặt người là một phần quan trọng trong bài toán phát hiện đối tượng, thuộc lĩnh vực Thị giác máy tính từ những năm 90 Đây là một chủ đề nghiên cứu sôi động, thu hút sự quan tâm từ nhiều cơ sở nghiên cứu hàng đầu thế giới Quá trình phát hiện mặt người yêu cầu kiến thức từ nhiều lĩnh vực như Nhận dạng mẫu, học máy, thống kê và sinh trắc học Đầu vào là bức ảnh, đầu ra là vị trí các vùng mặt người trong ảnh Việc phát hiện mặt người đóng vai trò then chốt, giúp thực hiện các bước tiếp theo trong hệ thống thị giác máy tính Một thuật toán phát hiện mặt người hiệu quả sẽ cung cấp hình ảnh khuôn mặt với đầy đủ thành phần và căn chỉnh tốt, từ đó nâng cao độ chính xác trong nhận dạng.
Hình 1.1: Các thông tin có trong ảnh mặt người
Phát hiện mặt người là bước quan trọng trong phân tích hình ảnh, giúp xác định sự hiện diện của người lái xe Nếu không phát hiện được mặt người, hệ thống sẽ đưa ra cảnh báo, cho thấy không có người lái xe Khi mặt người được phát hiện, hệ thống sẽ xác định vị trí của mắt và phân tích trạng thái đóng hay mở của mắt Nếu mắt mở quá lâu, hệ thống sẽ cảnh báo người lái xe có thể đang ngủ gật.
Các vấn đề của bài toán phát hiện mặt người
Xây dựng một hệ thống phát hiện mặt người hiệu quả không phải là điều đơn giản, vì nhiều yếu tố khách quan và chủ quan có thể ảnh hưởng đến độ chính xác trong việc xác định vị trí khuôn mặt trong ảnh Một số vấn đề điển hình có ảnh hưởng lớn đến quá trình này cần được xem xét.
Ánh sáng là yếu tố quan trọng nhất ảnh hưởng đến khả năng phát hiện khuôn mặt, vì những bức ảnh chụp trong điều kiện ánh sáng kém thường không đạt hiệu quả.
Hướng của khuôn mặt, đặc biệt là các biến thể tư thế, ảnh hưởng đến kết quả phát hiện Các bức ảnh chụp ở góc nhìn thẳng cho kết quả phát hiện tốt, trong khi những bức ảnh có góc chụp lớn hơn 45 độ cho kết quả kém hơn nhiều.
Cảm xúc khuôn mặt rất đa dạng và ảnh hưởng lớn đến việc nhận diện Trong trạng thái cảm xúc trung tính, việc phát hiện khuôn mặt diễn ra hiệu quả Tuy nhiên, khi khuôn mặt biểu lộ cảm xúc, các bộ phận như mắt, miệng và toàn bộ khuôn mặt sẽ thay đổi hình dáng, dẫn đến khả năng phát hiện có thể bị sai lệch.
Che khuất khuôn mặt, hay occlusions, có thể xảy ra do các yếu tố khách quan như vật cản hoặc các yếu tố chủ quan như phụ kiện như kính mắt, khăn, trang điểm và tóc Những yếu tố này ảnh hưởng đến khả năng của thuật toán phát hiện khuôn mặt, làm giảm độ chính xác trong việc nhận diện.
Các cách tiếp cận cho bài toán phát hiện mặt người
Hiện nay, có hai phương pháp chính để phát hiện mặt người: phương pháp truyền thống sử dụng các đặc trưng bất biến như Haar-like, LBP, HOG và phương pháp mới dựa trên học sâu Các phương pháp truyền thống mang lại hiệu suất tốt, ổn định và thời gian xử lý nhanh, phù hợp với các hệ thống phần cứng hạn chế Ngược lại, phương pháp học sâu yêu cầu dữ liệu lớn, thời gian huấn luyện dài và phần cứng mạnh mẽ (hỗ trợ GPU) để triển khai Do đó, bài viết này sẽ tập trung vào các phương pháp phát hiện mặt truyền thống.
Phương pháp phát hiện khuôn mặt nổi tiếng đầu tiên sử dụng các đặc trưng Haar-like kết hợp với bộ phân lớp tăng cường Adaboost Các tác giả áp dụng biến đổi Haar wavelets và sử dụng các bộ phân lớp yếu để tạo thành một bộ phân lớp mạnh, giúp phát hiện nhanh chóng các vùng ảnh có khả năng là khuôn mặt Quá trình này thực hiện bằng cách sử dụng một cửa sổ trượt di chuyển qua toàn bộ ảnh đầu vào để xác định vùng có tỉ lệ đáng tin cậy nhất Tại mỗi vị trí của cửa sổ, tỉ lệ giữa điểm trắng và điểm đen trong biến đổi Haar được tính toán và so sánh với ngưỡng; nếu nằm trong ngưỡng, kết luận đó là khuôn mặt, nếu không, quá trình sẽ tiếp tục.
Một phương pháp tương tự sử dụng biến đổi mẫu nhị phân cục bộ đã được đề xuất, thay vì sử dụng bộ phân lớp Adaboost, phương pháp này áp dụng bộ phân lớp dựa trên mạng nơ ron Mặc dù phương pháp sử dụng LBP nhanh hơn so với phương pháp dựa trên đặc trưng Haar, nhưng hiệu năng của nó lại kém hơn với tỷ lệ sai sót cao hơn.
Phương pháp thứ ba sử dụng các đặc trưng HOG, mặc dù chậm hơn hai phương pháp trước, nhưng mang lại kết quả tốt hơn Hệ thống trợ giúp người lái bắt đầu bằng việc phát hiện mặt người trong ảnh Nếu phát hiện có người lái, bước tiếp theo là xác định vị trí mắt, tương tự như phát hiện mặt nhưng với đối tượng khác Cuối cùng, việc phân tích trạng thái của mắt sẽ giúp đưa ra cảnh báo khi cần thiết.
Chúng tôi phát triển một hệ thống cảnh báo cho tài xế ô tô bằng cách phân tích hình ảnh khuôn mặt và mắt, nhằm phát hiện tình trạng buồn ngủ Hệ thống này có các chức năng chính giúp nâng cao an toàn khi lái xe.
+ Phát hiện khuôn mặt trong ảnh thu nhận từ camera sử dụng đặc trưng HOG.
+ tiền xử lý: sử dụng phương pháp chuẩn hóa ánh sáng nhằm tăng tỉ lệ phát hiện mặt người và mắt người trong ảnh.
+ phát hiện vị trí của mắt người dựa vào các đặc trưng Haar-like và bộ phân lớp SVM.
+ Phân tích vị trí và trạng thái của mắt người để cảnh báo nếu người lái xe ở trạng thái ngủ gật.
Trong chương này, chúng tôi đã trình bày các vấn đề cơ bản liên quan đến việc phát hiện mặt người và các bước thiết lập hệ thống cảnh báo cho tình trạng ngủ gật của người lái xe Ở chương tiếp theo, chúng tôi sẽ phân tích chi tiết các thuật toán liên quan và quá trình cài đặt hệ thống.
CÁC THÀNH PHẦN CỦA MỘT HỆ THỐNG PHÁT HIỆN TRẠNG THÁI NGỦ GẬT CỦA NGƯỜI LÁI XE
Hệ thống phát hiện trạng thái ngủ gật của người lái xe
Hình 2.2: Các bước trong hệ thống phát hiện tình trạng ngủ gật của lái xe.
Mục tiêu của nghiên cứu là phát triển một hệ thống phát hiện trạng thái ngủ gật của tài xế bằng cách phân tích hình ảnh khuôn mặt từ camera số lắp trong xe Các bước thực hiện của hệ thống được minh họa trong hình 2.1.
Hệ thống xử lý video từng frame để phân tích và đưa ra cảnh báo phù hợp Đầu tiên, ảnh được chuẩn hóa bằng thuật toán CLAHE (Cân bằng histogram thích nghi giới hạn độ tương phản) Sau đó, ảnh đã được chuẩn hóa sẽ được sử dụng để phát hiện mặt người thông qua hai phương pháp: đặc trưng Haar-like và đặc trưng HOG, nhằm tăng độ chính xác trong việc nhận diện Tiếp theo, hệ thống sẽ phát hiện phần mắt người và phân tích để xác định trạng thái mắt nhắm hay mở Nếu mắt nhắm, hệ thống sẽ đếm trong 3-5 giây và cảnh báo về tình trạng ngủ gật của người lái xe.
Các phần tiếp theo của chương này sẽ trình bày về các thuật toán liên quan tương ứng với các bước của hệ thống.
Chuẩn hóa ánh sáng với bộ lọc CLAHE
Cân bằng histogram thích nghi (Adaptive histogram equalization - AHE) là một thuật toán xử lý ảnh giúp cải thiện độ tương phản của ảnh số Khác với phương pháp cân bằng histogram thông thường, AHE tính toán nhiều histogram cho các vùng tách biệt trong ảnh và sử dụng chúng để tái phân bố độ sáng của các điểm ảnh Nhờ đó, thuật toán này rất hiệu quả trong việc cải thiện độ tương phản cục bộ và chất lượng biên của ảnh ở các khu vực cụ thể.
Phương pháp AHE có nhược điểm làm tăng nhiễu trong các vùng đồng nhất của ảnh Để khắc phục, thuật toán CLAHE (Contrast limited adaptive histogram equalization) ra đời, giúp hạn chế khuếch đại giá trị nhiễu Thuật toán cân bằng histogram nguyên bản sử dụng biến đổi từ histogram để ánh xạ cường độ sáng mới cho các điểm ảnh, hoạt động hiệu quả khi phân bố giá trị điểm ảnh đồng nhất Tuy nhiên, trong trường hợp ảnh có các vùng sáng hoặc tối đáng kể, độ tương phản của những vùng này không được cải thiện đủ tốt.
Thuật toán AHE khắc phục những hạn chế của phương pháp cân bằng histogram truyền thống bằng cách áp dụng một hàm biến đổi cho từng điểm ảnh dựa trên thông tin từ vùng lân cận của nó, như minh họa trong hình 2.2.
Hình 2.3: Minh họa hàm biến đổi của thuật toán AHE.
Các điểm ảnh gần biên được xử lý đặc biệt do thiếu điểm lân cận trong ảnh Một phương pháp phổ biến là thêm hàng và cột giả với giá trị phản chiếu từ các đường và cột ở biên.
Các thuộc tính của thuật toán AHE:
Kích thước của các vùng lân cận là một yếu tố quan trọng trong thuật toán, ảnh hưởng đến độ tương phản Nếu kích thước lớn, các vùng lớn sẽ có độ tương phản giảm, trong khi với kích thước nhỏ, độ tương phản của các vùng nhỏ sẽ được tăng cường.
Khi vùng ảnh có giá trị điểm ảnh đồng nhất, histogram sẽ xuất hiện các đỉnh mạnh, dẫn đến việc hàm ánh xạ chỉ định một giá trị nhỏ cho các điểm ảnh, ảnh hưởng đến vùng lớn của ảnh kết quả Điều này khiến cho nhiễu trong các vùng đồng nhất lớn bị khuếch đại.
Kỹ thuật CLAHE (Contrast Limited Adaptive Histogram Equalization) giới hạn độ tương phản nhằm ngăn chặn việc khuếch đại nhiễu Quá trình này thực hiện bằng cách cắt histogram tại một giá trị xác định trước, được gọi là clip limit, trước khi tính toán các hàm phân bố histogram Giá trị clip limit này phụ thuộc vào việc chuẩn hóa histogram và kích thước vùng lân cận, thường nằm trong khoảng từ 3 đến 4 Kết quả là thuật toán không loại bỏ phần histogram vượt quá giới hạn mà phân bổ lại một cách cân bằng giữa tất cả các giá trị histogram.
Thuật toán CLAHE, như minh họa trong hình 2.3, cho thấy hiệu quả trong việc chuẩn hóa ánh sáng cho ảnh trước khi tiến hành phát hiện khuôn mặt Hai tác dụng chính của thuật toán này là cải thiện độ tương phản của hình ảnh và nâng cao khả năng phát hiện khuôn mặt.
+ Chuẩn hóa cường độ sánh của các bức ảnh, đưa chúng về điều kiện sáng tương tự nhau.
+ Tăng cường các đường nét quan trọng phục vụ cho thao tác phát hiện mặt người, là bước đầu tiên của hệ thống mà đề tài nhắm tới.
Hình 2.4: Kết quả của việc tiền xử lý với bộ lọc CLAHE.
Phát hiện mặt người và mắt người sử dụng đặc trưng Haar-like
Phương pháp phát hiện mặt người sử dụng đặc trưng Haar-like dựa trên các giá trị sai khác giữa độ tương phản của các nhóm điểm ảnh trong các hình chữ nhật liền kề Thay vì dựa vào cường độ sáng, phương pháp này xác định các vùng tối và sáng bằng cách phân tích phương sai độ tương phản Hai hoặc ba nhóm điểm ảnh với độ tương phản khác nhau tạo thành một đặc trưng Haar-like, giúp phát hiện đối tượng trong ảnh Đặc trưng Haar-like có thể điều chỉnh kích thước, cho phép phát hiện các đối tượng với kích thước đa dạng.
Ảnh tích hợp (Integral image) là một phương pháp biểu diễn trung gian giúp tính toán các đặc trưng hình chữ nhật của bức ảnh Nó là một mảng chứa tổng cường độ sáng của các điểm ảnh từ vị trí phía trên bên trái đến vị trí tương ứng Chẳng hạn, nếu A là ảnh gốc và AI là ảnh tích hợp, thì điểm ảnh tại vị trí (x, y) của ảnh tích hợp sẽ được tính toán dựa trên tổng các giá trị cường độ sáng trong vùng xác định.
Việc tính toán giá trị của ảnh tích hợp tại mỗi vị trí (x, y) có thể được thực hiện một cách hiệu quả và nhanh chóng thông qua phương pháp quy hoạch động.
Sử dụng bộ phân lớp theo kiểu dòng thác giúp tối ưu hóa quá trình phát hiện đối tượng trong ảnh Mặc dù việc tính toán các đặc trưng Haar-like rất nhanh chóng, nhưng việc xử lý 180.000 đặc trưng trong một ảnh kích thước 24x24 là không khả thi Tuy nhiên, chỉ một phần nhỏ các đặc trưng này là cần thiết để xác định tiềm năng chứa đối tượng Bằng cách sử dụng một số ít đặc trưng để phân tích, mục tiêu là loại bỏ khoảng 50% các ảnh con không chứa đối tượng, từ đó nâng cao hiệu quả của quá trình phát hiện Quá trình này liên tục diễn ra, với việc tăng cường số lượng đặc trưng được sử dụng ở mỗi bước phân tích.
Mô hình kiểu dòng thác của các bộ phân lớp cho phép phân tích các ảnh con có xác suất cao nhất bằng cách sử dụng tất cả các đặc trưng Haar để phát hiện đối tượng Phương pháp này cũng cho phép điều chỉnh độ chính xác của bộ phân lớp bằng cách tăng cả tỷ lệ báo lỗi sai và tỷ lệ chính xác thông qua việc tăng số pha Tuy nhiên, quá trình ngược lại không mang lại kết quả tương tự Viola và Jones đã đạt được độ chính xác 95% trong việc phát hiện mặt người chỉ với 200 đặc trưng đơn giản.
Trong nghiên cứu này, việc phát hiện khuôn mặt người trong ảnh được thực hiện thông qua các đặc trưng Haar-like, sử dụng thư viện OpenCV và dữ liệu từ các bộ ảnh có sẵn Tương tự, phát hiện mắt người cũng áp dụng phương pháp với các đặc trưng Haar-like Để huấn luyện các bộ phân lớp, cần hai tập ảnh: tập negative không chứa đối tượng cần phát hiện (mặt và mắt người) và tập positive chứa ảnh của đối tượng đó Vị trí của đối tượng trong tập positive phải được xác định trước Đối với việc phát hiện mặt và mắt người, một tập huấn luyện gồm 5000 ảnh negative với kích thước tối thiểu 1 Mb được sử dụng, bao gồm nhiều loại đối tượng như kẹp giấy và phong cảnh tự nhiên, trong khi chỉ có 1500 ảnh từ tập positive được sử dụng.
Việc phát hiện mắt người để xác định trạng thái ngủ gật được thực hiện tương tự như phát hiện mặt người, thông qua việc sử dụng đặc trưng Haar-like.
Phát hiện mặt người sử dụng đặc trưng HOG
Phương pháp trích xuất đặc trưng HOG được phát triển ban đầu để phát hiện người, nhưng sau đó đã được mở rộng và áp dụng hiệu quả trong các bài toán phát hiện đối tượng Các đặc trưng HOG được xây dựng dựa trên việc đếm tần suất xuất hiện của các hướng đạo hàm trong các vùng cục bộ của ảnh.
Cơ sở của HOG (Histogram of Oriented Gradients) là sử dụng thông tin về hình dáng và vẻ bề ngoài của đối tượng trong ảnh, được biểu diễn qua sự phân bố của cường độ gradient và hướng biên Phương pháp này chia ảnh thành các "tế bào" (cells) nhỏ, mỗi cell sẽ có một histogram thể hiện các hướng của gradients Các histogram này được kết hợp để tạo thành mô tả cho ảnh ban đầu Để cải thiện độ chính xác trong nhận dạng, các histogram cục bộ được chuẩn hóa độ tương phản dựa trên ngưỡng cường độ từ một vùng lớn hơn gọi là khối Kết quả là vector HOG chuẩn hóa, giúp tăng cường tính bất biến với sự thay đổi của ánh sáng.
Việc tính một vector HOG của một ảnh gồm các bước sau: Tính gradient, gán hướng, tính histogram của các khối và chuẩn hóa các khối.
Tính gradient: Bước này là bước thứ nhất và được thực hiện qua việc nhân chập hai nhân sau với ảnh gốc:
Dx = [-1 0 1] và D = [1 0 -1] ,y T trong đó là ký hiệu của phép chuyển vị ma trận T
Với một ảnh input I, 2 ảnh đạo hàm riêng theo 2 hướng được sinh ra qua 2 phép nhân chập: I = I*D và I = I*D x x y y
Thành phần cường độ (magnitude) và hướng (orientation) được tính toán bằng công thức |G| = sqrt(Ix^2 + Iy^2) Kết quả của phép lấy đạo hàm cho hướng được thể hiện qua công thức θ = arctan(Iy/Ix), như mô tả trong hình ảnh sau.
Hình 2.6: Ví dụ về ảnh và các đạo hàm của nó.
Gán hướng trong HOG sử dụng đạo hàm của ảnh để xác định thành phần hướng tại từng điểm ảnh trong mỗi cell Các giá trị hướng được chia thành 9 vùng từ 0 đến 360 độ, với mỗi vùng tương ứng với một giá trị gán cụ thể Cụ thể, các giá trị trong khoảng [0, 360/9) được gán bằng 1, [360/9, 2*360/9) gán bằng 2, và tiếp tục như vậy Các histogram của từng cell được tính toán một cách độc lập để phục vụ cho quá trình nhận dạng.
Để xử lý hiệu quả các thay đổi về ánh sáng và độ tương phản, các giá trị gradient được chuẩn hóa cục bộ bằng cách nhóm các cell thành các khối liên kết không gian Kết quả là một vector HOG, được tạo thành từ sự kết hợp của các histogram đã được chuẩn hóa từ tất cả các khối.
Chuẩn hóa khối là quá trình quan trọng trong xử lý dữ liệu, với nhiều kỹ thuật có thể áp dụng Giả sử vector cần chuẩn hóa có giá trị chuẩn || ||, có thể sử dụng các chuẩn k=1, 2 và hằng số e để thực hiện chuẩn hóa theo các công thức khác nhau.
Phát hiện mặt người với các đặc trưng HOG: Kỹ thuật phát hiện mặt người với đặc trưng HOG gồm các bước sau:
Bước 1: Trích xuất đặc trưng HOG cho P ảnh mặt người được chuẩn bị trước.
Bước 2: Trích xuất đặc trưng HOG cho N (N lớn hơn rất nhiều so với P) ảnh không phải là ảnh mặt người.
Bước 3: Một bộ phân lớp SVM phi tuyến sẽ được áp dụng cho bước học với P vector positive và N vector negative đã có ở hai bước trên.
Trong bước 4, đối với mỗi bức ảnh trong N ảnh negative, ta sử dụng một cửa sổ trượt để kiểm tra tất cả các vị trí khả thi Tại mỗi vị trí, tính toán vector HOG của cửa sổ và đưa vào bộ phân lớp Nếu bộ phân lớp xác định sai một cửa sổ là ảnh mặt, ghi lại vector tương ứng cùng với xác suất phân lớp.
Bước 5: Sắp xếp các mẫu nhận dạng sai ở bước 4 theo mức xác suất nhận dạng sai và cho bộ phân lớp học lại với các mẫu này.
Bước 6: Sử dụng bộ phân lớp để phát hiện mặt người trong các ảnh cần phát hiện.
Trong bài viết này, chúng tôi trình bày phương pháp phát hiện khuôn mặt người sử dụng đặc trưng HOG thông qua thư viện mã nguồn mở dlib Hình ảnh dưới đây minh họa kết quả của quá trình phát hiện khuôn mặt.
Trong chương này, chúng tôi đã trình bày chi tiết về các thuật toán liên quan đến các bước của hệ thống phát hiện mặt người sử dụng HOG Ở chương tiếp theo, đề tài sẽ tập trung vào việc cài đặt hệ thống, quản lý dữ liệu và đánh giá hiệu năng của hệ thống.
Phát hiện trạng thái ngủ gật bằng cách phân tích mắt người
Hệ thống phân tích đặc điểm các điểm mốc của mắt người để xác định xem người lái xe có đang ngủ gật hay không, dựa trên việc phát hiện mắt Phân tích này được trình bày rõ ràng trong hình 2.7 dưới đây.
Hệ thống phân tích đặc điểm của các điểm mốc trên mắt người bằng cách tính tỉ lệ giữa tổng chiều dài của hai cặp điểm (p1, p5 và p2, p4) theo chiều dọc so với hai lần chiều dài của hai điểm đầu mút (p0, p3) Trung bình tỉ lệ này được tính toán, và nếu giá trị nhỏ hơn ngưỡng 0.3, mắt người được xác định là trong trạng thái đóng Khi phát hiện trạng thái đóng liên tiếp trong 48 khung hình, hệ thống sẽ phát ra âm thanh cảnh báo.
XÂY DỰNG HỆ THỐNG …
Thư viện OpenCV và dlib
Để thực hiện cài đặt hệ thống, chúng tôi đã chọn ngôn ngữ lập trình C++ cùng với bộ công cụ Visual Studio 2015 Update 2, đồng thời sử dụng hai thư viện mã nguồn mở là OpenCV và dlib.
Hình 3.9: Cấu trúc cơ bản của thư viện OpenCV.
OpenCV (http://opencv.org) là một trong những thư viện mã nguồn mở nổi tiếng nhất thế giới, với một cộng đồng phát triển đông đảo và ứng dụng đa dạng trong cả lĩnh vực thương mại và nghiên cứu Thư viện này vượt trội về số lượng tài liệu hỗ trợ như sách, hướng dẫn và diễn đàn, giúp người dùng dễ dàng tiếp cận Hơn nữa, OpenCV tương thích với nhiều nền tảng phần mềm và phần cứng khác nhau, cho phép lập trình viên và nhà phát triển sử dụng một cách linh hoạt mà không cần lo lắng về vấn đề tương thích.
Vào năm 1999, Gary Bradski, nhà nghiên cứu của Intel, đã phát triển OpenCV dưới dạng mã nguồn mở nhằm thúc đẩy nghiên cứu và ứng dụng trong lĩnh vực thị giác máy tính và trí tuệ nhân tạo OpenCV được viết bằng C và C++, tương thích với các hệ điều hành Windows, Linux, và Mac OS X, đồng thời hỗ trợ nhiều ngôn ngữ lập trình như Python, Java, và Matlab Ngoài ra, OpenCV còn có khả năng hoạt động trên các nền tảng di động Android và iOS Dự án này nhận được sự hỗ trợ từ Intel, Google, và đặc biệt là công ty Itseez, mà Intel đã mua lại gần đây Hiện tại, công ty Arraiy đã trở thành nhà bảo trợ cho OpenCV và trang web opencv.org.
OpenCV được thiết kế để tối ưu hiệu năng cho các ứng dụng thời gian thực, ban đầu được phát triển bằng C và C++ Tuy nhiên, từ phiên bản 3.0 trở đi, OpenCV đã chuyển hoàn toàn sang C++ và áp dụng các kỹ thuật lập trình song song để khai thác tối đa sức mạnh của phần cứng đa nhân Thư viện IPP của Intel được tích hợp vào OpenCV nhằm tăng tốc độ xử lý các thao tác ảnh cơ bản trên hệ thống sử dụng chip Intel.
OpenCV là một nền tảng mạnh mẽ giúp phát triển nhanh chóng các ứng dụng thị giác máy tính, với hơn 500 hàm phục vụ nhiều lĩnh vực như kiểm soát sản xuất, xử lý ảnh y học, an ninh, giao diện người dùng, và nhận dạng Thư viện này còn tích hợp module học máy với các thuật toán đa năng, cho phép kết hợp giữa thị giác máy tính và trí tuệ nhân tạo.
Hiện nay, có nhiều thư viện hỗ trợ xử lý ảnh và thị giác máy tính, nhưng chúng tôi chọn OpenCV vì những lý do nổi bật sau đây.
OpenCV là một thư viện mã nguồn mở với giấy phép bản quyền cho phép người dùng phát triển ứng dụng mà không phải trả phí bản quyền Điều này có nghĩa là các ứng dụng được xây dựng bằng OpenCV không yêu cầu công bố mã nguồn, mang lại sự linh hoạt cho các nhà phát triển.
OpenCV là công cụ được ưa chuộng bởi nhiều công ty công nghiệp lớn và các trung tâm nghiên cứu hàng đầu trên toàn cầu, với một lượng người dùng đông đảo tại các quốc gia như Trung Quốc, Nhật Bản, Nga, Châu Âu và Israel.
Các ứng dụng sử dụng OpenCV có hiệu năng vượt trội nhờ vào việc tận dụng tối đa các nền tảng phần cứng đa nhân thông qua các thư viện như IPP và TBB Bên cạnh đó, tính mở cao của OpenCV cho phép dễ dàng tích hợp với nhiều thư viện quan trọng khác như Caffe, Intel’s MKL, OpenBLAS và TORCH.
OpenCV cung cấp nhiều thao tác xử lý cơ bản cho ứng dụng thực tế, giúp các nhà phát triển tập trung vào các nhiệm vụ chính mà không phải lo lắng về những công việc lặp đi lặp lại.
Xét về cấu trúc, OpenCV bao gồm nhiều thư viện con (xem thêm ở hình 3.1), cụ thể sau đây là các thư viện cốt lõi:
+ core: thư viện chứa các kiểu dữ liệu cơ bản và các thao tác xử lý cơ bản làm nền tảng cho các thành phần khác của OpenCV.
+ imgproc: module xử lý ảnh chứa các thao tác biến đổi hình ảnh, bao gồm các bộ lọc và các thao tác nhân chập.
Thư viện highgui, bắt đầu từ phiên bản 3.0, đã được phân chia thành các thư viện con như imgcodecs, videoio và highgui Thư viện này cung cấp các hàm hỗ trợ giao diện người dùng, cho phép hiển thị hình ảnh và nhận dữ liệu đầu vào từ người dùng, tạo ra một công cụ đơn giản để xây dựng giao diện người dùng.
Thư viện video cung cấp các hàm cần thiết để thực hiện việc đọc và ghi dữ liệu video, trong khi module features2d chứa các thuật toán để phát hiện, mô tả và đối sánh các điểm đặc trưng của ảnh, hay còn gọi là keypoint features.
Module objdetect cung cấp các thuật toán để phát hiện các đối tượng cụ thể như khuôn mặt và người đi bộ, đồng thời cho phép người dùng xây dựng bộ phát hiện đối tượng riêng Trong khi đó, thư viện ml là một module độc lập, bao gồm nhiều thuật toán học máy được tối ưu hóa để làm việc hiệu quả với cấu trúc dữ liệu của OpenCV.
GPU, được chia thành nhiều module CUDA từ phiên bản 3.0, chứa cài đặt của hầu hết các hàm thư viện tối ưu cho việc chạy trên các bộ xử lý đồ họa CUDA Một số thao tác chỉ có sẵn với mã CUDA, trong đó một vài thao tác mang lại hiệu suất rất tốt nhưng yêu cầu phần cứng sử dụng chip đồ họa của Nvidia.
Từ phiên bản 3.0, thư viện OpenCV đã chuyển các thuật toán có bản quyền hoặc có điều kiện hạn chế về sử dụng vào module opencv_contrib/xfeatures2d, trong đó có SIFT, cho phép miễn phí trong nghiên cứu học thuật nhưng yêu cầu trả bản quyền cho các ứng dụng thương mại Điều này nhằm giúp người dùng nhận thức rõ ràng khi áp dụng các thuật toán này trong các dự án thương mại Ngoài ra, module contrib còn chứa các thuật toán mới đang trong quá trình xem xét để có thể được đưa vào bản OpenCV chính thức.
Dữ liệu và giao thức đánh giá hiệu năng của hệ thống
Chúng tôi thực hiện đánh giá hiệu năng hệ thống bằng cách sử dụng cơ sở dữ liệu DrivFace, một nguồn dữ liệu công cộng chứa các hình ảnh tĩnh từ camera gắn trên ô tô trong môi trường thực tế Ngoài ra, chúng tôi cũng thu thập video từ YouTube để phục vụ cho các thử nghiệm liên quan.
Hiện nay, chưa có cơ sở dữ liệu công cộng nào được công bố cho việc phát triển hệ thống trợ giúp và cảnh báo người lái xe, dẫn đến sự thiếu khách quan trong việc so sánh và đánh giá các hệ thống thực tế Các trung tâm nghiên cứu lớn sở hữu cơ sở dữ liệu riêng, nhưng do được tài trợ bởi các nhà công nghiệp, họ chưa công khai thông tin này.
Cơ sở dữ liệu DrivFace chứa 606 ảnh tĩnh của 4 người được ghi lại trong môi trường thực tế, với độ phân giải 640x480 pixel Các bức ảnh được thu thập trong vài ngày và đi kèm với dữ liệu về khung bao ngoài khuôn mặt, vị trí các điểm quan trọng như mắt, mũi, mồm, và hướng nhìn của người lái xe Trong số 4 người, có 2 nam và 2 nữ, với 3 hướng nhìn cơ bản là nhìn sang phải.
45 o tới -30 ), nhìn sang trái (góc nhìn từ 30 tới 45 ) và góc nhìn thẳng (góc nhìn o o o từ -15 tới -15 o o ).
Hình 3.11: Một số ảnh từ cơ sở dữ liệu DrivFace.
Với các video thu thập từ YouTube.com chúng tôi tiến hành xử lý từng frame và đưa ra kết quả trực tiếp trên giao diện chương trình.
Kết quả thực nghiệm
Kết quả phát hiện mặt người: Thực hiện thử nghiệm trên cơ sở dữ liệu
DrivFace sử dụng hai phương pháp đặc trưng Haar-like và HOG để phát hiện khuôn mặt người, đạt tỷ lệ thành công 98.35% với 596/606 ảnh được nhận diện Mặc dù kết quả phát hiện khuôn mặt rất lý tưởng, tỷ lệ phát hiện mắt người chỉ đạt 91% với 557/606 ảnh Điều này là bình thường do kích thước nhỏ của mắt và sự thay đổi trong điều kiện góc nhìn, làm cho việc xác định chính xác vị trí mắt trở nên khó khăn.
Kết quả thử nghiệm với các dữ liệu video: thực hiện thử nghiệm với các file video cho thấy:
Việc phát hiện khuôn mặt người đạt tỷ lệ thành công cao, tuy nhiên, trong một số khung hình bị ảnh hưởng bởi ánh sáng, kết quả vẫn chưa tốt Do đó, cần thực hiện thêm các nghiên cứu sâu hơn để cải thiện khả năng phát hiện khuôn mặt, đặc biệt là khi lái xe trong điều kiện ban đêm.
Việc phát hiện khuôn mặt người qua hình ảnh có tỷ lệ thành công thấp hơn so với các bức ảnh trong cơ sở dữ liệu DrivFace, chủ yếu do ảnh hưởng của các yếu tố ánh sáng.
+ Việc phát hiện trạng thái ngủ gật có tỉ lệ thành công chấp nhận được ở mức cơ bản.