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