Phát hiện và cảnh báo buồn ngủ của tài xế lái xe dùng thị giác máy tính

PHÁT HIỆN VÀ CẢNH BÁO BUỒN NGỦ CỦA TÀI XẾ LÁI XE DÙNG THỊ  
GIÁC MÁY TÍNH  
DETECTING AND WARNING DROWSINESS STATE OF THE DRIVER  
USING COMPUTER VISION  
Trần Quang1, Lê Mỹ Hà1  
1Trường đại học Sư phạm Kỹ thuật TP.HCM  
TÓM TẮT  
Tai nạn giao thông là một trong những vấn đề dai dẳng và khó kiểm soát của mỗi quốc  
gia nói chung và Viêt Nam nói riêng. Hằng ngày chúng ta đều thấy các thông tin báo đài về các  
vụ tai nạn giao thông nghiêm trọng, có những vụ đặc biệt nghiêm trọng gây ra rất nhiều thương  
vong. Ở Hoa Kì, theo bài đăng thống kê năm 2018, 10% các vụ tai nạn là do tài xế buồn ngủ khi  
đang lái xe. Ở Việt Nam, các vụ tai nạn tương tự như vậy xảy ra liên tục gần đây làm dấy các dư  
luận về vấn đề an toàn khi tham gia giao thông trên các loại xe cơ giới. Trong bài báo này, tác  
giả đề xuất một ứng dụng để giải quyết một phần nào đó về vấn đề đó. Đó là thiết bị phát hiện và  
cảnh báo tài xế buồn ngủ khi đang lái xe. Thiết bị được thực hiện dựa trên phần cứng là board  
kit Raspberry có đặc điểm như một máy tính thu nhỏ có kích thước xấp xỉ chiếc điện thoại cầm  
tay, chạy hệ điều hành mở, được trang bị bộ vi xử lý mạnh mẽ, mức tiêu thụ điện năng thấp, giá  
thành rẻ, cho phép cấu hình cho kit Raspberry như một máy tính xử lý các bài toán. Kĩ thuật  
được áp dụng vào ứng dụng là mạng học sâu, cụ thể là mạng Convolution Neural Netwwork  
(CNN). Các dấu hiệu sinh lý và cơ học để nhận biết tài xế buồn ngủ nhịp tim, độ phản ứng điện  
của da, cơ mắt, cơ mặt, ngáp, … Tuy nhiên trực quan nhất vẫn là mắt nhắm hay mở, nó quyết  
định trực tiếp đến tính mạng của người tài xế khi đang lái xe. Vì vậy, mạng CNN sẽ được áp  
dụng để học và tạo ra mô hình có khả năng nhận dạng trực quan và chính xác.  
Từ khóa: Học Sâu; Mạng Nơ-ron nhân tạo; Mạng CNN, Buồn Ngủ, Raspberry Pi.  
ABSTRACT  
Traffic accidents are one of the persistent and difficult-to-control problems of each country  
in general and Vietnam in particular. Every day we see news reports about serious traffic  
accidents, there are particularly serious cases that cause a lot of casualties. In the United States,  
according to the 2018 statistical post, 10% of accidents are caused by drowsiness drivers while  
driving. In Vietnam, similar accidents that have occurred recently have caused a lot of public  
opinion about safety issues when traveling on motor vehicles. In this article, the author proposes  
an application to solve a certain part of that problem. It is a device that detects and warns  
drivers when they are driving. The hardware-based device is a Raspberry board kit  
characterized by a miniature computer the size of a handheld phone, running an open operating  
system, equipped with a powerful, low-power processor. Low power consumption, low cost,  
allows the Raspberry kit to be configured as a computer to solve problems. The technology  
applied to the application is deep learning network, namely Convolution Neural Netwwork  
(CNN). Physiological and mechanical signs to identify driver is sleepy heartbeat, electrical  
response of skin, eye muscles, facial muscles, yawning, etc. However, the most intuitive is still  
eyes closed or open, it directly determines the driver's life while driving. Therefore, the CNN  
network will be applied to learn and create models with intuitive and accurate identification.  
Keywords: Deep Learning; Neural Network; Convolutional neural network; Drowsiness; Raspberry  
Pi  
vấn đề nhức nhối ở Việt Nam. Thống kê từ  
Ủy ban an toàn giao thông Quốc gia cho  
1. GIỚI THIỆU  
Tai nạn giao thông từ lâu nay luôn là  
thấy trong quý I năm 2018, cả nước xảy ra  
gần 5.000 vụ tai nạn giao thông, làm chết  
2.149 người, bị thương 3.627 người. Năm  
2017, cả nước có hơn 20.000 vụ tai nạn giao  
thông, khiến 8.279 người chết và hơn  
17.000 người bị thương. So với cách đây 5  
năm, lượng người chết đã giảm đi, nhưng  
chưa bao giờ thấp hơn con số 8.000. Thậm  
chí năm 2016, số người chết vì tai nạn giao  
thông còn tăng lên 14 người so với năm  
trước đó. “Có thể nói chúng ta sống trong  
thời bình nhưng số người chết và bị thương  
do tai nạn giao thông giống như những năm  
chiến tranh”, theo Bộ trưởng Bộ Giao thông  
Vận tải Nguyễn Văn Thể, tại lễ trao giải  
cuộc thi báo chí viết về an toàn giao thông  
2017. Một trong những tác nhân mà không  
ai có thể kiểm tra, ngăn chặn được, đó là  
việc ngủ gật của tài xế, đây chính là nguyên  
nhân gây ra tai nạn giao thông hàng đầu trên  
thế giới. Điển hình như vụ tai nạn xe đi rước  
dâu thảm khốc tại tỉnh Quảng Nam vừa qua  
(30/7/2018), khiến 13 người tử vong.  
Nguyên nhân của việc ngủ gật nói trên là do  
tài xế này đã lái xe 12 giờ đồng hồ liên tục.  
2. CÁC NGHIÊN CỨU LIÊN QUAN  
Trong nước: Đề tài “Nhận diện chớp  
mắt và cảnh báo buồn ngủ khi lái xe trên  
nền Windows và Android” của sinh viên Lê  
Thế Hải và Lê Thanh Hòa (ngành Viễn  
thông, Khoa Điện - Điện tử, niên khóa 2007  
– 2012, Trường Đại học Bách Khoa  
TP.HCM). Đây là chương trình phần mềm  
trên hệ điều hành Android cho điện thoại và  
máy tính bảng nhận biết được dấu hiệu buồn  
ngủ thông qua trạng thái đóng mở mắt và  
phát âm thanh. Tuy nhiên, đề tài cũng thể  
hiện một số nhược điểm như: không theo  
dõi được khuôn mặt trong một số trường  
hợp quay trái, quay phải một góc lớn hơn 40  
độ hoặc cúi đầu lớn hơn 10 độ - 15  
độ/ngẩng đầu lên quá 30 độ… cũng như  
chưa có phần cứng thiết bị riêng và camera  
điện thoại chỉ xử lý được điều kiện ánh sáng  
giới hạn.  
Sản phẩm máy chống buồn ngủ của  
Nguyễn Ngọc Đức, học sinh lớp 12C1  
trường THPT Nguyễn Xuân Nguyên (Thanh  
Hóa), đã giành giải Nhì cấp Quốc gia tại  
cuộc thi sáng tạo Khoa học kỹ thuật dành  
cho học sinh THPT năm 2016, được thiết kế  
theo mô hình của một chiếc máy tính thu  
nhỏ. Thiết bị dùng phần cứng là một máy  
tính mini, phần mềm được lập trình theo  
ngôn ngữ C# có sử dụng mã nguồn mở và  
một số thư viện về nhận dạng mắt và khuôn  
mặt. Nguyên lý hoạt động của máy chống  
buồn ngủ là khi camera ghi lại hình ảnh của  
lái xe, thiết bị sẽ nhận diện ra điểm khác biệt  
trên khuôn mặt. Từ đó, phần mềm sẽ phân  
tích để tìm ra được dấu hiệu buồn ngủ qua  
ánh mắt bằng biểu đồ ánh sáng để phân biệt  
độ sáng, tối của mắt. Sau khi thiết bị nhận  
dạng xong ánh mắt sẽ tiếp tục đưa ra các  
phương án để xử lý, cảnh báo bằng giọng  
nói và còi báo động. Tuy nhiên, đây là một  
sản phẩm mô hình thử nghiệm chỉ dừng lại  
ở việc cảnh báo mà chưa có biện pháp hạn  
chế tai nạn cho lái xe cũng như chưa được  
ứng dụng vào thực tế.  
Các nguyên nhân gây ra trạng thái buồn  
ngủ cho tài xế:  
- Trong thực tế, di chuyển xe đường dài  
hoặc vào ban đêm là lúc người lái xe dễ rơi  
vào trạng thái buồn ngủ nhất, phản xạ của  
người lái sẽ chậm lại, độ tỉnh táo giảm, rất  
dễ căng thẳng và khả năng xử lý tình huống  
thiếu chính xác.  
- Không những vậy, để tăng chuyến,  
nhiều tài xế ô tô đường dài vắt kiệt sức liên  
tục quay vòng dẫn đến tình trạng buồn ngủ.  
- Hầu hết tài xế gây tai nạn đều có thời  
gian thức kéo dài, ngủ ít hơn 5 giờ vào đêm  
trước khi gặp nạn do các nhà xe khách hiện  
nay đều tận dụng lái xe ít nhất từ 12 - 14  
giờ/ngày.  
- Đặc biệt, việc sử dụng rượu bia và rối  
loạn giấc ngủ có tác dụng cộng gộp làm suy  
giảm hiệu suất của các cơ quan trong cơ thể,  
dẫn đến nhiều sai sót nghiêm trọng.  
Kết quả nghiên cứu ngoài nước. Tại  
triển lãm công nghệ CES đầu năm 2018,  
Huyndai giới thiệu hệ thống chống ngủ gật  
cho tài xế có tên DDREM. Hệ thống  
- Chưa có thiết bị giúp các tay lái nhận  
ra mình đang trong tình trạng báo động để  
kiểm soát cơn buồn ngủ sau vô lăng.  
DDREM sử dụng một camera hồng ngoại để  
theo dõi và phân tích các chuyển động của  
mắt cũng như khuôn mặt để phát hiện dấu  
hiệu buồn ngủ của tài xế. Hệ thống này cũng  
giám sát hệ thống hỗ trợ lái xe để xem xe có  
đang đi chệch làn đường không và điều  
chỉnh sao cho xe đi đúng làn đường trở lại.  
Nếu hệ thống xác nhận người lái đã ngủ và  
không phản hồi gì thì DDREM sẽ chuyển xe  
sang chế độ lái tự động cấp độ 4 để có thể tự  
tìm một nơi an toàn và dừng xe lại. Công  
nghệ này tương tự chức năng cảnh báo của  
hệ thống tự lái cấp độ 3 trên chiếc Audi A8  
cũng dùng camera phân tích vị trí và chuyển  
động của đầu và mắt để tạo ra dữ liệu cho  
robot AI phân tích. Nếu mắt của lái xe vẫn  
nhắm trong một khoảng thời gian dài, hệ  
thống sẽ nhắc người lái xe tiếp tục công việc  
lái xe, tránh trường hợp lái xe ngủ gục rất  
nguy hiểm.  
hoàn thiện trước khi xe xuất xưởng. Trong  
khi đó, việc nghiên cứu chế tạo thiết bị theo  
dõi các thông số sinh học của tài xế khi lái  
xe với độ ổn định và chính xác cao là một  
nhiệm vụ rất lớn, đòi hỏi về thời gian, kinh  
phí và khối lượng rất lớn kiến thức chuyên  
môn đa ngành bao gồm cả y học và kỹ thuật.  
Chính vì những lý do trên, tác giả chọn  
hướng tiếp cận vần đề thứ (2) – phát hiện  
dấu hiệu buồn ngủ dựa trên biểu hiện khuôn  
mặt của tài xế, cụ thể ở đây là độ nhắm mở  
mắt và thời gian nhắm mắt, phương pháp  
này đã được rất nhiều các hãng xe lớn như  
BMW, Mercedes-Benz, Audi, Huyndai,  
Cadillac trong hệ thống nhận cảnh báo mất  
tập trung cho tài xế tên các dòng xe sang của  
họ.  
Từ những thực tiễn trình bày ở trên có  
thể nhận thấy rằng việc nghiên cứu, thiết kế  
và chế tạo thiết bị cảnh báo ngủ gật cho tài  
xế có độ chính xác cao là việc cấp bách và  
rất cần thiết để giảm tỷ lệ tai nạn giao thông  
hiện nay. Vì thế, tác giả lựa chọn và thực  
hiện đề tài: “Phát hiện và cảnh báo buồn ngủ  
của tài xế lái xe dùng thị giác máy tính”  
(Hình 1)  
Theo như bài báo “Driver Drowsiness  
Detection System and Techniques: A  
Review” của tác giả Vandna Saini và Rekha  
Saini đăng tên tạp chí (IJCSIT) International  
Journal of Computer Science and  
Information Technologies, Vol. 5 năm 2014  
tại Ấn Độ [1] trình bày về các kỹ thuật phát  
hiện ngủ gật thì việc phát hiện trạng thái  
buồn ngủ của tài xế có thể chia ra làm 3  
hướng tiếp cận. Thứ nhất, Thông số phương  
tiện dựa trên quãng đường đã đi, độ lệch làn  
đường, số vòng quay của vô lăng, tốc độ đạp  
chân ga… Các thông số này được theo dõi  
liên tục, nếu có bất kỳ thay đổi nào trong số  
đó vượt qua một ngưỡng xác định cho thấy  
khả năng người lái xe có dấu hiệu buồn ngủ.  
Thứ hai, biểu hiện trên khuôn mặt của tài xế  
bao gồm việc ngáp, thời gian nhắm mắt, số  
lần chớp mắt, hướng nhìn… Cuối cùng,  
Thông số về sinh lý dựa trên mối tương  
quan giữa tín hiệu điện tâm đồ (ECG) và  
điện nhãn đồ (EOG), trạng thái buồn ngủ  
được xác định trên thông tin về nhịp tim,  
huyết áp và sóng não. Theo đó, tác giả nhận  
thấy việc giám sát các thông số trên phương  
tiện là điều rất khó thực hiện khi phải tác  
động trực tiếp vào cả phần cứng và phần  
mềm của xe, việc thiết kế bộ giám sát các  
thông số của xe và đưa ra cảnh báo nên  
được nghiên cứu bởi các nhà sản xuất và  
Hình 1. Quá trình thực hiện  
3. THÀNH PHẦN PHẦN CỨNG  
Trong phần này, tác giả cung cấp cái  
nhìn tổng quan về nền tảng phần cứng, có  
liên quan đến máy tính nhúng Raspberry Pi  
3, máy ảnh Raspberry Pi. Sơ đồ khối phần  
cứng được thể hiện trong hình 2.  
Hình 2. Sơ đồ khối phần cứng của mô hình  
3.1 Raspberry Pi 3 Model B  
Raspberry Pi là một máy vi tính rất nhỏ  
gọn, kích thước hai cạnh chỉ cỡ một cái thẻ  
ATM. Người ta đã tích hợp mọi thứ cần thiết  
trong đó để bạn sử dụng như một cái máy vi  
tính. Trên bo mạch của Pi có CPU, GPU,  
RAM, khe cắm thẻ microSD, Wi-Fi,  
Bluetooth và 4 cổng USB 2.0. Khi mua Pi  
về chỉ việc cài hệ điều hành (thực ra là  
copy/paste cái thư mục vô thẻ nhớ), gắn  
chuột, bàn phím và màn hình là bắt đầu sử  
dụng được rồi (hoặc cao cấp hơn xíu là  
remote desktop từ một máy khác qua, hoặc  
SSH). Lý do chọn sử dụng Raspberry Pi là  
vì nó có thiết kế nhỏ gọn, dễ dàng lắp đặt  
lên mô hình xe điều khiển. Ngoài ra nó còn  
hỗ trợ giao tiếp với các thiết bị ngoại vi  
(camera, usb) và các giao thức truyền nhận  
như: Bluetooth, I2C, SPI… điều này giúp  
việc lập trình các hệ thống nhúng trở nên dễ  
dàng hơn.  
Hình 3. Sơ đồ khối giải thuật của hệ thống  
4. PHƯƠNG PHÁP ĐỀ XUẤT  
Sơ đồ giải thuật hệ thống được mô tả  
như hình 3:  
4.1. Phương pháp mô tả đặc trưng  
Histogram of Oriented Gradient (HOG  
Các đặc trưng HOG [2] ban đầu được  
thiết kế để phát hiện người (human  
detection) trong dữ liệu ảnh nhưng sau đó  
được mở rộng và được sử dụng rộng rãi cho  
các bài toán phát hiện đối tượng nói chung  
(object detection). Phương pháp HOG dựa  
trên việc đếm số lần xuất hiện của các  
hướng đạo hàm (gradient orientation) trong  
các vùng cục bộ của ảnh. Bản chất của  
phương pháp HOG là các thông tin về hình  
dáng và vẻ bề ngoài của các đối tượng cục  
bộ trong ảnh có thể được mô tả bằng cách  
sử dụng thông tin về sự phân bố của các  
cường độ gradient (intensity gradients) hoặc  
của các hướng biên (edge directions).  
3.2 Raspberry Pi Camera Module  
Raspberry Pi Camera được tích hợp  
camera 5 megapixel có độ nhạy sáng cao, có  
thể chụp tốt ở nhiều điều kiện ánh sáng khác  
nhau, cả trong nhà và ngoài trời. Điểm đặc  
biệt mà camera mang lại đó là chụp hình độ  
nét cao trong lúc quay phim. Khi sử dụng  
Raspberry Pi Camera chúng ta sẽ không tốn  
thêm cổng USB nào cho camera vì camera  
được gắn chắc chắn vào socket CSI. Điều  
này giúp hạn chế tình trạng nghẽn băng  
thông cho chip xử lý USB trên mạch  
Raspberry.  
Các bước cơ bản của việc tính một  
vector HOG cho một ảnh gồm có: Tính  
gradient, gán hướng vào các vùng giá trị  
khác nhau, tính histogram của các khối và  
cuối cùng là chuẩn hóa các khối.  
Tính gradient: Đây là bước đầu tiên  
trong phương pháp HOG và thường được  
thực hiện bằng hai phép nhân chập ảnh gốc  
với 2 nhân 1 chiều tương ứng với các toán  
tử lấy đạo hàm ảnh theo hai hướng Ox và  
Oy, cụ thể là:  
3.3 Arduino Uno R3  
Arduino Uno được điều khiển bởi vi  
điều khiển Atmega328. Nó có 14 đầu vào/ra  
(trong đó có 6 chân có thể sử dụng như đầu  
ra PWM), 6 ngõ ra Analog, một cổng USB,  
một jack nguồn, ICSP, một nút nhấn Reset.  
Board chứa tất cả mọi thứ cần thiết để hỗ trợ  
các vi điều khiển, kết nối board với máy tính  
bằng cáp USB. Trong công việc này, bo  
mạch Arduino đã được sử dụng để đọc giá  
trị tốc độ mong muốn từ mô-đun PWM PCA  
9685, tốc độ thực tế từ encoder sau đó duy  
trì vận tốc của xe bằng thuật toán bộ điều  
khiển PID.  
T
Dx = [-1 0 1] và Dy = [1 0 -1]  
(1)  
Gán hướng: Sau khi tính đạo hàm, ta có  
thành phần hướng ở các điểm ảnh trong mỗi  
cell của ảnh input. Các giá trị hướng này  
được chia thành các vùng hướng đều nhau  
o
trong khoảng từ 0 tới 360 . Theo các tác giả  
của HOG, thì 9 vùng chia cho kết quả tốt  
nhất đối với các bài toán nhận dạng.  
không chỉ hoạt động tốt với các dữ liệu  
được phân tách tuyến tính mà còn tốt với cả  
dữ liệu phân tách phi tuyến. Với nhiều bài  
toán, SVM mang lại kết quả tốt như mạng  
nơ-ron với hiệu quả sử dụng tài nguyên tốt  
hơn hẳn. Ý tưởng của SVM là đi tìm siêu  
mặt phẳng để phân tách cách điểm dữ liệu  
[3]. Trong không gian nhiều chiều, khoảng  
cách từ một điểm (vector) có toạ  
độ x0 tới siêu mặt phẳng (hyperplane) có  
phương trình w푇x +b = 0 được xác định  
bởi:  
Tính histogram của các khối: Để đáp  
ứng tốt hơn với các thay đổi về điều kiện  
ánh sáng và độ tương phản, các giá trị  
gradient cần phải được chuẩn hóa cục bộ,  
điều này đòi hỏi việc nhóm các cell thành  
các vùng liên kết không gian với nhau gọi là  
các khối. Vector HOG do đó sẽ là tổng hợp  
các histogram của các cell đã được chuẩn  
hóa từ tất cả các khối. Các khối sẽ được chia  
và không tách biệt nhau, nói cách khác mỗi  
cell sẽ đóng góp thông tin về các hướng (tại  
các điểm ảnh của nó) nhiều hơn 1 lần. Để  
tính toán vector đặc trưng cho từng ô (cell),  
chúng ta cần chia hình ảnh thành các block,  
mỗi block lại chia đều thành các cell. Để xác  
định được số block, chúng ta sẽ sử dụng  
công thức sau:  
wT x0 b  
(6)  
w
2
Với ||w||2 là độ lớn của vector w  
tính theo norm 2.  
Khi đó dấu của hàm ước lượng sẽ thể  
hiện được điểm dữ liệu x nằm ở cụm dữ liệu  
nào (H) với H= {x ↦ sgn (w푇x +b) ; w  
∈ R푁, b ∈ R}  
wimage wblock *w  
H
image Hblock *Hcell  
nblock _image (  
cell )*  
1  
wcell  
Hcell  
(2)  
푊푖푚푎푔푒, 푊푏푙표푐푘, 푊푐푒푙푙: lần lượt là  
chiều rộng của ảnh, block và cell  
SVM có vai trò đi tìm đường phân chia  
dữ liệu tốt nhất và chỉ duy nhất 1 đường  
thẳng thỏa mãn luật của SVM, là khoảng  
cách từ đường thẳng đó đến điểm gần nhất  
của mỗi lớp dữ liệu (margin) là như nhau và  
lớn nhất. Thuật toán đi tìm siêu mặt phẳng  
thông qua các bước tính toán phức tạp, mục  
đích tối ưu hóa khoảng cách mặt phân chia  
dữ liệu. Từ đó, tìm ra được một bộ phân lớp  
chính xác và tối ưu nhất (Hình 4)  
퐻푖푚푎푔푒, 퐻푏푙표푐푘, 퐻푐푒푙푙 : lần lượt là  
chiều dài của ảnh, block và cell  
Chuẩn hóa khối: Có nhiều phương  
pháp có thể được dùng cho việc chuẩn hóa  
khối. Gọi v là vector cần chuẩn hóa chứa tất  
cả các histogram của một khối, ||vk|| là giá trị  
chuẩn của nó theo các chuẩn k=1, 2 và e là  
một hằng số nhỏ, khi đó các giá trị chuẩn  
hóa có thể tính bằng 1 trong các công thức  
sau:  
Phát hiện mặt người với các đặc trưng  
HOG và SVM: để phát hiện mặt người với  
các đặc trưng HOG và SVM ta tiến hành các  
bước như sau:  
v
2
L2norm: f   
L1norm: f   
L1sqrt : f   
(3)  
(4)  
(5)  
v e2  
2
v
v 1 e  
v
v 1 e  
4.2. Support vector machine (SVM)  
Hình 4. SVM tìm mặt phẳng phân chia dữ  
liệu ứng với margin lớn nhất  
SVM là một phương pháp học có giám  
sát trong các mô hình nhận dạng mẫu. Nó  
Bước 1: Chuẩn bị P mẫu là ảnh mặt  
người và trích xuất các vector đặc trưng  
HOG từ các bức ảnh này.  
Trong bài báo này, toàn bộ phần phát  
hiện mặt người sử dụng các dữ liệu phân lớp  
đã được học trước được cung cấp bởi thư  
viện dlib. Kết quả của bước này có thể xem  
ở các hình 5.  
Bước 2: Chuẩn bị N mẫu không phải là  
ảnh mặt người (N rất lớn so với P) và trích  
xuất các vector HOG từ các ảnh này.  
4.3. Phân tích điểm đặc trưng trên khuôn  
mặt – Facial Landmark  
Bước 3: Sử dụng một bộ phân loại  
SVM tuyến tính để học với các vector của  
các mẫu tích cực (là ảnh mặt người) và tiêu  
cực (các ảnh không phải mặt người) đã  
chuẩn bị.  
Trong bài toán xác định facial landmark,  
chúng ta sẽ phải xác định được những điểm  
chính trong bức ảnh tạo nên hình dạng  
khuôn mặt người [4] (hình 6)  
Bước 4: Đối với mỗi bức ảnh trong bộ  
ảnh tiêu cực, sử dụng một cửa sổ trượt di  
chuyển qua tất cả các vị trí có thể của ảnh  
input. Tại mỗi vị trí của cửa sổ trượt, tính  
vector HOG của cửa sổ và đưa vào bộ phân  
lớp. Nếu bộ phân lớp phân lớp sai một cửa  
sổ là ảnh mặt thì ghi lại vector tương ứng  
cùng với xác suất phân lớp.  
Việc xác định facial landmark gồm có  
hai bước:  
Bước 1: Xác định được vị trí khuôn mặt  
trong bức ảnh  
Việc xác định vị trí khuôn mặt có thể  
được thực hiện bằng nhiều cách từ đơn giản  
như thuật toán Haar cascades đến phức tạp  
như các thuật toán dựa trên deep-learning,  
mục đích cuối cùng là ta sẽ thu được một  
vùng xác định bởi tọa độ (x, y) bao quanh  
khuôn mặt trong bức ảnh.  
Bước 5: Lấy các mẫu nhận dạng sai ở  
bước 4 và sắp xếp chúng theo mức xác suất  
nhận dạng sai và cho bộ phân lớp học lại sử  
dụng các mẫu sai này.  
Bước 2: Xác định facial landmark  
Bước 6: Áp dụng bộ phân lớp đã được  
học lại với các ảnh cần phát hiện mặt người  
Sau khi xác định được khuôn mặt trong  
bức ảnh, chúng ta sẽ xác định cấu trúc của  
khuôn mặt. Có rất nhiều kiểu cấu trúc khuôn  
mặt khác nhau nhưng về cơ bản, chúng ta sẽ  
phải xác định được những phần sau: miệng,  
long mày phải – lông mày trái, mắt phải –  
mắt trái, mũi, hàm.  
4.4. Tỉ lệ nhắm mở mắt – Eyes Aspect  
Ratio (EAR)  
Mỗi mắt được biểu thị bằng 6 điểm (x,  
y) theo thứ tự bắt đầu từ góc trái của mắt và  
sắp xếp theo chiều kim đồng hồ thành các  
điểm p1, p2, p3, p4, p5, p6 như hình 7a [5]  
Hình 5. Ảnh input và kết quả phát hiện và  
căn chỉnh ảnh mặt với HOG và SVM.  
Công thức tính tỉ lệ nhắm mở mắt:  
p2 p6 p3 p5  
EAR   
(7)  
2 p1 p4  
Trong đó p1, …, p6 là các vị trí mốc 2D  
trên khuôn mặt.  
Khi mắt mở bình thường như hình 7a,  
thì theo công thức trên tỉ lệ nhắm mở mắt  
(EAR) sẽ lớn vì khoảng cách giữa p2-p6  
Hình 6. 68 điểm đặc trưng trên khuôn mặt  
người  
cũng như p3-p5 lớn, trong khi khoảng cách  
giữa p1-p4 gần như không đổi với một mắt  
người cụ thể. Tuy nhiên, khi người đó chớp  
mắt (như trong hình 7b) thì tỷ lệ giảm đáng  
kể, gần như bằng 0.  
Hình 7c biểu diễn tỉ lệ nhắm mở mắt  
theo thời gian trong 1 video clip. Ban đầu  
khi mở mắt, tỉ lệ này duy trì sấp xỉ là 0.25,  
sau đó nhanh chóng giảm xuống gần bằng  
không, rồi tăng trở lại, cho thấy một lần  
chớp mắt vừa diễn ra. Tính toán độ mở của  
mắt tài xế bằng phương pháp Eyes Aspect  
Ratio (EAR), xác định thời gian nhắm mắt,  
đưa ra trạng thái ngủ gật.  
4.5. Mạng nơ-ron truyền thẳng  
Mạng neural nhân tạo, Artificial Neural  
Network (ANN) gọi tắt là mạng neural,  
neural network, là một mô hình xử lý thông  
tin phỏng theo cách thức xử lý thông tin của  
các hệ neural sinh học. Nó được tạo lên từ  
một số lượng lớn các phần tử (gọi là phần tử  
xử lý hay neural) kết nối với nhau thông qua  
các liên kết (gọi là 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 đó. Một mạng neural  
nhân tạo được cấu hình cho một ứng dụng  
cụ thể (nhận dạng mẫu, phân loại dữ liệu, ...)  
thông qua một quá trình học từ tập các mẫu  
huấn luyện. Về bản chất học chính là quá  
trình hiệu chỉnh trọng số liên kết giữa các  
neural (Hình 8). [7]  
Hình 7. Xác định vị trí vùng mắt trên khuôn  
mặt và đồ thị thời gian nhắm mở mắt  
Trong nghiên cứu này, tác giả đề xuất  
mạng nơ-ron truyền thẳng có cấu trúc mạng  
gồm 1 lớp ngõ vào, 6 lớp ẩn, 2 lớp ẩn cuối  
cùng được dropout với tỉ lệ 0.2 và 1 lớp ngõ  
ra mang giá trọ trạng thái buồn ngủ (0 hoặc  
1) (Hình 9).  
Hình 8. Tế bào thần kinh nhân tạo  
5. THỰC NGHIỆM  
5.1. Giới thiệu bộ dữ liệu  
Dữ liệu huấn luyện mạng noron phát  
hiện dấu hiệu buồn ngủ được thu từ 25  
người trong điều kiện ánh sáng ban ngày,  
bao gồm dãy EAR liên tục trong 90 khung  
hình lúc người đó tỉnh táo và lúc buồn ngủ  
kèm theo nhãn (label) cho từng trường hợp.  
Trung bình mỗi người thu được 1000  
mẫu, tổng cộng ta có 25380 mẫu không có  
dấu hiệu buồn ngủ và 25020 mẫu có dấu  
hiệu buồn ngủ. Có thể thấy, bộ dữ liệu này  
đã cân bằng, đủ tin cậy để huấn luyện mạng  
noron học sâu. Phân bố của bộ dữ liệu được  
thể hiện trong hình 10,11.  
Hình 9. Cấu trúc mạng nơ-ron đề xuất  
5.2. Quá trình huấn luyện mạng  
Từ tập dữ liệu được lưu trữ, tác giả chia  
chúng thành hai phần riêng biệt. Một là dữ  
liệu huấn luyện và một là dữ liệu thử  
nghiệm với tỷ lệ 80:20. Một sơ đồ huấn  
luyện được thể hiện trong Hình 12. Tác giả  
tận dụng lợi thế của GPU NVIDIA GeForce  
GTX 1080 Ti với bộ nhớ là 12GB, CUDA  
Cores 3584 để huấn luyện mạng. Tổng thời  
gian mà chúng tôi thực hiện đào tạo kết hợp  
với 5000 chu kỳ cho 40320 mẫu là 270 phút.  
Hình 10. Dãy EAR liên tục khi thu dữ liệu  
Sau khi được huấn luyện trên laptop,  
mô hình đã được sao chép trở lại Raspberry  
Pi. Mô hình dự đoán trạng thái buồn ngủ của  
tài xế có độ chính xác khá thuyết phục, cụ  
thể là 92,86% (Hình 13).  
5.3. Kết quả thực nghiệm  
Tác giả thực hiện với 4 trường hợp:  
Hình 11. Dãy EAR trong 90 khung hình liên  
tục  
- Trường hợp 1: Khi tài xế ở trạng thái  
tỉnh táo. Khoảng cách từ tài xế đến camera  
là 60cm.  
- Trường hợp 2: Khi tài xế ở trạng thái  
tỉnh táo. Khoảng cách từ tài xế đến camera  
là 100cm.  
- Trường hợp 3: Khi tài xế ở trạng thái  
buồn ngủ. Khoảng cách từ tài xế đến camera  
là 60cm.  
- Trường hợp 4: Khi tài xế ở trạng thái  
buồn ngủ. Khoảng cách từ tài xế đến camera  
là 100cm  
Hình 12. Sơ đồ huấn luyện mạng nơ-ron  
5.3.1. Trường hợp 1:  
Hình 14. Thực nghiệm khi tài xế ngồi gần  
trong trạng thái tỉnh táo. Góc nhìn trực diện  
Hình 13. Độ chính xác của mô hình được  
mô tả bằng confusion matrix  
Ở khảng cách 100 cm (hình 16,17), thay  
đổi góc quét camera có giá trị từ: -550 đến  
550 thì tỉ lệ mở mắt từ 0,264 đến 0,437. Như  
vậy, khi thay đổi khảng cách từ camera đến  
vị trí ghế ngồi của tài xế thì sự nhận dạng và  
phân tích tỉ lệ mở mắt thay đổi không đáng  
kể.  
5.3.3. Trường hợp 3:  
Khi tài xế ngồi gần, khoảng cách từ tài  
xế đến camera là 60cm (hình 18,19)  
Hình 15. Thực nghiệm khi tài xế ngồi gần  
trong trạng thái tỉnh táo với các góc nhìn  
khác nhau  
Ở khảng cách 60 cm (hình 14,15), thay  
đổi góc quét camera có giá trị từ: -550 đến  
550 thì tỉ lệ mở mắt từ 0,234 đến 0,437.  
5.3.2. Trường hợp 2:  
Hình 18. Thực nghiệm khi tài xế ngồi gần  
trong trạng thái buồn ngủ. Góc nhìn trực  
diện  
Hình 16. Thực nghiệm khi tài xế ngồi xa  
trong trạng thái tỉnh táo. Góc nhìn trực  
diện.  
Hình 19. Thực nghiệm khi tài xế ngồi gần  
trong trạng thái buồn ngủ với các góc nhìn  
khác nhau  
5.3.4. Trường hợp 4:  
Khi tài xế ngồi xa, khoảng cách từ tài  
xế đến camera là 100cm. (hình 20,21)  
Thiết lập cho hệ thống, khi tỉ lệ mở mắt  
nhỏ hơn 0,22 và nhắm mắt liên tục 15 frame  
thì hệ thống xác định tài xế đang có dấu  
hiệu buồn ngủ.  
Hình 17. Thực nghiệm khi tài xế ngồi xa  
trong trạng thái tỉnh táo với các góc nhìn  
khác nhau  
-
Hệ thống phát hiện và cảnh báo  
buồn ngủ hoạt động ổn định, ở điều kiện ban  
ngày nhờ vào đặc trưng HOG và SVM.  
-
Mạng neural khi được train trên  
nhiều người giúp cho hệ thống phát hiện  
chính xác, khách quan hơn so với đặt số  
frames có định.  
-
Khi phát hiện tài xế rơi vào trạng  
thái buồn ngủ; hệ thống sẽ báo động bằng  
đèn led màu đỏ, cảnh báo bằng giọng nói.  
-
Thiết bị có thiết kế nhỏ gọn giúp có  
khả năng ứng dụng thử nghiệm trên xe ôtô.  
Hình 20. Thực nghiệm khi tài xế ngồi xa  
trong trạng thái buồn ngủ. Góc nhìn trực  
diện  
Nhược điểm:  
-
Chỉ nhận dạng được dấu hiệu buồn  
ngủ trong điều kiện ánh sáng ban ngày.  
Khi người lái quay mặt lớn hơn góc  
600 thì hệ thống không phát hiện mặt.  
Phần cứng Raspberry Pi 3 Model  
-
-
B+ chưa thể đáp ứng cho việc chạy real-time  
các model sâu hơn.  
6.2 Hướng phát triển  
-
Dùng mạng CNN để phát hiện  
khuôn mặt trong nhiều điều kiện ánh sáng  
phức tạp.  
-
Thử nghiệm thực tế trên buồng lái ô  
Hình 21. Thực nghiệm khi tài xế ngồi xa  
trong trạng thái buồn ngủ với các góc nhìn  
khác nhau  
tô.  
-
Thu thập thêm dữ liệu để tăng độ  
khách quan hơn trong xác định dấu hiệu buồn  
ngủ.  
6. KẾT LUẬN  
-
Thực nghiệm trên các máy tính  
nhúng mạnh hơn: Jeston Nano, Jeston TX2.  
Thêm tính năng: báo rung điện  
thoại, cảnh báo tin nhắn…  
6.1. Kết luận  
Ưu điểm của nghiên cứu này là:  
-
TÀI LIỆU THAM KHẢO  
Saini, Vandna, and Rekha Saini. "Driver drowsiness detection system and techniques: a  
[1]  
[2]  
[3]  
review." International Journal of Computer Science and Information Technologies 5.3  
(2014): 4245-4249.  
N. Dalal and B. Triggs, “Histograms of oriented gradients for human detection,” in  
Computer Vision and Pattern Recognition, 2005. CVPR 2005. IEEE Computer Society  
Conference on, 2005, vol. 1, pp. 886–893.  
Cortes, Corinna, and Vladimir Vapnik. "Support vector machine." Machine  
learning 20.3 (1995): 273-297.  
[4]  
[5]  
[6]  
[7]  
Zhang, Zhanpeng, et al. "Facial landmark detection by deep multi-task  
learning." European conference on computer vision. Springer, Cham, 2014.  
Soukupova, Tereza, and Jan Cech. "Eye blink detection using facial landmarks." 21st  
Computer Vision Winter Workshop, Rimske Toplice, Slovenia. 2016.  
Tereza, S., & Jan, Č. (2016, February). Real-Time Eye Blink Detection using Facial  
Landmarks. In Proc. Computer Vision Winter Workshop.  
Hopfield, John J. "Artificial neural networks." IEEE Circuits and Devices Magazine 4.5  
(1988): 3-10.  
Tác giả chịu trách nhiệm bài viết:  
Họ tên: Trần Quang  
Đơn vị: Trường ĐH Sư Phạm Kỹ Thuật TPHCM  
Điện thoại: 0969365855  
pdf 11 trang Mãnh Khiết 09/01/2024 18282 Free
Bạn đang xem tài liệu "Phát hiện và cảnh báo buồn ngủ của tài xế lái xe dùng thị giác máy tính", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfphat_hien_va_canh_bao_buon_ngu_cua_tai_xe_lai_xe_dung_thi_gi.pdf