BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
CÔNG TRÌNH NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
K
C
S
0
0
3
9
5
9
ỨNG DỤNG XỬ LÝ ẢNH SỬ DỤNG PHẦN MỀM LABVIEW ĐỂ CẢNH BÁO VA CHẠM SỚM VÀ NGỦ GẬT TRÊN XE
MÃ SỐ: SV2020-06
S KC 0 0 7 3 6 4
Tp. Hồ Chí Minh, tháng 10/2020
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN ỨNG DỤNG XỬ LÝ ẢNH SỬ DỤNG PHẦN MỀM LABVIEW ĐỂ CẢNH BÁO VA CHẠM SỚM VÀ NGỦ GẬT TRÊN XE SV2020-06 Chủ nhiệm đề tài: Nguyễn Trung Trực TP HỒ CHÍ MINH, ngày 5 tháng 10 năm 2020
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN ỨNG DỤNG XỬ LÝ ẢNH SỬ DỤNG PHẦN MỀM LABVIEW ĐỂ CẢNH BÁO VA CHẠM SỚM VÀ NGỦ GẬT TRÊN XE SV2020-06
Thuộc nhóm ngành khoa học: Kỹ thuật – Ứng dụng SV thực hiện: Nguyễn Trung Trực Nam, Nữ: Nam Dân tộc: Kinh Lớp : 161451B Khoa : Cơ khí động lực Năm thứ: 4 Số năm đào tạo: 4 Ngành học: Công nghệ kỹ thuật ô tô
Người hướng dẫn: Ths.Nguyễn Thành Tuyên
TP HỒ CHÍ MINH, ngày 5 tháng 10 năm 2020
LỜI CẢM ƠN
Trong thời gian làm đề tài nghiên cứu, nhóm chúng em đã nhận được nhiều sự giúp
đỡ, đóng góp ý kiến và chỉ bảo nhiệt tình của thầy cô, gia đình và bạn bè.
Nhóm chúng em xin gửi lời cảm ơn chân thành đến Th.s Nguyễn Thành Tuyên, giảng
viên Bộ môn Điện-Điện tử - trường ĐHSPKT TP.HCM người đã tận tình hướng dẫn,
chỉ bảo em trong suốt quá trình thực hiện đề tài nghiên cứu.
Đồng thời cả nhóm cũng xin chân thành cảm ơn các thầy cô giáo trong trường
ĐHSPKT TP.HCM nói chung, các thầy trong Bộ môn Điện-Điện tử nói riêng đã dạy
dỗ cho em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp em
có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ em trong suốt quá trình học
tập.
Cuối cùng chúng em xin chân thành cảm ơn gia đình và bạn bè, đã luôn tạo điều kiện,
quan tâm, giúp đỡ, động viên cả nhóm trong suốt quá trình học tập, nghiên cứu và hoàn
thành đề tài nghiên cứu.
...., ngày.....tháng....năm.....
i
Sinh Viên Thực Hiện
TÓM TẮT
Đề tài:
“Nghiên cứu và ứng dụng xử lí ảnh bằng phần mềm LabVIEW để cảnh báo ngủ
gật và va chạm sớm”
được nghiên cứu tại Trường Đại Học Sư Phạm Kỹ Thuật Tp. HCM. Thời gian thực hiện từ 01/2020 đến 06/2020 là nghiên cứu được phát triển trên nền tảng ứng dụng vào thực tế.
Đề tài này đề xuất nghiên cứu và ứng dụng công nghệ xử lí ảnh bằng phần mềm
LabVIEW và ngôn ngữ lập trình mở Python để ứng dụng vào thực tế trên xe ô tô. Nghiên
cứu trình bày các chương trình lập trình được phát triển trên nền tảng ngôn ngữ lập trình
mở Python, đồng thời kết hợp với phần mềm LabVIEW để tiến hành cảnh báo ngủ gật
cho tài xế cũng như cảnh báo va chạm sớm để tránh các trường hợp xảy ra sự cố đột
xuất làm tài xế không có khả năng phán đoán và xử lí kịp thời tình huống xảy ra. Điểm
mới của đề tài là quá trình xử lí ảnh mang tính ổn định cao, dễ dàng xác định chính xác
hiện trạng của tài xế lái xe cũng như khoảng cách tới vật cản. Các thông tin sau khi
được xử lí, lập trình bằng phần mềm LabVIEW và tương tác với người dùng thông qua
hệ thống cảnh báo bằng còi và đèn cũng như thông báo hiển thị trên màn hình LCD.
Kết quả, sau quá trình thực nghiệm chương trình đã hoạt động ổn định và việc thực thi
quá trình cảnh báo nhằm tạo điều kiện thuận lợi cho tài xế trong việc điều chỉnh trạng
thái của bản thân và ô tô trong khi tham gia giao thông đã có độ chính xác ngày càng
ii
được nâng cao hơn.
MỤC LỤC Chương 1: TỔNG QUAN ................................................................. 1 1.1. Tổng quan chung về lĩnh vực nghiên cứu ............................................................ 1
1.2. Các đề tài nghiên cứu trong và ngoài nước .......................................................... 2
1.2.1. Các đề tài nghiên cứu trong nước .................................................................. 2
1.2.2. Các nghiên cứu ngoài nước ........................................................................... 4
1.2.2.1. Tại một số nước ....................................................................................... 4
1.2.2.2. Tại một số hãng xe .................................................................................. 5
1.3. Mục đích của đề tài .............................................................................................. 5
1.4. Đối tượng và phạm vi của đề tài .......................................................................... 6
1.4.1. Đối tượng ....................................................................................................... 6
1.4.2. Phạm vi nghiên cứu ....................................................................................... 6
1.5. Phương pháp nghiên cứu ...................................................................................... 6
1.5.1. Nghiên cứu lý thuyết...................................................................................... 6
1.5.2. Nghiên cứu thực nghiệm ................................................................................ 6 Chương 2: CƠ SỞ LÝ THUYẾT ......................................................... 7 2.1. Cơ sở lý thuyết xử lí ảnh xác định đối tượng theo phân loại tầng ...................... 7
2.2. Cơ sở lý thuyết thuật toán ước lượng khoảng cách từ hệ camera quan sát đến vật cản ......................................................................................................................... 8
2.2.1. Sơ đồ nguyên lý được sử dụng để ước lượng khoảng cách từ hệ camera đến vật cản ...................................................................................................................... 8
2.2.2. Phương pháp hiệu chỉnh camera (Camera calibration) ................................. 9
Chương 3: GIỚI THIỆU CHƯƠNG TRÌNH PHÁT HIỆN VÀ CẢNH BÁO NGỦ GẬT VỚI VA CHẠM SỚM ........................... Error! Bookmark not defined. 3.1. Giới thiệu chương trình dùng để phát hiện và cảnh báo ngủ gật ....................... 11
3.2. Giới thiệu chương trình cảnh báo va chạm sớm trên xe ô tô ............................. 14 Chương 4: THỰC NGHIỆM, KẾT QUẢ NGHIÊN CỨU .......................... 22 4.1 Thực nghiệm hệ thống cảnh báo ngủ gật … .… .….…. ….….….….….….... 22
4.1.1 Trường hợp nhận diện được người lái xe và xác định người lái xe không ngủ gật.
4.1.2 Trường hợp nhận diện được người lái xe và xác định người lái xe ngủ gật.….………………………………………………………………………………...23
iii
4.2 Thực nghiệm hệ thống cảnh báo va chạm sớm.….….….….….….….….….….25
4.3 Hệ thống cảnh báo va chạm khi lắp trên xe mô hình mini.....................................29
4.4 Kết quả thực nghiệm............................................................................................31 Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................... 32 TÀI LIỆU THAM KHẢO………………………………………………………… 38
iv
PHỤ LỤC………………………………………………………………………….. 40
DANH MỤC CÁC HÌNH
Hình 2.1: Các kiểu phân tầng cơ bản thường được sử dụng
Hình 2.2: Đặc tính khác nhau giữa vùng mắt và các bộ phận khác trên mặt
Hình 2.3: Sơ đồ nguyên lý được sử dụng để ước lượng khoảng cách từ hệ camera đến
vật cản
Hình 3.1: Chương trình phát hiện và cảnh báo ngủ gật được viết bằng ngôn ngữ lập
trình Python
Hình 3.2: Giao diện Block Diagram trong phần mềm LabVIEW
Hình 3.3: Giao diện Front Panel trong phần mềm LabVIEW
Hình 3.4: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Hình 3.5: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Hình 3.6: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Hình 3.7: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Hình 3.8: Chương trình dùng để tính tiêu cự camer
Hình 3.9: Chương trình dùng để tính tiêu cự camer
Hình 3.10: Chương trình dùng để tính tiêu cự camer
Hình 3.11: Giao diện Block Diagram trong phần mềm LabVIEW
Hình 3.12: Giao diện Front Panel trong phần mềm LabVIEW
Hình 4.1:Nhận diện mở mắt bằng Python
Hình 4.2:Xử ly thông tin người lái không ngủ gật bằng Labview
Hình 4.3:Nhận diện nhắm mắt bằng Python
Hình 4.4:Xử lý thông tin người lái ngủ gật bằng Labview
Hình 4.5: Xác định khoảng cách từ xe đến vật bằng python
Hình 4.6:Xác định khoảng cách từ người đến vật trên thực tế
Hình 4.7:Xác định khoảng cách từ người đến vật trên thực tế
Hình 4.8:Cảnh báo va chạm trên Labview
Hình 4.9: Mô hình xe không người lái
Hình 4.10: Thuật toán điều khiển xe bằng Labview
Hình 5.1: Nguyên lí cơ bản của deeplearning
v
Hình 5.2 : Thu thập hình ảnh mẫu
Hình 5.3: Xác định, dán nhãn đối tượng muốn nhận diện
Hình 5.4 : Tiến hành đào tạo mô hình
vi
Hình 5.5 : Sử dụng mô hình đào tạo được
Chương 1: TỔNG QUAN
1.1. Tổng quan chung về lĩnh vực nghiên cứu
Ngày nay, khi nền công nghiệp ô tô đang phát triển mạnh mẽ dẫn theo đó là sự hoàn
thiện cũng như phát triển các hệ thống thông minh phục vụ tốt cho các yêu cầu của con
người đối với ô tô. Đi đôi với sự phát triển không ngừng này là các vấn đề cũng như
thực trạng cần chú ý, một trong những vấn đề được quan tâm nhất đó chính là an toàn
của người điều khiển phương tiện. Những yêu cầu về độ an toàn trên ô tô ngày càng
tăng, đòi hỏi các nhà sản xuất phải chú trọng đầu tư nghiên cứu cũng như nâng cấp và
đưa ra các giải pháp đảm bảo tính an toàn phù hợp với yêu cầu của người dùng. Trong
đó, Pre-Collision System (PCS) công nghệ cảnh báo và can thiệp trước va chạm đã và
đang được quan tâm. Trước đây, khi chưa xuất hiện Pre-Collision System thì việc đảm
bảo an toàn của người lái xe phụ thuộc phần lớn vào dây an toàn. Nhưng thiết bị này
chỉ có thể đảm bảo an toàn một cách thụ động và mức độ an toàn cũng không quá cao.
Bằng chứng là nhiều vụ tai nạn chết người xảy ra mặc dù người lái xe vẫn tuân thủ việc
thắt dây an toàn khi lưu thông. Điều này cho thấy việc dùng sử dụng dây an toàn chỉ là
một biện pháp giải quyết “ngọn” mà vẫn chưa thể giải quyết triệt để “gốc” của việc xảy
ra các tai nạn. Do đó, việc nghiên cứu và cho ra đời Pre-Collision System là một trong
những giải pháp để giảm thiểu các khả năng gây tai nạn đối với người lái. Pre-Collision
System sẽ liên tục theo dõi quá trình điều khiển của người lái cũng như các điều kiện
xung quanh xe như chướng ngại vật, xe đi trước, xe đối diện,… để phát hiện sớm nguy
cơ tai nạn vài giây trước va chạm, từ đó thực hiện những biện pháp cảnh báo, can thiệp
Cũng bởi bản chất hoàn toàn tự động của hệ thống cũng như tính chất bất ngờ
và khó đoán của hầu hết những vụ tai nạn, công nghệ đứng sau quá trình vận hành
của PCS có độ phức tạp cao và cần phải được tinh chỉnh, kiểm tra cực kỳ kỹ lưỡng
trước khi được trang bị trên ô tô. Vậy nên quá trình điều chỉnh để đảm bảo hệ
thống hoạt động chính xác, phản ứng kịp thời với tình huống cũng như không can
thiệp nhầm là rất quan trọng.
1
nhằm ngăn chặn hoặc giảm thiểu những thiệt hại có thể xảy ra.
Tuy nhiên , ngay cả khi trên xe đã được trang bị đầy đủ các hệ thống thông minh cho
phép phát hiện và cảnh báo các trường hợp nguy cấp xảy ra nhưng vẫn tồn tại các trường
hợp xảy ra tai nạn. Nguyên nhân dẫn đến các sự việc không mong muốn này là do sự
thiếu tập trung của người tài xế. Mà biểu hiện rõ nhất của nó là hiện tượng ngủ gật. Nói
cách khác, hiện tượng ngủ gật xảy ra khi tài xế làm việc trong thời gian kéo dài dẫn đến
tinh thần căng thẳng, mệt mỏi và một trong những vấn đề sinh lí bình thường của cơ thể
là yêu cầu được nghỉ ngơi. Chính vì vậy, để giải quyết các vấn đề liên quan về sự mệt
mỏi và buồn ngủ của người lái xe thì nhiều phương pháp đã được nghiên cứu và triển
khai thực hiện trong vài năm qua như: dựa trên hiện tượng sinh lý của con người, theo
dõi hoạt động điều khiển xe, theo dõi phản ứng của người lái xe và phương tiện. Một
trong những phương pháp được áp dụng nhiều nhất là nhận dạng dựa trên cử chỉ khuôn
mặt, cụ thể ở đây là mắt. Thông qua các số liệu được gửi về và được xử lý để nhận dạng
hoạt động của mắt người trong một khoảng thời gian nhất định từ đó đưa ra kết luận và
tiến hành cảnh báo nếu xác nhận đó là hiện tượng ngủ gật. Điều này, sẽ giúp cho người
điều khiển hạn chế tình trạng không tỉnh táo trong quá trình tham gia giao thông. Từ đó,
góp phần giảm thiểu số vụ tai nạn giao thông xảy ra hàng năm.
Bởi vì, nhận thấy được các vấn đề được nêu trên đóng vai trò quan trọng nên nhóm
em đã tiến hành đi tìm hiểu và nghiên cứu đề tài “ ứng dụng xử lý ảnh sử dụng phần
mềm LabVIEW để cảnh báo va chạm sớm và ngủ gật trên xe”.
1.2. Các đề tài nghiên cứu trong và ngoài nước
1.2.1. Các đề tài nghiên cứu trong nước
- Nghiên cứu “Xây dựng hệ thống nhúng phát hiện và cảnh báo lái xe ngủ gật dựa trên
kỹ thuật xử lý ảnh ” [1] được bắt đầu 01/2014 và theo dự kiến đề tài này sẽ được hoàn
thành vào 12/2016. Đây là một đề tài nghiên cứu cấp bộ của TS. Vũ Đức Thái, Trường
Đại học Công nghệ Thông tin và Truyền thông, thành phố Thái Nguyên.
- Nghiên cứu “ Ứng dụng sóng não phát hiện dấu hiệu buồn ngủ và đưa ra tín hiệu cảnh
báo đối người lái ”[2] , Luận văn Thạc sĩ của ThS. Đỗ Văn Dũng, Đại học SPKT
TP.HCM đã hoàn thành được việc thu thập và xử lý tín hiệu EEG từ thiết bị Emotiv
EPOC Headset. Xây dựng thành công một mô hình hệ thống nhận diện và cảnh báo cơn
buồn ngủ hoàn chỉnh giá thành hợp lý. Tạo tiền đồ cho những nghiên cứu sau này về
2
lĩnh vực cảnh báo an toàn, thông qua các theo dõi sinh lý của người lái xe.
- “ Học sinh sáng chế thiết bị chống ngủ gật cho tài xế ô tô ”[3] , bắt đầu từ đầu năm
2015 cho đến 01/2017, cậu học trò lớp 12 Nguyễn Ngọc Đức, ở Thanh Hóa đã nghiên
cứu thành công thiết bị chống ngủ gật cho tài xế ô tô, với ước mong hạn chế tai nạn giao
thông xảy ra do tài xế ngủ gật. Đức đã được Bộ GD-ĐT tặng Giấy chứng nhận đạt giải
cuộc thi khoa học kỹ thuật cấp quốc gia học sinh trung học năm 2015-2016. Nguyên lý
hoạt động của máy rất đơn giản, khi camera màn hình thu hình con người thì bộ xử lý
sẽ nhận diện ra điểm khác biệt trên khuôn mặt đâu là mắt, mũi, tai, từ đó sẽ tìm ra được
ánh mắt qua biểu đồ ánh sáng để phân biệt độ sáng, tối của mắt, phân biệt lái xe đang
thức hay đang ngủ. Sau khi đã nhận dạng xong, bộ xử lý sẽ tiếp tục đưa ra các trường
hợp để xử lý. Ban đầu, máy sẽ cảnh báo bằng giọng nói: “Bạn đang trong trạng thái
không tập trung, đề nghị tập trung lại” (cảnh báo bằng giọng nói để tránh tình trạng khi
báo động đột ngột sẽ làm lái xe giật mình), sau đó là cảnh báo bằng còi báo động.
- Luận văn tốt nghiệp “ 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 ”[4] được thực hiện bởi nhóm sinh viên Lê Thế Hải và Lê Thanh
Hòa (chuyên ngành Viễn thông, khoa Điện-Điện tử, trường Đại học Bách khoa
TP.HCM) cùng với sự hướng dẫn của PGS.TS. Hoàng Đình Chiến. Đề tài này sử dụng
một trong những ứng dụng của xử lý ảnh để phát hiện và cảnh báo buồn ngủ bằng cách
nhận diện trạng thái đóng mở của mắt. Khi người lái xe ngủ và nhắm mắt lại, lập tức sẽ
có âm thanh cảnh báo nguy hiểm. Tuy nhiên, đề tài vẫn còn một số hạn chế.
- “ Hệ thống cảnh báo ngủ gật sử dụng GPGA ”[5] được hoàn thiện bởi Nguyễn Thế
Đức và Hồ Văn Chương đến từ khoa Điện-Điện tử (Đại học Duy Tân, Đà Nẵng) dưới
sự hướng dẫn cũng như giúp đỡ của Thạc sĩ Trần Lê Thăng Đồng và Kỹ sư Tạ Quốc
Việt. Đề tài này đã sử dụng bộ công cụ hỗ trợ Terasic DE10-Nano, kết hợp với công
nghệ học máy(Machine Learning). Ngoài ra, còn sử dụng đến công nghệ xử lý ảnh và
thuật toán SVM. Thông qua các thuật toán được lập trình trong hệ thống có nhiệm vụ
phát hiện trạng thái nhấp nháy mắt theo thời gian thực và qua camera giám sát dò tìm ,
so sánh trạng thái khuôn mặt gần nhất trong bộ lưu trữ cơ sở dữ liệu để đưa ra thông số
về độ mở của mắt với mức phân tích chuỗi hình ảnh liên tục theo tỉ lệ 5 khung hình
/giây. Theo đó, sau khi thấy dấu hiệu thiếp đi của tài xế, hệ thống sẽ phát tín hiệu cảnh
3
báo thông qua loa. Bên cạnh đó, tần suất mệt mỏi qua từng giờ của tài xế cũng được hệ
thống lưu lại và tính toán xác suất để đưa ra cảnh báo trước, giúp ngăn ngừa xảy ra tai
nạn giao thông.
- Đề tài luận văn “ Nhận dạng trạng thái mắt ứng dụng trên Pandaboard ”[6] được thực
hiện bới Trần Lê Anh Chương và Nguyễn Khắc Hiếu (chuyên ngành Viễn thông, khoa
Điện-Điện tử, trường Đại học Bách khoa TP.HCM). Bằng việc thiết kế một camera đặt
ở phía trước để thu lại ảnh khuôn mặt của người lái xe, hình ảnh này sẽ được đưa vào
chương trình để tiến hành phân tích. Nếu phát hiện mắt đang nhắm, chương trình sẽ tiến
hành đếm trong một khoảng thời gian quy định trước (có thể lập trình được). Sau khoảng
thời gian này nếu mắt vẫn ở trạng thái nhắm chương trình sẽ phát âm thanh cảnh báo
qua loa.
- “ Bị "đánh thức" vì tư duy chậm ”, năm 2013, nhóm nghiên cứu đến từ Khoa Điện tử
Viễn Thông, trường Đại học Bách khoa Hà Nội gồm Nguyễn Quang Trường, Hoàng
Mạnh Cường, Vũ Mạnh Cường và Trần Anh Đức đã chế tạo thiết bị chống ngủ gật cho
lái xe với chi phí thấp phù hợp điều kiện nước ta. Nguyễn Quang Trường, Trưởng nhóm
nghiên cứu cho biết, thiết bị có dạng hộp chữ nhật nhỏ gọn. Khi lắp đặt trên xe, thiết bị
sẽ phát hiện điều kiện gây ngủ gật dựa vào các các yếu tố như thời điểm, quãng đường
và thời gian lái xe liên tục. Sau đó, thiết bị sẽ xác định trạng thái, mức độ tỉnh táo của
lái xe thông qua việc đo thời gian trả lời các câu hỏi trắc nghiệm do thiết bị đưa ra. Thời
gian cần thiết để trả lời câu hỏi sẽ tỷ lệ nghịch với mức độ tỉnh táo của lái xe. Cuối cùng,
thiết bị sẽ tạo ra tín hiệu cảnh báo chống ngủ gật, với các tín hiệu là ánh sáng chớp, âm
thanh, dòng điện xung.
1.2.2. Các nghiên cứu ngoài nước 1.2.2.1. Tại một số nước
- Tại Mỹ :
Các lái xe chỉ việc bỏ ra khoảng 10 tới 20 USD (tương đương 222.000 – 444.000
đồng) để sở hữu máy chống ngủ gật đeo tai của những nhãn hiệu như Nap Zapper1, No
Nap hay Doze Alert. Bất cứ khi nào lái xe có dấu hiệu ngủ gật, máy sẽ phát âm thanh
cảnh báo để đánh thức.
- Tại Đức :
Một sản phẩm có tên gọi Stopsleep. Là một thiết bị đeo trên ngón tay, dựa vào độ dẫn
4
điện của da, phản ánh hoạt động của não để có thể phát hiện tình trạng buồn ngủ của
người lái xe. Tuy nhiên, nhà sản xuất chưa bao giờ cung cấp tài liệu kỹ thuật hay tỷ lệ
phát hiện buồn ngủ.
- Tại Hong Kong :
Công ty Holux3 đã phát triển một thiết bị có thể đặt trên dây thắt an toàn và phát hiện
tình trạng mệt mỏi buồn ngủ dựa trên phân tích nhịp tim biến thiên .
1.2.2.2. Tại một số hãng xe
Một số các hãng xe ô tô lớn cũng đã tích hợp các thiết bị chống ngủ gật an toàn trên
các loại xe của họ :
- Hãng xe Mercedes-Benz : Thiết bị Attention Assist sử dụng bộ điều khiển động cơ để
giám sát các thay đổi về điều khiển vô lăng và hành vi lái xe của người ngồi trên xe,
báo động khi cần thiết.
- Hãng xe Volvo : Hệ thống Driver Alert Control c ng chính là hệ thống cảnh báo sai
làn: giám sát và hỗ trợ lái xe đi đúng làn đường, cảnh báo khi phát hiện dấu hiệu lấn
làn.
- Hãng Lexus : gắn camera tại bảng táp lô để quan sát gương mặt của lái xe thay vì hành
vi của người đó, cảnh báo lái xe khi phát hiện dấu hiệu buồn ngủ.
- Hãng Saab : sử dụng hai camera tại buồng lái để quan sát cử động mắt của lái xe, cảnh
báo bằng thông điệp chữ tại bảng táp lô và thông điệp âm thanh nếu lái xe vẫn buồn
ngủ.
- Hãng xe Bosch : hệ thống bám làn đường của Bosch giúp xe chạy ổn định trên một
làn đường đã định sẵn nhờ cảm biến gắn trước mui xe. Bên cạnh đó hệ thống còn thu
thập dữ liệu góc lệch từ vôlăng, chân ga, hệ thống đèn báo để đưa ra những cảnh báo
cho người điều khiển.
1.3. Mục đích của đề tài - Mục đích của đề tài là “ Nghiên cứu và xây dựng thuật toán cảnh báo va chạm sớm và
ngủ gật ứng dụng xử lý ảnh qua phần mềm LabVIEW ”
- Trong đề tài sử dụng lý thuyết về các hệ thống an toàn, cũng như cấu tạo và cách thức
vận hành của hệ thống cảnh báo nguy hiểm. Ngoài ra, còn tiến hành tìm hiểu những nội
dung :
- Thuật toán xác định khoảng cách từ xe đến vật cản thông qua quá trình quét của 2
5
camera
- Các phương pháp nhận diện khuôn mặt người được hỗ trợ trên nền tảng thư viện mã
nguồn mở OpenCV
- Các thuật toán nhận diện khuôn mặt và phần mắt sử dụng Haar Cascade Classifiers
trong OpenCV.
- Thuật toán phát hiện tình trạng người lái xe buồn ngủ dự trên cử chỉ gương mặt.
1.4. Đối tượng và phạm vi của đề tài
1.4.1. Đối tượng
- Ngôn ngữ lập trình Python.
- Thư viện mã nguồn mở OpenCV.
- Giải thuật nhận dạng một đối tượng sử dụng Haar Cascade Classifiers.
- Các thuật toán và kỹ thuật phát hiện tình trạng buồn ngủ dựa trên cử chỉ gương mặt.
- Thuật toán xác định khoảng cách.
1.4.2. Phạm vi nghiên cứu
- Nghiên cứu về các phương pháp đã được đề xuất phát hiện và cảnh báo tình trạng
buồn ngủ của người lái xe trên thế giới theo những bài báo và nghiên cứu khoa học.
- Chương trình demo sử dụng ngôn ngữ lập Python, thư viện mã nguồn mở OpenCV
trên nền tảng hệ điều hành Windows.
1.5. Phương pháp nghiên cứu
1.5.1. Nghiên cứu lý thuyết
Đọc, phân tích, tổng hợp tài liệu từ những bài báo và những nghiên cứu khoa học
liên quan đã được công bố ở Việt Nam và trên thế giới.
1.5.2. Nghiên cứu thực nghiệm
- Nghiên cứu và xây dựng một chương trình mô phỏng lập trình bằng ngôn ngữ lập trình
Python và thư viện mã nguồn mở OpenCV.
- Phân tích dữ liệu từ các công trình nghiên cứu
- Thí nghiệm và đánh giá kết quả thực nghiệm.
- Hiệu chỉnh sau thực nghiệm để tìm được các yếu tố cần thiết và quan trọng, nhằm ổn
6
định hệ thống.
Chương 2: CƠ SỞ LÝ THUYẾT
2.1. Cơ sở lý thuyết xử lí ảnh xác định đối tượng theo phân loại tầng
Xác định đối tượng theo phân loại tầng được dựa trên tính năng Haar là phương pháp
xác định đối tượng được đề xuất bởi Paul viola và Michael Jones vào năm 2001[1]. Đây
là một cách xác định đối tượng dựa trên Machine Learning dựa trên các hình ảnh được
cung cấp dùng để đào tạo cho máy tính, sau đó dùng để xác định đối tượng ở các hình
ảnh khác. Hình ảnh được cung cấp bao gồm Positive và Negative picture, Positive
picture là các hình ảnh có chứa đối tượng cần được xác định và Negative picture là các
hình ảnh không có chưa các đối tượng trong Positive.
Ví dụ với việc nhận dạng khuôn mặt. Ban đầu chúng ta sẽ cần số lượng lớn các ảnh
positive (hình ảnh có mặt người) và negative (hình ảnh không có mặt người) để đào tạo
bộ phân loại. Sau đó chúng ta trích xuất tính năng phân loại sau khi kết thúc quá trình
đào tạo. Ban đầu, hình ảnh được cung cấp sẽ bắt đầu được phân tầng, với mỗi tầng là
một giá trị độc lập được xác định bằng cách lấy số pixel từ hình chữ nhật màu đen trừ
đi tổng pixel của hình chữ nhật màu trắng. Dưới đây là một số dạng phân tầng
Hình 2.1: Các kiểu phân tầng cơ bản thường được sử dụng
Với cách tính như thế thì số lượng các giá trị độc lập sẽ rất lớn( đối với một hình ảnh
có kích thước 24x24 sẽ cho 160000 giá trị). Đối với từng giá trị, chúng ta cần phải xác
định kích thước pixel của ô trắng và đen. Để giải quyết điều này, họ giới thiệu các hình
ảnh tích phân. Tuy nhiên đối với hình ảnh có kích thước quá lớn, họ làm giảm các tính
toán cho một pixel nhất định chỉ liên quan tới bốn pixel.
Tuy nhiên với các giá trị của phân tầng được tạo thành, hầu hết chúng không liên quan
7
với nhau. Trở lại với ví dụ với khuôn mặt, với một hình ảnh Positive. Hai hình trên cùng
cho thấy, các đặc điểm được chọn dường như tập trung vào đặc tính vùng mắt thường
tối hơn vùng mũi và má. Hình thứ hai được lựa chọn dựa vào đặc tính là mắt tối hơn
sóng mũi. Tuy nhiên điều này cũng được áp dụng với các vùng khác trên khuôn mặt
dẫn đến sự không đồng nhất các đặc điểm dùng để nhận diện khuôn mặt.
Hình 2.2: Đặc tính khác nhau giữa vùng mắt và các bộ phận khác trên mặt
Để khắc phục điều này. Đối với mỗi tầng, nó sẽ tìm thấy ngưỡng tốt nhất để phân loại
khuôn mặt thành vùng positive và negative. Sự phân loại này tất nhiên sẽ có lỗi hoặc
phân loại sai. Quá trình phân loại sẽ diễn ra như sau, Mỗi hình ảnh được cho sẽ có một
trọng số bằng nhau ngay từ đầu, sau mỗi lần phân loại, trọng số của ảnh bị phân loại
sai sẽ tăng lên. Quá trình này được lặp đi lặp lại nhiều lần, tỷ lệ tầng bị lỗi cũng được
tính đồng thời. Quá trình này được tiếp tục cho đến khi đặt được độ chính xác hoặc tỷ
lệ tầng lỗi đặt được yêu cầu. Thông thường đối với một kích thước hình ảnh 24x24 sẽ
cho được khoảng 6000 tầng đáp ứng được yêu cầu.[2]
2.2. Cơ sở lý thuyết thuật toán ước lượng khoảng cách từ hệ camera quan sát đến vật cản 2.2.1. Sơ đồ nguyên lý được sử dụng để ước lượng khoảng cách từ hệ camera đến vật cản
Một số phương pháp thường được sử dụng để ước lượng khoảng cách từ hệ camera
quan sát đến vật cản như sử dụng sóng siêu âm, sóng laser, sóng hồng ngoại... Trong
nghiên cứu này chúng tôi sử dụng mô hình 2 camera được mô tả như hình bên dưới,
đồng thời kết hợp các thuật toán xử lý ảnh như hiệu chỉnh hệ camera để ước lượng
8
khoảng cách từ hệ camera đến vật cản.
Hình 2.3: Sơ đồ nguyên lý được sử dụng để ước lượng khoảng cách từ hệ camera đến
vật cản
2.2.2. Phương pháp hiệu chỉnh camera (Camera calibration)
Quá trình chuyển đổi ảnh từ không gian thực lên không gian hình ảnh thường cho kết
quả không tối ưu vì ảnh thu được từ 2 camera là không đồng nhất và thường bị méo
(distortion). Nếu chúng ta không có thông tin về mối liên hệ giữa 2 camera, khi đó
chúng ta muốn tìm một điểm tương ứng trên ảnh bên trái ở ảnh bên phải chúng ta phải
quét toàn bộ ảnh bên phải.
Tuy nhiên, nếu như ta có được mối liên hệ giữa 2 camera thì việc tìm một điểm ảnh
thuộc ảnh bên phải tương ứng với ảnh bên trái có thể được thực hiện bằng cách dò tìm
trên một đường cong epipolar duy nhất (R. Hartley and Zisserman, 2000).
Ngoài ra, nếu cả 2 camera được đặt song song, đồng trục với nhau trên mặt phẳng và
có cùng thông số tiêu cự, độ méo của ảnh,... khi đó đường cong epipolar sẽ được hiệu
chỉnh trở thành các đường thẳng. Điều đó đưa đến một hệ quả quan trọng là điểm ảnh
thuộc ảnh bên trái sẽ nằm trên cùng một đường thẳng trên ảnh bên phải. Kỹ thuật được
dử dụng để thực hiện việc này gọi là hiệu chỉnh camera (camera calibration). Thao tác
hiệu chỉnh camera thường được thực hiện bằng cách chụp các mẫu bàn cờ ở nhiều góc
độ khác nhau để tính ra các thông số nội của camera. Dựa vào các thông số này chúng
9
ta có thể hiệu chỉnh lại độ méo của các ảnh bằng một giải thuật phù hợp (R. Hartley and
Zisserman, 2000), đồng thời hiệu chỉnh độ méo các ảnh để biến các đường cong epipolar
thành các đường thẳng.
Mô hình 2 camera quan sát và đo khoảng cách được trình bày như ở hình 2.3. Trong
đó, hệ 2 camera được đặt đồng trục trên cùng một mặt phẳng cách nhau một khoảng là
b. Hệ camera được hiệu chỉnh để có cùng bộ thông số nội cùng tiêu cự f và góc nhìn
Ɵ0. Ảnh đối tượng quan sát được T xuất hiện ở hoành độ x1 trên ảnh bên trái và ở hoành
độ x2 trên ảnh bên phải. Áp dụng nguyên lý đồng dạng ta có :
𝐷
= − = [8] , 𝑥1 𝑓 𝑏2 𝐷 𝑥2 𝑓 𝑏1 𝐷
𝑓
Vì b = b1 + b2 nên :𝑏 = (𝑥2 − 𝑥1) hay :
D = bf x2 − x1
Trong đó :
- f là tiêu cự của camera chúng ta tìm thấy sau khi thực hiện Calibration.
- b là khoảng cách giữa 2 camera (đơn vị m , hằng số).
- x2 là hoành độ của tâm mục tiêu do camera bên phải quan sát được.
- x1 là hoành độ của tam mục tiêu do camera bên trái quan sát được.
10
- D là khoảng cách từ camera tới đối tượng cần đo (vật cản).
Chương 3: GIỚI THIỆU CHƯƠNG TRÌNH PHÁT HIỆN VÀ
CẢNH BÁO NGỦ GẬT VỚI VA CHẠM SỚM
3.1. Giới thiệu chương trình dùng để phát hiện và cảnh báo ngủ gật
Ngủ gật là hiện tượng thường xuyên xảy ra khi cơ thể cảm thấy mệt mỏi do thiếu năng
lượng hay do áp lực bởi phải làm việc trong một thời gian dài. Đặc biệt, đối với các tài
xế lái xe thường phải di chuyển một quãng đường rất dài là điều vô cùng thường xuyên
xảy ra. Việc xảy ra ngủ gật khi đang lái xe có thể gây ra ảnh hưởng nghiêm trọng dễ
dẫn đến các trường hợp tai nạn do tài xế mất khả năng phán đoán cũng như không kịp
thời xử lý tình huống khi các trường hợp đặc biệt xảy ra như: có người băng qua đường,
có xe phía trước dừng lại đột ngột, xe mất lái đi lệch khỏi hướng di chuyển,...Chính vì
vậy, việc tạo ra một chương trình dùng để phát hiện và cảnh báo ngủ gật là vô cùng cần
thiết, đồng thời từ đó có thể góp phần giảm thiểu các tai nạn đáng tiếc xảy ra. Chương
trình được nhóm điều chỉnh và phát triển để phù hợp với điều kiện sao cho thông tin
được trả về có độ chính xác cao nhất và bảo đảm được chất lượng ảnh khi camera tiến
hành thu cũng như lọc và xử lí ảnh trong một khoảng thời gian ngắn.
Dưới đây là chương trình phát hiện và cảnh báo ngủ gật đã được hoàn thiện bao gồm:
chương trình được viết dưới dạng ngôn ngữ lập trình Python(Code Python) và chương
trình trên phần mềm Labview( Code Labview)
Hình 3.1: Chương trình phát hiện và cảnh báo ngủ gật được viết bằng ngôn ngữ lập
11
trình Python
Ở chương trình Python, ban đầu ta có sẵn ba tệp tin hình ảnh về khuôn mặt, cả 2 mắt
và mắt trái. Khi camera thu được hình ảnh đầu vào, hình ảnh này sẽ được chuyển thành
ảnh xám. Sau đó hình ảnh này được đem đi so sánh với tệp hình ảnh có sẵn để so sánh
tình trạng của mắt trái với tình trạng của cả 2 mắt cũng như nhận dạng xem có tồn tại
khuôn mặt người trong khi camera bắt ảnh hay không. Nếu kết quả cho ra tình trạng
mắt trái với cả 2 mắt giống nhau thì có thể cả 2 mắt cùng đóng hoặc cùng mở. Mặt khác,
nếu kết quả của tình trạng mắt trái với cả 2 mắt là khác nhau thì có nghĩa là mắt đóng.
Từ kết quả này, dữ liệu sẽ được chuyển qua phần mềm LabVIEW dưới ba dạng: 0
(không phát hiện khuôn mặt tài xế) tức là camera không đối diện trực tiếp với tài xế, 1
(2 mắt đóng), 2 (2 mắt mở). Dưới đây là chương trình trên phần mềm LabVIEW:
12
Hình 3.2: Giao diện Block Diagram trong phần mềm LabVIEW
Hình 3.3: Giao diện Front Panel trong phần mềm LabVIEW
Trên LabVIEW để có thể lập trình được chương trình phát hiện và cảnh báo ngủ gật
này ta cần một thuật toán chính xác và hiệu quả. Trước tiên, cần xác định rõ các trường
hợp cần cảnh báo mà ở đây chính là 2 trường hợp có thể xảy ra là ngủ gật nhắm cả 2
mắt và ngủ gật mở cả 2 mắt. Đối với trường hợp dữ liệu gửi về từ Python có giá trị là 0
thì thông báo “ không phát hiện được tài xế ”. Nếu dữ liệu mà Python gửi về có giá trị
là 1 thì ứng với trường hợp 2 mắt đóng, ta sử dụng biến đếm để xác định thời gian 2
mắt đóng, nếu như quá 5s thì xác định là tài xế ngủ gật ngay lập tức thực hiện cảnh báo.
Đối với trường hợp cuối cùng, giá trị trả về là 3 tương ứng với trường hợp 2 mắt mở, ta
cũng sử dụng biến đếm để xác định khoảng thời gian 2 mắt mở. Vì bình thường mắt
người mở luôn có một khoảng thời gian giới hạn phải chớp mắt để mắt không bị khô,
nhứt nên trường hợp ngủ mở cả 2 mắt khá hi hữu. Tuy nhiên, để thuật toán được áp
dụng chính xác ta thiết lập khoảng thời gian tối đa giữa 2 lần chớp mắt là 30s. Nếu biến
13
đếm thời gian vượt quá 30s thì xác định là ngủ gật mở cả 2 mắt và tiến hành cảnh báo.
3.2. Giới thiệu chương trình cảnh báo va chạm sớm trên xe ô tô
Khi tài xế lái xe tham gia giao thông thường hay xảy ra các tình trạng bất ngờ như:
người đi bộ băng qua đường, các xe đi phía trước dừng lại đột ngột,... Điều này vô cùng
nguy hiểm, dễ gây ra các tai nạn đáng tiếc. Chính vì vậy, để nhằm hạn chế tình trạng
này cần một chương trình cảnh báo để giúp đỡ các tài xế có thời gian để xử lý khi lỡ
xảy ra các tình huống nói trên. Việc cảnh báo va chạm sớm đòi hỏi phải phát hiện và
xác định được khoảng cách tới vật cản trong thời gian ngắn để tiến hành cảnh báo. Dưới
đây là hình ảnh minh hoạ về một chương trình cảnh báo va chạm sớm với vật cản là xe
ô tô phía trước được viết trên nền Python kết hợp với LabVIEW:
14
Hình 3.4: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Hình 3.5: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
15
Hình 3.6: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Hình 3.7: Chương trình dùng để phát hiện và cảnh báo va chạm sớm trên Python
Chương trình này cho phép xác định được khoảng cách giữa vật cản và hệ camera để
đưa ra cảnh báo khi vượt quá khoảng cách an toàn. Đầu tiên, chương trình này sẽ xác
định đối tượng này có phải là xe ô tô hay không, nếu đúng là xe ô tô thì 2 camera sẽ tiến
hành truy xuất hoành độ của tâm vật cản phía trước theo từng camera.Sau khi truy xuất
được tọa độ tâm vật cản thì thuật toán sẽ bắt đầu tính toán và đưa ra thông số về khoảng
cách từ xe đến vật cản đó trong trường hợp này là xe ô tô hoặc con người,thông số này
sẽ được gửi qua phần mềm Labview để so sánh với điều kiện an toàn mà chúng ta đã
đưa ra ban đầu.Nếu khoảng tính toán được nhỏ hơn điều kiện ban đầu thì hệ thống sẽ
cảnh báo cho người lái biết để chủ động giảm tốc độ giữ khoảng cách an toàn.Ngược
lại nếu khoảng cách lớn hơn khoảng cho phép thì hệ thống sẽ không cảnh báo nhằm hạn
chế làm mất tập trung của người lái xe khi tham gia giao thông.
Vậy câu hỏi đặt ra là bằng cách nào ta có thể xác định được vật cản cụ thể trong trường
này là xe ô tô và con người.Để xác định chính xác người và ô tô thì nhóm em đã sử
dụng Opencv.Nó cho phép sử dụng những thư viện có sẵn để xác định một đối tượng
16
một cách nhanh nhất để tiết kiệm thời gian.Trong nghiên cứu này nhóm em sử dụng hai
thư viện là fullbody.xml và cars.xml.Cách sử dụng thư viện opencv thì rất đơn giản chỉ
cần theo thứ tự các bước sau:
- Khai báo thư viện opencv bằng câu lệnh: import cv2
- Dẫn đường link đến nơi chứa thư viện cần đọc:
car_cascade=cv2.CascadeClassifier(‘D:/car.xml’)
human_cascade=cv2.CascadeClassifier(‘D:/fullbody.xml’)
Sau khi đã sử dụng được thư viện Opencv thì để xác định được tọa độ tâm của vật thì
yêu cầu đặt ra là chúng ta phải vẽ được một box chứa vật mà ta muốn xác định.Từ thông
số hoành độ và tung độ của box đó ta dễ dàng xác định được tọa độ tâm của vật.Vì tọa
độ tâm của vật cũng là tọa độ tâm của box chứa vật.Vậy câu hỏi đặt ra là làm thế nào
để xác định box chứa vật.Opencv đã hỗ trợ công cụ để ta làm việc đó bằng câu lệnh:
- For (x,y,z,h) in car1:
Cv2.rectangle(img1,(x,y),(x+w,y+h),(0,0,255),2)
X1=x+w/2
Y1=y+h/2
Như vậy ta đã xác định được tọa độ tâm của vật.
Từ hoành độ truy xuất đã có được từ 2 camera ta có thể tính toán được khoảng cách
từ vật cản (xe ô tô) phía trước đến hệ camera thông qua công thức:
D = bf x2 − x1
Trong đó :
- f là tiêu cự của camera chúng ta tìm thấy sau khi thực hiện Calibration.
- b là khoảng cách giữa 2 camera (đơn vị m , hằng số).
- x2 là hoành độ của tâm mục tiêu do camera bên phải quan sát được.
- x1 là hoành độ của tam mục tiêu do camera bên trái quan sát được.
17
- D là khoảng cách từ camera tới đối tượng cần đo (vật cản).
Để tính được khoảng cách từ vật cản đến hệ camera ta cần biết rõ tiêu cự của các
camera này. Để đi xác định được tiêu cự của các camera ta sử dụng chương trình được
viết theo ngôn ngữ Python:
18
Hình 3.8: Chương trình dùng để tính tiêu cự camera
Hình 3.9: Chương trình dùng để tính tiêu cự camera
Hình 3.10:Chương trình dùng để tính tiêu cự camera
Sau khi đã tính được tiêu cự của camera ta dễ dàng tính ra được khoảng cách từ vật
19
cản đến hệ camera.
Ở đây, ta lấy khoảng cách giới hạn an toàn là 5m. Phần mềm LabVIEW sẽ lấy dữ
liệu là khoảng cách mà ta đã tiến hành tính được đem so sánh với khoảng cách giới
hạn là 5m. Nếu khoảng cách tính được nhỏ hơn khoảng cách an toàn này thì tiến hành
cảnh báo để tài xế biết và kịp thời điều chỉnh. Dưới đây là chương trình LabVIEW
dùng để so sánh khoảng cách tính được với khoảng cách giới hạn 5m:
Hình 3.11: Giao diện Block Diagram trong phần mềm LabVIEW
Bằng các công cụ trong LabVIEW cho phép lập trình chương trình cảnh báo cơ bản
như trên. Trong đó, các dữ liệu được truy xuất ra từ Python là dữ liệu cần thiết để
chương trình này có thể hoạt động. Chính vì vậy, để chương trình này đạt được độ ổn
định và chính xác thì bắt buộc dữ liệu đầu vào LabVIEW phải được xử lí một cách
chính xác nhất. Ngoài ra, có thể thấy giao diện của chương trình rất đơn giản như hình
20
bên dưới:
21
Hình 3.12: Giao diện Front Panel trong phần mềm LabVIEW
Chương 4: THỰC NGHIỆM, KẾT QUẢ NGHIÊN CỨU
Mục đích của việc thực nghiệm là để xem xét khả năng hoạt động của hệ thống ngoài
thực tế.Thông qua đó có thể xác đinh được những vấn đề còn sai sót và chưa tối ưu của
hệ thống.Giúp chúng ta hoàn thiện hệ thống tốt hơn.Là một kỹ sư thì yêu cầu đầu tiên
khi chế tạo một sản phẩm là sản phẩm đó phải có khả năng áp dụng trong thực tế một
cách ổn định nhất,không bị ảnh hưởng bởi các yếu tố bên ngoài.
4.1 Thực nghiệm hệ thống cảnh báo ngủ gật.
Đối với hệ thống cảnh báo ngủ gật nhóm em sử dụng 1 camera để nhận diện khuôn
mặt của người lái xe.Sau đó sẽ so sánh tình trạng của 2 mắt và đưa ra phán đoán xem
người lái xe đang mở hay nhắm mắt,nếu người lái xe được phán đoán là ngủ gật thì hệ
thống sẽ đưa ra cảnh báo cho người lái xe biết để đánh thức họ.Qua trình thực nghiệm
được tiến hành trong 2 trường hợp sau:
4.1.1. Trường hợp nhận diện được người lái xe và xác định người lái xe không ngủ gật.
Trong trường hợp này nhóm em để người lái xe mang khẩu trang, mục đích để đánh
giá khả năng nhận diện của hệ thống có hoạt động tốt hay không.Thì kết quả đạt được
là hệ thống vẫn nhận diện tốt khuôn mặt người lái xe dù người này vẫn mang khẩu trang
bằng cách vẽ một hình chữ nhật màu đỏ xung quanh mặt người lái.Đồng thời hệ thống
cũng đánh giá được tình trạng bình thường của người lái xe thông qua việc nhận diện
và so sánh tình trạng hai mắt của người lái.Kết quả trả về hai mắt của người này vẫn
mở (open) đúng như thực tế
22
Hình 4.1: Nhận diện mở mắt từ python
Sau khi python đã xác định được khuôn mặt của người lái xe và tình trạng bình
thường của người này thì tín hiệu sẽ được truyền qua labview đánh giá.Cửa sổ Front
Panel sẽ xuật hiện dòng chữ :”DA PHAT HIEN TAI XE” khi nhận diện được mặt
người lái,và dòng chữ:”BINH THUONG” đối với ô tình trạng lái,đồng thời không bật
đèn báo cảnh báo để không làm mất tập trung và gây ra sự khó chịu cho người lái.
Hình 4.2: Xử lý thông tin người lái không ngủ gật bằng labview
4.1.2 Trường hợp nhận diện được người lái xe và xác định người lái xe ngủ gật
Đối với người tham gia giao thông thì tầm nhìn là điều rất quan trọng,khi không đủ
tầm nhìn thì người lái rất khó điều khiển phương tiện một cách an toàn dễ gây ra nguy
hiểm cho người khác cũng như chính bản thân người lái xe.Vậy câu hỏi đặt ra là làm
thế nào để đánh giá người lái là ngủ gật hay không.Để đảm bảo an toàn cho người tham
gia giao thông cũng như người lái xe nhóm em xét hai trường hợp sau đây đều vào
nhóm ngủ gật.Trường hợp người lái xe nhắm hai mắt và trường hợp người lái xe nhắm
một mắt vì khi nhắm một mắt người lái không đủ tầm nhìn để điều khiển phương tiện
23
một cách an toàn.
Đối với trường hợp ngủ gật nhưng chỉ nhắm một mắt hệ thống rất khó nhận biết.Nên
nhóm em chủ yếu tập trung vào thực nghiệm trường hợp này để có thể tối ưu hóa khả
năng đánh giá của hệ thống.Còn trường hợp cả hai mắt đều nhắm thì tương tự.
Vậy làm thế nào để xác định được người lái nhắm một mắt và mở một mắt.Thì điều
tiên quyết đầu tiên để xác định được tài xế có ngủ gật hay không là hệ thống hay nói
cách khác là camera phải xác định được khuôn mặt của người lái xe.Chỉ khi xác định
được khuôn mặt của người lái xe thì chúng ta mới đến xác định tình trạng của mắt đang
mở hay là nhắm.Khi hệ thống đã xác định được khuôn mặt người lái xe để biết tình
trạng của mắt chúng ta chỉ cần đi so sánh tình trạnh của mắt.Thuật toán của nhóm em
đưa ra là so sánh số lượng mắt đang mở với số lượng mắt trên khuôn mặt của người
lái.Khi số lượng mắt đang mở nhỏ hớn số lượng mắt trên khuôn mặt thì chứng tỏ người
lái xe đang ngủ gật.Trong trường hợp này nhóm em giả định cho người lái xe đang
nhắm một mắt và tiến hành thực nghiệm để xem độ ổn định của hệ thống.Kết quả thuật
toán python xác định được tài xế đang ngủ gật vì số lượng mắt mở nhỏ hơn số lượng
mắt trên khuôn mặt người lái.
24
Hình 4.3: Nhận diện nhắm mắt nhắm từ python
Sau khi xác định được khuôn mặt người lái và tình trạng không bình thường hay nói
cách khác là trạng thái ngủ gật của người này.Tín hiệu sẽ được truyền từ Python sang
Labview để cảnh báo người lái.Nhưng không phải có tín hiệu nhắm mắt truyền đến thì
hệ thống sẽ cảnh báo,thuật toán labview sẽ làm công việc đếm thời gian nhắm mắt của
người lái.Nếu thời gian đêm được lớn hơn 5s thì thuật toán sẽ đưa ra cảnh báo bằng
dòng chữ:"”TAI XE NGU GAT” ở ô TINH TRANG LAI trên cửa sổ Front Panel,đồng
thời bật sáng đèn để đánh thức người lái xe.
Hình 4.4: Cảnh báo tài xế ngủ gật trên labview
4.2 Thực nghiệm hệ thống cảnh báo va chạm sớm.
Hệ thống cảnh báo va chạm sớm giúp người tài xế tránh được các va chạm không
mong muốn bằng cách tính toán khoảng cách từ xe đến vật cản phía trước trong trường
hợp này là con người.Khi khoảng cách từ vật cản đến xe nhỏ hơn một khoảng giá trị
cho phép trong trường hợp này khoảng giá trị cho phép của nhóm em là 5m.Nếu khoảng
cách từ xe đến vật nhỏ hơn 5m thì hệ thống sẽ đưa ra cảnh báo cho tài xế bằng đèn và
còi được lắp trên xe.Ngược lại nếu khoảng cách lớn hơn 5m thì sẽ không cảnh báo tránh
làm mất tập trung và gây khó chịu cho người lái xe.Qúa trình cảnh báo của hệ thống
25
được tiến hành như sau:
Nhận diện được vật cản là con người.Để nhận diện con người nhóm em sử dụng thư
viên opencv kết hợp với thuật toán python bằng cách sử dụng file Fullbody.xml có sẵn
trong thư viện.Chỉ khi nào xác định được vật cản thì mới có thể tính chính xác khoản
cách từ xe đến vật cản đó,vì vậy yêu cầu đặt ra là phải tạo ra file.xml có độ chính xác
cao để có thể nhận diện tốt vật cản mà không bị ảnh hưởng nhiều của ảnh sáng.Nên sử
dụng thư viên opencv là một lựa chọn tối ưu của nhóm em.
Hình 4.5: Xác định khoảng cách từ xe đến vật bằng python
Chỉ khi cả hai camera cùng bắt được vật cản thì khoảng cách mới được tính chính xác
và ít sai số nhất.Trên hình 4.5 khi hai camera nhận diện được vật cản thì khoảng cách
sẽ được tính toán và in ra trên khung hình chứ vật cản,và thực nghiệm khoảng cách của
nhóm là gần bằng 4.1m.Có thể thấy có các giá trị khác xuất hiện như 3.7m khi tính
toán,nguyên nhân là do hình ảnh bắt từ hai camera không đồng thời nên dẫn đến sai số
này.Để xác định số liệu mà thuật toán tính toán có đúng hay không,bước thiếp theo
26
nhóm em sử dụng thước đo để kiểm tra và tính xác suất khi không bắt cả hai camera
được cùng lúc.Thông qua đó có thể thấy được tính ổn định cũng như độ chính xác của
hệ thống có trong khoảng cho phép hay không.
27
Hình 4.6: Xác định khoảng cách từ người đến xe trên thực tế
Hình 4.7: Xác định khoảng cách từ người đến xe trên thực tế
Kết quả trên thực tế cho thấy khoảng cách từ xe đến vật cản là khoảng 4.1m đúng với
kết quả được tính toán bằng thuật toán trên python.Nhưng vẫn còn sai số do hệ thống
và tuận toán chưa được tối ưu,những sai số này vẫn nằm trong khoảng cho phép
được,không ảnh hưởng đến kết quá quá nhiều.Với khoảng giá trị từ 3.7-4.1m trong tính
toán so với thực tế thì xác suất tính đúng là trên 80%.Sau khi tính toán được khoảng
cách từ vật đến xe thì giá trị đó sẽ được gửi về labview để tiến hành so sánh với giá trị
28
ban đầu đã được chon sẵn (trong trường hợp này là 5m).
Hình 4.8:Cảnh báo va chạm trên labview
Khi khoảng cách từ xe đến vật nhỏ hơn khoảng cách cho phép thì đèn sẽ sáng và còi
sẽ bật để cảnh báo cho tài xế biết có vật trong khoảng nguy hiểm.Trong trường này
giá trị từ python tính toán được là 4.1m,sau đó labview sẽ lấy giá trị này so sánh với
giá trị an toàn là 5m,vì giá trị nhận về nhỏ hơn giá trị an toàn nên hệ thống biết là có
vật cản trong khoảng nguy hiểm nên bật đèn để báo hiệu cho người lái.
4.3 Hệ thống cảnh báo va chạm khi lắp trên xe mô hình mini
Để thực nghiệm một cách cụ thể nhất về hệ thống cảnh báo va chạm sớm.Nhóm em
đã xây dựng mô hình xe mimi chạy bằng bình ắc quy.Mô hình được điều khiển bằng
thuật toán labview.Thông qua mô hình ta dễ dàng hiểu được cách thức hoạt động của
hệ thống cảnh báo va chạm và có thể phát triển cho các loại xe ô tô ngày nay.Về cơ bản
mạch điều khiển của mô hình bao gồm: board Adruino UNO R3,module điều khiển
động cơ loại 12v-30A,động cơ RS 550 12v-15000 vòng/phút.Đặc biệt là máy chủ xử
lý,vì lý do kinh phí nên nhóm em xử lý laptop để làm máy chủ xử lý.Tín hiệu sau khi
được Labview xử lý sẽ được máy tính truyền xuống adruino,chiều quay cũng như vận
động của động cơ sẽ được điều khiển bằng arduino thông qua module điều khiển động
29
cơ.
Hình 4.9:Mô hình xe không người lái
Hình 4.10: Thuật toán điều khiển xe bằng Labview
Đối với xe mô hình mini ta có thể đưa ra cảnh báo bằng đèn hay còi báo và còn có thể
can thiệp vào hệ thống để xe dừng lại khi có vật cản phía trước.Thuật toán Labview trên
30
cho phép ta làm điều đó.Khi chạy chương trình thì giá trị khoảng cách sẽ được truyền
từ python sang labview để xử lý,giá trị được này được đem so sánh với giá trị an toàn
đã được đề cập ở phần 4.2.Nếu giá trị lớn hơn giá trị an toàn thì thuật toán sẽ trả giá trị
là True,khi đó động cơ sẽ được cấp nguồn đến và xe có thể chạy,vận tốc của xe có thể
được điều khiển thông qua module điều khiển động cơ, Adruino và thuật toán như hình
4.9.Ngược lại nếu giá trị truyền từ python đến nhỏ hơn giá trị an toàn thì thuật toán sẽ
trả giá trị là False,khi đó lập tức xe sẽ ngừng lại và còi sẽ kêu.
4.4 Kết quả thực nghiệm
Đối với hai hệ thống cảnh báo ngủ gật và hệ thống cảnh báo va chạm sớm số lần thực
nghiệm cho mỗi hệ thống là 100 lần.Trong 100 lần thực nghiệm đó thì xác suất về độ
chính xác của mỗi hệ thống là 60-65%.Qua kết quả đạt được thì nhóm em rút ra một
trong những nguyên nhân chính gây ảnh hưởng đến độ chính xác khi hoạt động của hệ
thống là ánh sáng.Đối với việc xử lý ảnh thì ánh sáng đóng một vai trò vô cùng quan
trọng,nó quyết định đến độ ổn định của hệ thống cũng như khả năng xử lý.Ta có thể
hiểu đơn giản là khi thiếu ánh sáng hay lượng ánh sáng quá nhiều sẽ làm cho hình ảnh
bắt được từ camera không tốt,và khi hình ảnh được thu nhận không tốt dẫn đến việc
31
nhận dạng sẽ bị sai lệch.Chính vì vậy dẫn đến việc hệ thống sẽ đưa ra xử lý không đúng.
Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
5.1. Kết luận
Sau khi tiến hành thực nghiệm, cho thấy mô hình đã hoạt động ổn định với độ chính
xác nhận diện từ 60-65%. Tuy nhiên, trong quá trình xử lí có thể xảy ra một vài tình
huống mất ổn định do độ phân giải của các camera trong mô hình còn chưa tối ưu.
Ngoài ra, mô hình chỉ ổn định đối với khoảng cách xác định nằm trong khoảng từ 50-
80 cm ( đối với camera được lắp đặt để nhận diện khuôn mặt của tài xế) và 18-20 m
(đối với camera dùng để xác định khoảng cách đến vật cản (xe ô tô) phía trước. Trong
khoảng nói trên, độ chính xác của mô hình là tốt nhất và hoạt động ổn định nhất và cho
ra kết quả mang tính chính xác cao nhất.
5.2. Hướng phát triển
Theo kết quả ta thu được từ thực nghiệm, thì độ ổn định của mô hình bị ảnh hưởng rất
nhiều bởi môi trường. Nên việc tối ưu hóa để tăng sự ổn định thì ta có hai phương pháp
chủ yếu. Đầu tiên, ta có thể tối ưu hóa phần cứng như hệ thống camera và các thấu kính
giúp tăng sự ổn định của ánh sáng thu được, đồng thời tối ưu hóa chương trình xử lí
ảnh. Ưu điểm của phương pháp này là xây dựng trên nhưng gì ta đã có, nhưng chi phí
cao và cần nhiều thời gian và kiến thức về xử lí ảnh để tối ưu hóa giải màu mà chúng ta
xử lí. Hoặc ta có một phương pháp đã được tối ưu nhằm mục đích khắc phục những
điểm yếu khi xử lí ảnh mà ta đã sử dụng. Phương pháp đó gọi là deep learning.
Deep learning là một lĩnh vực của machine learning liên quan đến các thuật toán lấy
cảm hứng từ cấu trúc và chức năng của bộ não được gọi là mạng lưới thần kinh nhân
tạo. Cách hoạt động cơ bản của các phương pháp sử dụng deep learning như sau[9] :
- Cung cấp dữ liệu về vật thể mà ta muốn xác định. Cụ thể dữ liệu mà ta đề cập
đến là rất nhiều ảnh mẫu, trong đó chứa vật thể mà ta hướng đến.
- Mỗi bức ảnh sẽ được giải mã chi tiết dưới nhiều cấp độ. Ví dụ một ảnh đầu vào
có kích thước 50x50 sẽ được chia nhỏ thành các ảnh nhỏ có kích thước 7x7,5x5,..
- Thuật toán sẽ kiểm tra xem các đặc điểm, chi tiết chung giữa các bức ảnh. Nếu
một hình dạng hoặc các đường được lặp lại nhiều lần, thuật toán sẽ gắn nhãn nó
32
như là một đặc tính quan trọng.
- Sau khi phân tích đủ hình ảnh cần thiết, ta sẽ thu được một thuật toán mà chứa
đầy đủ các đặc trưng của vật thể mà ta muốn xác định. Giờ đây ta chỉ việc cung
cấp các ảnh thô thông thường, để máy tính có thể xác định vật thể đó.
Hình 5.1: Nguyên lí cơ bản của deeplearning
Ví dụ đối với chương trình xác định khuôn mặt, deep learning hoạt động như
sau:
- Từ những hình ảnh mẫu mà chúng ta cung cấp. Máy tính chuyển đổi ảnh mẫu
thành các mẫu tương phản cục bộ.
- Lớp đầu tiên ( hidden layer 1) sử dụng các mẫu tương phản để xác định các đặc
trưng như mắt, mũi miệng.
- Lớp thứ hai ( hidden layer 2) có thể áp dụng các đặc điểm khuôn mặt đó để đưa
ra các mẫu khuôn mặt.
- Cuối cùng hình thành một mạng lưới thần kinh có khả năng kết hợp các nơron
thần kinh ( các thuật toán thể hiện đặc trưng riêng lẻ) thành một mạng lưới phức
tạp. Có khả năng phân tích và nhận diên khuôn mặt ở nhiều điều kiện khác nhau.
Dựa theo nguyên tắc nhận diện của deep learning là dự vào đặc điểm cấu trúc thay vì
33
đặc điểm màu của phương pháp mà ta đang sử dụng. Thì việc nhận diện sẽ không còn
ảnh hưởng quá nhiều bởi ánh sáng. Nhờ thế khắc phục điểm yếu của chương trình của
chúng ta.
Cụ thể phương pháp sử dụng deep learning mà nhóm em nghiên cứu là tensorflow
object detection api. Phương pháp này sử dụng tensorflow/models[10] và model zoo[11]
để nhận diện vật thể.
Trong đó model zoo là mô hình nhận diện được đào tạo sẵn dựa trên dữ liệu bao gồm
: COCO dataset, Kitti dataset, Open Images dataset, AVA v2.1 dataset, iNaturalist
Species Detection Dataset , Snapshot Serengeti Dataset. Những mô hình này có các mô
hình nhận diện được xây dựng sẵn, chúng ta có thể sử dụng các mô hình có sẵn này cho
các mục đích khác có liên quan. Chúng cũng hữu ích cho việc xây dựng các mô hình của
chúng ta, khi muốn tạo một bộ dữ liệu mới. Cụ thể trong mỗi model được đào tạo trước,
sẽ cung cấp:
- Một mô hình tương ứng với tệp cấu hình đã được sử dụng để đào tạo mô hình
trong thư mục samples/configs.
- Tệp tar.gz chứa mô hình đào tạo trước.
- Tốc độ mô hình. Là thời gian đào tạo của một hình ảnh chuẩn 600x600 tính bằng
ms. Tuy nhiên thời gian này chỉ mang tính tương đối vì nó phụ thuộc vào cấu hình
của thiết bị sử dụng.
- Hiệu suất nhận diện của model, được tính bằng mAP.
- Dữ liệu đầu ra ( boxes và masks)
Tensorflow/models là một chương trình phát triển để nhận diện vật thể dựa trên gói
tensorflow. Chương trình này bao gồm các thư mục nhằm mục đích đào tạo các nhận diên
vật thể.
Các bước để xây dựng một mô hình ngẫu nhiên bao gồm[12]:
- Thu thập các dữ liệu ảnh ban đầu chứa các vật thể mà bạn muốn nhận diện. Các
ảnh thu thập nên được chụp trong nhiều điều kiện khác nhau ( như vị trí, độ sáng)
34
và ảnh không bị mờ, gãy. Số lượng ảnh phụ thuộc vào độ phức tạp của hình ảnh.
Hình 5.2 : Thu thập hình ảnh mẫu
- Từ những hình ảnh thu thập được. Ta phân vùng của vật thể nhận diện, và đặt tên
cho vật thể đó
35
Hình 5.3: Xác định, dán nhãn đối tượng muốn nhận diện
- Sau đó ta thiết lập các file .pbtxt .csv và các thay đổi cần thiết trên các file
generate_tfrecord.py và file .config phù hợp với các thiết lập của file .pbtxt. Khi
các thiết lập đã hoàn chỉnh, ta tiến hành đào tạo mô hình. Thời gian đào tạo mô
hình phụ thuộc vào cấu hình máy tính đồng thời ta có thể theo dõi để biết khi nào
mô hình đã đủ điều kiện dựa trên giá trị loss . tùy thuộc vào model zoo mà chúng
ta sử dụng, thì giá trị loss này khác nhau.
Hình 5.4 : Tiến hành đào tạo mô hình
- Sau khi quá trình đào tạo kết thúc, ta sẽ thu được một mô hình. Ta sử dụng mô
hình để tiến hành nhận diện các hình ảnh khác
36
Hình 5.5 : Sử dụng mô hình đào tạo được
Mặc dù quá trình đào tạo nhận diện chỉ ở bước thử nghiệm ban đầu nhưng kết quả cho
rất tích cực. Độ chính xác nhận được dao động từ 90 - 95 % trong hai điều kiện sáng riêng
biệt ( ánh sáng tự nhiên và ánh sáng đèn).
Từ kết quả trên ta đã có ưu, nhược điểm của phương pháp deep learning so với xử lí
ảnh phần tầng.
Ưu điểm: Độ chính xác cao, ít ảnh hưởng bởi độ sáng. Không cần quá nhiều kiến thức
về xử lí các giải màu ( các giải màu này ảnh hưởng bởi độ sáng ).
Nhược điểm : Tốc độ xử lí ảnh chậm, nên kích cỡ ảnh xử lí nhỏ. Thời gian đào tạo một
37
mô hình khá lâu ( dao động từ 3 đến 12 tiếng ).
TÀI LIỆU THAM KHẢO [1] Vũ Đức Thái, Nghiên cứu “Xây dựng hệ thống nhúng phát hiện và cảnh báo lái xe
ngủ gật dựa trên kỹ thuật xử lý ảnh ”, Đại học Công nghệ thông tin và Truyền thông
TP. Thái Nguyên
[2] PGS. Đỗ Văn Dũng, Nghiên cứu “ Ứng dụng sóng não phát hiện dấu hiệu buồn
ngủ và đưa ra tín hiệu cảnh báo đối người lái ”, ĐHSPKT TPHCM
[3] Nguyễn Ngọc Đức, “ Học sinh sáng chế thiết bị chống ngủ gật cho tài xế ô tô ”,
Thanh Hóa, 2015
[4] Lê Thế Hải, Lê Thanh Hòa, hướng dẫn PGS.TS. Hoàng Đình Chiến, Luận văn tốt
nghiệp “ 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 ” , Đại học Bách Khoa TPHCM, 2012
[5] Nguyễn Thế Đức, Hồ Văn Chương, giúp đỡ Ths. Trần Lê Thăng Đồng, kỹ sư Tạ
Quốc Việt, “ Hệ thống cảnh báo ngủ gật sử dụng GPGA ”, Đại học Duy Tân, Đà
Nẵng
[6] Trần Lê Anh Chương, Nguyễn Khắc Hiếu, Đề tài luận văn “ Nhận dạng trạng thái
mắt ứng dụng trên Pandaboard ”, Đại học Bách Khoa TPHCM
[7] Nguyễn Quang Trường, Hoàng Mạnh Cường, Vũ Mạnh Cường, Trần Anh Đức, “
Bị "đánh thức" vì tư duy chậm ”, Đại học Bách Khoa Hà Nội, 2013
[8] 15 CN TRUONG QUOC BAO 112 120-1
[9] Khái niệm về deep learning, machine learning, artificial intelligence
https://www.edureka.co/blog/what-is-deep-learning .
[10] tensorflow/models : https://github.com/tensorflow/models/tree/r1.13.0
[11] modelzoo:
https://github.com/tensorflow/models/blob/master/research/object_detection/g3
doc/detection_model_zoo.md
[12] Phương pháp đào tạo mô hình nhận diện của EdjeElectronic
:https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-
38
Tutorial-Train-Multiple-Objects-Windows-10
Lập trình Python :
https://www.youtube.com/watch?v=NZj6LI5a9vc&list=PL33lvabfss1xczCv2BA0Sa
NJHu_VXsFtg
https://becominghuman.ai/face-detection-with-opencv-and-deep-learning-from-video-
part-2-592e2dee648
https://www.youtube.com/watch?v=QV1a1G4lL3U&fbclid=IwAR0h02gbwGJtOATL
mR3S8gUkcPdZnFLCbKZHcYWiiTgyKksQ7z9ZgQUMa5Y
https://www.youtube.com/watch?v=1I4gHpctXbU&fbclid=IwAR22IWz2d3-
39
N3u0uRy2XtOPVd6osFyGrWOtFOd5wtQw3HJxl8cuSTvY3iRM
PHỤ LỤC
Code chương trình điều khiển bằng LabVIEW:
- Chương trình nhận diện để phát hiện và cảnh báo ngủ gật:
Trong đó, bao gồm các chương trình con có các chức năng khác nhau:
40
- Chương trình nhận diện xác định tài xế có trong khu vực nhận diện hay không
Có 2 trường hợp có thể xảy ra: tài xế không xuất hiện trong khu vực hoạt động của
camera (không phát hiện được tài xế) hoặc tài xế xuất hiện trong khu vực hoạt động của
camera (bình thường)
- Chương trình tính toán thời gian mở mắt
-Chương trình tính toán thời gian nhắm mắt
41
- Chương trình cảnh báo va chạm sớm:
Trong chương trình này, ngoài việc có chương trình tính toán khoảng cách từ hệ
camera đến vật cản như hình trên còn sử dụng các công cụ chức năng khác như:
Kết nối File dữ liệu Python với chương trình LabVIEW
Tham chiếu dữ liệu đưa từ LabVIEW sang Python
Khởi động chương trình con trong Python
42
Xuất kết quả từ chương trình con của Python lên Lab VIEW
S
K
L
0
0
2
1
5
4

