BỘ GIÁO DỤC VÀ ĐÀO TẠO CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do – Hạnh phúc TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH BẢN XÁC NHẬN CHỈNH SỬA ĐỒ ÁN TỐT NGHIỆP Họ v
TỔNG QUAN
Lí do chọn đề tài
Nhờ sự phát triển không ngừng của khoa học, kỹ thuật và công nghệ, nhờ vậy mà có sự đan xen kết hợp giữa các công nghệ khác nhau vào chiếc ô tô Chiếc ô tô ngày nay là sự kết hợp của không chỉ về mặt cơ khí như động cơ, hộp số, mà còn về hẹ thống điện như máy lạnh, hệ thống đèn và mới nhất là có cả lập trình và vi xử lí như hệ thống CAN, các cảm biến và các ECU Có thể thấy rõ ràng chiếc ô tô ngày trước và nay có một sự khác biệt rất lớn, ngày càng nhiều tính năng hơn, càng nhiều sự góp mặt của các công nghệ, kỹ thuật hơn và hiện đại hơn
Trước tình hình mà nhiều công nghệ ở nhiều lĩnh vực khác nhau ngày càng được áp dụng trên chiếc xe ô tô, đặt ra một các tiêu chuẩn mới cho các kĩ sư, sinh viên trong ngành công nghệ kĩ thuật ô tô ngày nay phải luôn trau dồi các kiến thức không chỉ chuyên ngành ô tô mà còn thêm các kiên thức ở các chuyên ngành khác
Do đó, việc nâng cao trình độ chuyên môn và mở rộng kiến thức đa ngành là điều cần thiết để đáp ứng được sự phát triển nhanh chóng của ngành công nghiệp ô tô hiện đại Nhận thức được thực trạng đó, nhóm nghiên cứu đã cùng nhau tìm hiểu dưới sự hỗ trợ của giảng viên hướng dẫn Th.S Nguyễn Thiện Dinh để thực hiện đề tài “Nghiên cứu chế tạo hệ thống giám sát người lái”, nhằm áp dụng các kiến thức đã được dạy trong suốt quá trình học tại trường Đại học Sư Phạm Kỹ Thuật TP.HCM và các kiến thức đa ngành mà nhóm nghiên cứu tự học vào trong thực tế.
Thực trạng đề tài
1.2.1 Thực trạng tình hình trong nước
Hiện nay, ứng dụng của công nghệ xử lý ảnh đang ngày càng được áp dụng rộng rãi trong nhiều lĩnh vực ở Việt Nam Đặc biệt ở các lĩnh vực liên quan đến an ninh, giám sát tại các cơ quan, doanh nghiệp, hay nhân sự Trong lĩnh vực giao thông công nghệ xử lí ảnh được áp dụng vào để giám sát, nhận diện và giảm thiểu tai nạn xảy ra Đặc biệt ở nước ta công nghệ trên ô tô của hãng xe Việt Nam VinFast mới đây đã giới thiệu tính năng nhận diện gương mặt tài xế để cảnh báo các biểu hiện như buồn ngủ, mệt mỏi [1] Ở trong môi trường học thuật càng ngày các đồ án, các nghiên cứu học thuật liên quan đến xử lí ảnh ngày càng được các bạn sinh viên nghiên cứu và áp dụng Với các đề tài đa dạng như ứng dụng máy học và xử lí ảnh trong việc phát hiện lá cây sâu bệnh, hay
2 ứng dụng xử lí ảnh trong việc nhận dạng và trích xuất thông tin, dữ liệu trong các tờ hoá đơn bán hàng là đề tài cho luận văn Thạc sĩ của anh Thân Đức Trường [2] Các đề tài liên quan đến ngành công nghệ kĩ thuật ô tô thì có mô phỏng hệ thống đèn Matrix Led trên xe Audi của thầy ThS Nguyễn Thiện Dinh [3]
Qua các nghiên cứu trên, có thể thấy xử lí ảnh ngày càng được quan tâm và nghiên cứu ở tất cả các ngành nghề khác nhau Tuy nhiên, vì các lí do về chi phí, tốc độ xử lí của phần cứng mà hiện nay tiềm năng của các ứng dụng xử lí ảnh vào thực tế chỉ gói gọn ở trong vấn đề an ninh, giám sát và hỗ trợ con người Nhưng với nhiều tiềm năng to lớn và trải dài ở nhiều ngành nghề khác nhau, có thể nói đây là một xu hướng không thể thiếu ở trong tương lai Nắm bắt được tầm quan trọng và thiết yếu của việc áp dụng công nghệ xử lí ảnh, nhóm nghiên cứu đã cùng nhau tìm hiểu, nghiên cứu và tiến hành đề tài hệ thống giám sát người lái mô phỏng theo công nghệ mà hãng xe Việt Nam VinFast đã thông báo sẽ có mặt ở các dòng xe trong tương lai
1.2.2 Thực trạng tình hình ngoài nước
Không chỉ riêng ở trong nước mà xu hướng các dự án liên quan đến việc xử lí ảnh đã xuất hiện từ lâu và trở nên nổi trội ở những năm gần đây Vào năm 1999, một thư viện chứa các chức năng liên quan đến thị giác máy tính được bắt đầu phát triển và cho ra mắt vài năm sau đó Tuy nhiên với sự tối ưu về mặt phần mềm và hạn chế về mặt phần cứng cũng như đây là một vấn đề khá mới mà cho đến mãi những năm gần đây khi các vấn đề về phần mềm và phần cứng đã được giải quyết hiệu quả, đã thú hút được sự chú ý không chỉ những hãng công nghệ, hãng xe lớn mà còn các nhóm nghiên cứu sinh, các sinh viên yêu thích và đang học hỏi trong lĩnh vực kĩ thuật
Một số các công nghệ đã xuất hiện hiện nay có thể kể đến như là hệ thống Face connect được giới thiệu trên xe Genesis GV60 [4], hệ thống này có thể nhận biết được người lái thông qua camera được đặt ở cửa xe để mở cửa Ngoài hệ thống Face connect còn có các hệ thống khác đã xuất hiện như hệ thống DMS trên xe Subaru [5], hệ thống này có thể cảnh báo người lái khi mệt mỏi hoặc mất tập trung, ngoài ra còn có nhiều chức năng khác như điều chỉnh gương, ghế ngồi theo các tài xế khác nhau.
Mục tiêu của đề tài
Tìm hiểu cơ sở lý thuyết về xử lí ảnh và ngôn ngữ lập trình Python để xây dựng một chương trình có thể nhận diện, tính toán và đưa ra các kết quả phù hợp với các tính toán
3 đo Ứng dụng các công cụ máy học miễn phí đã được huấn luyện sẵn để thực hiện các nghiên cứu nhằm tiết kiệm thời gian
Nghiên cứu sử dụng và kết hợp các vi điều khiển, máy tính nhúng khác nhau thông qua các chuẩn giao tiếp để chúng có thể trao đổi thông tin đã được tính toán cho nhau
Xây dựng một hệ thống nhận diện người lái với sự kết hợp của các điều khiển, máy tính học ứng dụng các kiến thức từ xử lý ảnh, ngôn ngữ lập trình Python và thông tin từ mạng CAN trên xe.
Đối tượng và phạm vi nghiên cứu
Trong đề tài này nhóm nghiên cứu tập trung vào nghiên cứu các đối tượng sau:
- Ngôn ngữ lập trình Python và cách sử dụng các công cụ, các mô hình máy học đã được huấn luyện sẵn vào trong đề tài
- Arduino và các phần cứng (module) tích hợp thêm trên Arduino để mở rộng thêm chức năng cho nó
- Cách giao tiếp giữa các phần cứng với nhau Arduino - Raspberry Pi – Module GPS
Phạm vi nghiên cứu đề tài tập trung vào xây dựng chương trình nhận diện người lái thông qua ngôn ngữ lập trình Python và các công cụ đi kèm trong các thư viện Cụ thể nhóm sẽ dùng một module CAN để đọc tín hiệu mạng CAN trên xe thông tin này sẽ làm tín hiệu bật tắt cho chương trình nhận diện chạy trên Raspberry Pi Bên cạnh đó nhóm nghiên cứu thêm về module GPS để chỉ dẫn tài xế đến điểm nghỉ ngơi khi phát hiện mệt mỏi.
Phương pháp tiếp cận và nghiên cứu
Phương pháp tiếp cận Để đạt được các mục đích nghiên cứu được đặt ra, phương pháp tiếp cận của nhóm sẽ gồm:
- Nghiên cứu các kiến thức về ngôn ngữ lập trình Python và các công cụ đi kèm theo trong thư viện Python
- Kiến thức thiết lập và sử dụng về các vi điều khiển khác nhau như Arduino, Raspberry Pi
- Áp dụng các kiến thức về mạng CAN kết hợp với lập trình Arduino để lấy dữ liệu từ mạng CAN ô tô
- Các kiến thức về các chuẩn giao tiếp của các vi xử lí để giao tiếp các vi xử lí với nhau
Sử dụng các tài liệu, các công cụ các sẵn trên Internet để thu thập các kiến thức cần thiết cho đề tài
Tham khảo các dự án liên quan, các giáo trình để xây dựng đề tài.
Nội dung nghiên cứu
- Cơ sở lý thuyết về xử lí và nhận diện khuôn mặt
- Cơ sở lý thuyết về ngôn ngữ lập trình Python
- Cơ sở lý thuyết về vi xử lý Arduino và Raspberry Pi
- Cách giao tiếp giữa Arduino và Raspberry Pi thông qua giao tiếp UART
- Thử nghiệm nhiều lần và đánh giá độ chính xác kết quả mà chương trình đem lại.
Các nội dung chính trong đề tài
- Chương 2 CƠ SỞ LÝ THUYẾT VỀ XỬ LÍ ẢNH TRÊN NGÔN NGỮ LẬP TRÌNH PYTHON VÀ GIỚI THIỆU CÁC PHẦN CỨNG SỬ DỤNG
- Chương 3 THIẾT LẬP PHẦN CỨNG VÀ LÝ THUYẾT LẬP TRÌNH CÁC CHỨC NĂNG CỦA HỆ THỐNG GIÁM SÁT NGƯỜI LÁI
- Chương 4 KHẢO SÁT HỆ THỐNG GIÁM SÁT NGƯỜI LÁI VÀ ĐÁNH GIÁ KẾT QUẢ ĐẠT ĐƯỢC
- Chương 5 KẾT LUẬN VÀ KIẾN NGHỊ
CƠ SỞ LÝ THUYẾT VỀ XỬ LÍ ẢNH TRÊN NGÔN NGỮ LẬP TRÌNH
Cơ sở lý thuyết về xử lý ảnh
2.1.1 Giới thiệu về xử lí ảnh
Một hệ thống xử lí ảnh bắt đầu từ bước thu thập các thông tin như khung cảnh, đối tượng quang học ở thế giới bên ngoài từ camera Các tín hiệu này được biến đổi thành các tín hiệu số, điện tử để dễ dàng tính toán và hiệu chỉnh
Quá trình xử lí ảnh chính là sử dụng các kĩ thuật, thuật toán để thay đổi các thông tin, tín hiệu số mà máy ảnh thu thập được để từ đó cải thiện hoặc trích xuất các thông tin cần thiết, biến các dữ liệu, các thông tin hình ảnh đã được hiệu chỉnh có ích cho người dùng
Trên thực tế xử lí ảnh xuất hiện rất phổ biến ở ngày nay, một số rất phổ biến như làm sáng, làm tối, làm mờ hình ảnh, xoay hoặc cắt hình ảnh Một số cần các thuật toán và kĩ thuật cao cấp hơn từ lĩnh vực xử lí tín hiệu số, thị giác máy tính, và trí tuệ nhân tạo để có thể nhận diện khuôn mặt, nhận diện đường viền ảnh, hay phát hiện vật thể và rất nhiều các công việc khác
Hiện nay ngoài ứng dụng trong các ứng dụng chỉnh sửa hình ảnh như photoshop, chỉnh sửa video, các ứng dụng của xử lí ảnh đang dần lan rộng ra nhiều lĩnh vực khác nhau như an ninh, y học, an ninh, giải trí, tự động hoá Đặc biệt, trong thời đại số hóa ngày nay, xử lí ảnh đóng vai trò quan trọng trong việc phân tích dữ liệu hình ảnh, hỗ trợ quyết định và tạo ra giá trị cho các ứng dụng và dịch vụ mới
Hình 2.1 Lý thuyết xử lý ảnh
2.1.2 Các công cụ và kĩ thuật xử lí ảnh
Nhờ quá trình mã hoá mà các đối tượng, cảnh vật, sự kiện được ghi lại trong máy ảnh chuyển đổi từ dữ ánh sáng sang dữ liệu số như ma trận Việc mã hoá dữ liệu thành ma trận không chỉ giúp cho việc lưu trữ, nén dữ liệu trở nên dễ dàng hơn mà còn có thể biến đổi và tính toán được các ma trận ảnh này theo ý muốn, vì vậy nên các công cụ, kĩ thuật xử lí ảnh cũng ra đời
Các công cụ và kĩ thuật dùng cho xử lí ảnh đều làm việc với các pixel hay gọi là các điểm ảnh, bằng cách áp dụng các phép biến đổi xử lí với các thông số có trong điểm ảnh có thể tạo ra các hiệu ứng, kĩ thuật khác nhau Để có thể điều chỉnh, chỉnh sửa hình ảnh theo mong muốn ta có thể áp dụng các kỹ thuật và phép biến đổi, các công thức, hàm toán học như co giãn các điểm ảnh, áp dụng hàm Gaussian để làm giảm nhiễu, làm mịn ảnh, phát hiện các biên, cạnh trong ảnh bằng cách làm việc với 2 ma trận ảnh Để đơn giản và dễ dàng cho việc xử lí sửa đổi ảnh, đồng thời mở rộng đối tường người dùng mà ngày nay các thuật toán, kĩ thuật được tích hợp vào trong nhiều ứng dụng có sẵn Ngoài việc áp dụng vào các ứng dụng chỉnh sửa, xử lí hình ảnh, video như là photoshop, cap cut, illustrator và nhiêu công cụ khác Các công cụ và kĩ thuật cho việc xử lí điều chỉnh ảnh này cũng được đưa vào trong lập trình để phát triển thêm các ứng dụng hữu ích cho thị giác máy tính và máy học
2.1.3 Ứng dụng của xử lí ảnh
Nhờ việc phát triển của các chip, vi xử lý giúp ích cho việc tính toán, làm việc với các ma trận ảnh lớn trở nên nhanh chóng và chính xác mà ứng dụng của xử lí ảnh đã có trong nhiều lĩnh vực khác nhau Ở trong y tế xử lí ảnh dùng để phát hiện và chuẩn đoán các dấu hiệu của bệnh lý xuất hiện trên các ảnh y khoa như MRI, X-quang Các kĩ thuật phát hiện các khối u, theo
7 dõi bệnh lý đều dựa trên các công cụ và kĩ thuật xử lí ảnh Từ đó giúp đỡ cho các y bác sĩ trong việc chuẩn đoán trở nên chính xác hơn
Trong lĩnh vực đồ hoạ, các kĩ thuật xử lí ảnh được ứng dụng để tạo ra các kĩ xảo, đồ hoạ đẹp mắt phục vụ cho nhu cầu giải trí của con người Ở lĩnh vực ô tô xử lí ảnh được sử dụng để nhận diện vật thể, người đi bộ, biển báo giao thông, nhận diện hành vi người lái và điều chỉnh hành vi lái xe tự động Điều này giúp cải thiện an toàn và hiệu suất của các hệ thống ô tô tự lái và xe thông minh.
Ngôn ngữ lập trình Python
2.2.1 Giới thiệu ngôn ngữ lập trình Python
Python là một ngôn ngữ lập trình thông dịch và bậc cao, được phát triển bởi Guido van Rossum vào những năm 1980 và ra mắt lần đầu vào năm 1991 Nó nổi tiếng với cú pháp rõ ràng, ngắn gọn, dễ đọc và dễ hiểu, giúp cho việc lập trình trở nên nhanh chóng và dễ dàng hơn Python được phát triển như là một dự án mở và miễn phí cho tất cả người dùng, nên thu hút rất nhiều người sử dụng và học ngôn ngữ này Ứng dụng của chủ yếu tập trung các mảng chính như là khoa học dữ liệu, máy học (machine learning), xử lí ảnh và thị giác máy tính và phát triển trò chơi Hiện nay, xu hướng các công nghệ trí tuệ nhân tạo đang ngày càng được tập trung nghiên cứu và phát triển nên ngôn ngữ lập trình Python ngày càng thu hút được nhiều người học và sử dụng
Tính từ thời điểm phiên bản đầu tiên của Python 1.0 ra mắt vào năm 1994 cho đến hiện nay thì ngôn ngữ lập trình Python đã ra đến phiên bản mới nhất là 3.12.2 Đi kèm với đó là khối lượng các thư viện đi kèm theo đã lên đến hàng ngàn MB dữ liệu, cung cấp các công cụ và chức năng hữu ích cho các lập trình viên Các thư viện cung cấp các chức năng giúp tiết kiệm thời gian và công sức thay vì viết lại từ đầu một đoạn mã nào đó Đây cũng là điểm thu hút mạnh mẽ của Python đến với các lập trình viên mới vào nghề
2.2.2 Thư viện cần thiết để xử lí ảnh bằng ngôn ngữ lập trình Python
Open cv hay open source computer vision library là một thư viện mã nguồn mở trong lĩnh vực xử lý hình ảnh và thị giác máy tính Được phát triển ban đầu bởi Intel sau đó thay đổi trở thành một dự án mã nguồn mở miễn phí cho tất cả các lập trình viên
Thư viện Open cv xuất hiện đầu tiên vào năm 1999 được phát triển bởi Intel, ban đầu thư viện này chỉ hỗ trợ các chức năng cơ bản trong việc xử lí ảnh và thị giác máy tính
8 Vài năm sau đó thư viẹn Open cv bắt đầu công khai trở thành một dự án mã nguồn mở cho phép người dùng tự do sử dụng, sửa đổi phân phối mà không phải lo về các vấn đề bản quyền Năm 2006 thư viện Open cv bắt đầu hỗ trợ ngôn ngữ lập trình Python và mở ra bước đầu cho sự phổ biến của thư viện này đến các lập trình viên nghiên cứu, học tập trong lĩnh vực xử lí ảnh và thị giác máy tính Từ đó đến nay thư viện Open cv liên tục được pát triển và trở thành một trong các thư viện phổ biến nhất hiện nay
Thư viện Open cv cung cấp các biển đổi, các thuật toán đơn giản trong việc xử lí ảnh như là xoay ảnh, đổi màu, hiển thị ảnh, thay đổi kích thước ảnh, lấy hoặc biển đổi các giá trị màu sắc ở các điểm ảnh cho đến các ứng dụng nổi bật như là xử lý các hình ảnh, video trong thời gian thực từ đó trích xuất các đặc trưng để phục vụ cho các dự án như nhận diện khuôn mặt, nhận diện vật thể, nhận diện cấu trúc tay hay các dạng kí tự trong văn bản Từ các dự án này đem lại các lợi ích cho con người như : nhận diện gương mặt hoặc con người giúp ích cho lĩnh vực an ninh hoặc là nguồn dữ liệu quan trọng cho các dự án máy học liên quan đến khuôn mặt của con người, nhận diện các cấu trúc tay hay bộ phận của cơ thể con người có thể phát triển thành các dự án điều khiển đồ vật bằng các cử chỉ tay và nhiều lợi ích lớn khác
Có thể nói là Open cv là một trong các thư viện không thể thiếu nếu như đang có các dự án liên quan đến xử lý ảnh hay thị giác máy tính, điểm mạnh của thư viện này là cung cấp các công cụ tính toán đơn giản nhưng cực kì cần thiết cho việc xử lí, là bước đệm cho việc tiền xử lí ảnh và kết hợp với các thư viện khác
Thư viện Dlib là một thư viện mã nguồn mở và cũng được sử dụng phổ biến trong lĩnh vực thị giác máy tính và học máy Dlib được tạo ra bởi Davis E King và được phát triển chủ yếu bằng ngôn ngữ lập trình C++ với sự hỗ trợ của Python Dlib được thiết kế để cung cấp một loạt các công cụ mạnh mẽ nhưng chủ yếu tập trung vào vấn đề về nhận diện khuôn mặt, nhận dạng vật thể và nhiều ứng dụng khác trong thị giác máy tính
Phiên bản ban đầu của thư viện Dlib được ra mắt vào năm 2002 với mục đích giống như thư viện Open cv là cung cấp các công cụ tính toán cho người dùng cho vấn đề xử lí ảnh và thị giác máy tính Các phiên bản liên tục được phát triển và cải tiến qua từng năm nhưng dấu ấn nằm ở năm 2018 đánh dấu sự vượt bật hơn so với các thư viện khác về hiệu suất và tính năng Phiên bản mới nhất hiện nay là Dlib 19.24.4
9 Cũng như thư viện Open cv thư viện Dlib cung cấp các công cụ phân tích và xử lý ảnh nhưng điểm nổi bật của thư viện DLib so với thư viện Open cv là khả năng nhận diện các khuôn mặt, vật thể hay xử lí trong thời gian thực vượt trội hoàn toàn so với thư viện Open cv
Các đặc tính và công cụ mạnh mẽ về mảng nhận diện mà thư viện này cung cấp sẽ đáp ứng đủ các nhu cầu mà nhóm nghiên cứu đề ra cho đồ án này
MediaPipe là một thư viện mã nguồn mở được phát triển bởi Google Research, giúp các lập trình viên dễ dàng xây dựng các ứng dụng thị giác máy tính và xử lý dữ liệu đa phương tiện Đây là một thư viện mạnh mẽ cho việc xử lý dữ liệu hình ảnh và video, cung cấp các công cụ tiện ích và các mô hình machine learning đã được huấn luyện sẵn để thực hiện các nhiệm vụ phức tạp
Thư viện mediapipe phiên bản đầu tiên 0.1 lần đầu được ra mắt và giới thiệu vào tháng 6 năm 2019 bởi Google, tiếp đến sau đó các phiên bản sau liên tục cải thiện hiệu suất và mở rộng các tính năng trong đó gồm tối ưu hoá cho các thiết bị điện thoại thông minh, tăng thêm độ chính xác của các mô hình machine learning Ứng dụng của thư viện này chủ yếu tập trung vào các lĩnh vực thực tế ảo, các ứng dụng, dự án liên quan đến thị giác máy tính trên các thiết bị điện thoại thông minh Do được cung cấp các tính năng tiện tích và hiệu suất ổn định, trong đó quan trọng nhất là mô hình máy học đã được huấn luyện sẵn giúp cho người lập trình tiết kiệm thêm thời gian và công sứ nên việc sử dụng thư viện này có thể giải quyết các vấn đề về thời gian mà dự án của nhóm nghiên cứu gặp phải
2.2.3 Các môi trường phát triển tích hợp cho Python
Một số môi trường phát triển thích hợp hay còn gọi là IDE (Integrated Development Environment) là một phần mềm cho phép người lập trình có thể viết hoặc phát triển các dự án trên đó Giải thích đơn giản là Python là một ngôn ngữ lập trình cũng như các ngôn ngữ lập trình khác như ngôn ngữ lập trình C, C++ hay C# Các ngôn ngữ này đều có một số chức năng giống nhau nhưng khác nhau giữa các câu lệnh ở mỗi ngôn ngữ Ví dụ ở Python lệnh in là print, trong khi đó trong ngôn ngữ lập trình C lệnh in là printf, trong C++ là cout Tuy nhiên, mỗi ngôn ngữ lập trình có một điểm mạnh riêng cho từng lĩnh vực, việc lựa
10 chọn ngôn ngữ lập trình cho phù hợp với nhu cầu chức năng cho từng dự án nghiên cứu là điều cần thiết
Vì vậy mà khi lập trình trên máy tính ta cần một môi trường để có thể hiểu được là người lập trình đang sử dụng ngôn ngữ nào mà biên dịch ngôn ngữ và triển khai các chức năng của ngôn ngữ đó Ngoài ra các ứng dụng IDE còn cung cấp thêm nhiều chức năng khác như sửa lỗi, gỡ rối, kiểm tra lỗi và những tính năng hổ trợ người dùng khác
Giới thiệu về phần cứng sử dụng
Hệ thống giám sát người lái là một hệ thống mà có sự kết hợp của nhiều yếu tố, có thể kể đến như tín hiệu tốc độ xe, tín hiệu định vị trí hiện tại của xe Để hổ trợ cho việc kết nối và thực hiện các chức năng của các bộ phận trên, nhóm nghiên cứu sử dụng vi điều khiển Arduino, máy tính nhúng Raspberry Còn về chức năng giáp sát người lái, nhóm thực hiện thuật toán dựa trên các thư viện có sẵn của ngôn ngữ lập trình Python Nhóm sử dụng một máy tính nhúng Raspberry với khả năng thực hiện xây dựng giao diện và xử lí ảnh bằng Python trên hệ điều hành Linux Ngoài ra, để kết nối các thành phần trên lại với nhau, còn phải sử dụng một vài phần cứng khác để hổ trợ
2.3.1 Giới thiệu về vi điều khiển Arduino
Arduino là một dòng vi điều khiển được sử dụng rộng rãi trong học tập dành cho sinh viên, học sinh với giá thành phù hợp Arduino hiện tại có rất nhiều dòng, nhưng sử dụng phổ biến nhất là Arduino Uno và Arduino Mega Dòng Arduino mà nhóm nghiên cứu sử dụng cho đề tài chính là dòng Arduino Uno R3
Thông số của Arduino Uno R3:
Vi điều khiển ATmega328 họ 8 bit Điện áp hoạt động 5V DC
Tần số hoạt động 16Mhz
Bảng 2.1 Các thông số của Arduino Uno R3
Arduino Uno R3 là một trong những phiên bản phổ biến nhất của dòng Arduino, được sử dụng rộng rãi trong các dự án điện tử, robot và IoT Vi điều khiển ATmega328 8-
12 bit của nó cung cấp một nền tảng linh hoạt để thực hiện các ứng dụng từ đơn giản đến phức tạp.Một trong những ưu điểm của Arduino Uno là sự đơn giản trong việc sử dụng và học tập Với một cộng đồng lớn và nhiều tài liệu hướng dẫn, người dùng có thể dễ dàng tiếp cận và làm quen với việc lập trình và điều khiển vi điều khiển này
Bảng 2.2 Sơ đồ chân của Arduino Uno R3
Arduino IDE là môi trường phát triển tích hợp cho Arduino, cung cấp một giao diện dễ sử dụng để viết và tải các chương trình vào Arduino Nó đi kèm với các thư viện tiêu chuẩn và một loạt các ví dụ cho phép người dùng bắt đầu một cách nhanh chóng.Đối với các dự án có yêu cầu về khả năng xử lý và bộ nhớ lớn hơn, Arduino Mega có thể là một
13 lựa chọn phù hợp hơn với vi điều khiển ATmega2560 và các tính năng mở rộng.Tuy nhiên, với đa số các ứng dụng đơn giản và trung bình, Arduino Uno vẫn là một lựa chọn lý tưởng với sự kết hợp giữa hiệu suất, chi phí và sự dễ dàng sử dụng
Ngoài ra, Arduino Uno cũng được tích hợp với một loạt các chân kết nối và giao tiếp, bao gồm chân số, chân analog, cổng USB và các chân kết nối ngoại vi như UART, SPI và I2C Điều này tạo điều kiện thuận lợi cho việc kết nối và điều khiển các cảm biến, module và thiết bị ngoại vi khác Với việc sử dụng một ngôn ngữ lập trình dựa trên C/C++, người dùng có thể dễ dàng chuyển đổi giữa các dự án Arduino và các dự án khác sử dụng các vi điều khiển khác một cách linh hoạt Mặc dù Arduino Uno có hạn chế về khả năng xử lý và bộ nhớ so với các nền tảng vi điều khiển mạnh mẽ hơn, nhưng nó vẫn đủ để thực hiện nhiều ứng dụng thông thường và là một lựa chọn phổ biến cho giáo dục
Phần mềm biên dịch Arduino IDE
Arduino IDE (Integrated Development Environment) là một phần mềm mã nguồn mở được thiết kế đặc biệt cho việc lập trình và nạp chương trình cho các board Arduino Được phát triển bởi cộng đồng Arduino, Arduino IDE là một công cụ linh hoạt và dễ sử dụng cho cả người mới bắt đầu và các nhà phát triển có nhiều kinh nghiệm
Hình 2.3 Giao diện Arduino IDE
14 Arduino IDE cung cấp một giao diện người dùng đơn giản và trực quan, giúp người dùng dễ dàng lập trình và tải chương trình lên Arduino IDE này sử dụng một phiên bản tùy chỉnh của ngôn ngữ lập trình dựa trên Wiring, dễ hiểu và dễ học, cho phép người dùng tập trung vào phát triển ứng dụng mà không cần nhiều kiến thức kỹ thuật Hơn nữa, Arduino IDE đi kèm với một bộ thư viện tiêu chuẩn phong phú, bao gồm các hàm và ví dụ cơ bản để người dùng sử dụng ngay Ngoài ra, người dùng cũng có thể cài đặt các thư viện bên thứ ba thông qua trình quản lý thư viện tích hợp, giúp mở rộng tính năng cho Arduino
Hình 2.4 Thao tác chạy và nạp chương trình cho Arduino
Arduino IDE hỗ trợ trên nhiều hệ điều hành như Windows, macOS và Linux, giúp người dùng có thể lập trình trên mọi loại máy tính Nó còn tích hợp chức năng nạp chương trình trực tiếp lên board Arduino thông qua cổng USB, giúp người dùng dễ dàng thử nghiệm và triển khai các ứng dụng mới
Hình 2.5 Dây nạp board Arduino
Tóm lại Arduino IDE là một công cụ mạnh mẽ và tiện ích cho việc phát triển ứng dụng dựa trên Arduino Với giao diện đơn giản, ngôn ngữ lập trình dễ hiểu và hỗ trợ đa nền tảng, nó là lựa chọn lý tưởng cho cả người mới bắt đầu và các nhà phát triển kỳ cựu trong việc lập trình và thử nghiệm các dự án điện tử của mình Tính linh hoạt và tích hợp sẵn các thư viện tiêu chuẩn cũng như thư viện bên thứ ba làm cho quá trình phát triển ứng dụng trở nên dễ dàng và hiệu quả hơn Nhờ vào Arduino IDE, việc tạo ra các thiết bị điện tử thông minh và sáng tạo đã trở nên tiếp cận hơn đối với mọi người
Raspberry Pi là một thiết bị điện tử có công dụng như là một máy tính cỡ nhỏ, có kích cỡ như một chiếc điện thoại thông minh và sử dụng hệ điều hành Linux Trên một máy tính nhúng Raspberry Pi được tích hợp mọi thứ cần thiết để người dùng có thể sử dụng nó như là một chiếc máy tính như: bộ xử lí SoC Broadcom BCM2835 (là chip mạnh mẽ xử lí thường thấy ở trong điện thoại thông minh) bao gồm CPU, GPU, RAM, bộ xử lí âm thanh, trên bo mạch còn có các khe cắm microSD, Wi-Fi, Bluetooth và cổng USB
Tuy nhiên Raspberry Pi không thể thay thế hoàn toàn hệ thống máy tính bàn hay máy tính xách tay, Raspberry Pi không sử dụng hệ điều hành Window mà sử dụng hệ điều hành Linux vì chip xử lí được thiết kế dựa trên cấu trúc ARM nên không hỗ trợ hệ mã x84, x64 (hệ mã trên Window) Tuy vậy, các tiện ích của Raspberry Pi như lướt web, lập trình,
16 đặc biệt làm các dự án rất được người dùng nhất là các học sinh, sinh viên ưa chuộng, do giá thành rẻ, phù hợp cho các dự án, mã nguồn mở thúc đẩy sự phát triển, sáng tạo và trải nghiệm lập trình cho cộng đồng
Raspberry Pi được phân loại thành các phiên bản khác nhau dựa trên cấu hình phần cứng, tính năng và hiệu suất
Raspberry Pi 1 Model A/B/A+/B+: Đây là các phiên bản ban đầu của Raspberry Pi, có cấu hình và tính năng cơ bản Chúng thường được sử dụng cho các dự án nhỏ và giáo dục
THIẾT LẬP PHẦN CỨNG VÀ LÝ THUYẾT LẬP TRÌNH CÁC CHỨC NĂNG CỦA HỆ THỐNG GIÁM SÁT NGƯỜI LÁI
Thiết lập hệ điều hành Linux cho Raspberry Pi 4
Các bước đầu để có thể tiến hành lập trình và sử dụng vi xử lí Raspberry Pi 4 là thiết lập hệ điều hành cho Raspberry Pi 4 model B Hệ điều hành được thiết lập ở đây sẽ là Raspberry Pi OS hay Raspbian Đầu tiên truy cập vào trang web https://www.raspberrypi.com/software/ bằng máy tính bàn hay laptop, để tải ứng dụng Raspberry Pi Imager, tuỳ theo hệ điều hành mà máy tính đang sử dụng như Window, macOS cho MacBook hay Linux để chọn các tuỳ chọn cài đặt Sau khi cài đặt xong và chạy phần mềm máy tính sẽ hiện thị giao diện như sau
Hình 3.1 Giao diện phần mềm Raspberry Pi Imager
28 Ở mục Raspberry Pi Device chọn thiết bị Raspberry Pi đang được sử dụng Ở đây nhóm nghiên cứu sử dụng Raspberry Pi 4 model B Nếu không biết mình đang sử dụng thiết bị Raspberry Pi nào thì có thể có thể quan sát trực tiếp trên thiết bị, hoặc đằng sau hộp đựng Các thông số kỹ thuật của Raspberry Pi đang được sử dụng sẽ được thể hiện rất rõ đằng sau hộp
Hình 3.2 Thông số phía sau hộp đựng Raspberry Pi 4 Để cài đặt thiết bị mong muốn, lựa chọn thiết bị phù hợp sau đó nhấn đúp chuột
Hình 3.3 Giao diện chọn vi xử lý cần cài trên phần mềm Raspberry Pi Imager
29 Tiếp đến sau khi chọn xong thiết bị mà mình muốn cài, đến mục Operating System, ở đây đầu tiên chọn hệ điều hành phù hợp nhất cho Raspberry Pi của mình tuỳ theo thông số kỹ thuật được thể hiện Nhóm nghiên cứu chọn hệ điều hành 64bit theo như thông số kĩ thuật đã được viết ở đằng sau hộp
Nếu muốn cũng có thể cài hệ điều hành 32bit mặc dù thông số kĩ thuật không thể hiện Tuy nhiên việc cài này không được khuyến khích vì khi chạy hoặc vận hành có thể xảy ra các trường hợp lỗi hoặc xung đột, nên tốt nhất nên cài đúng với thông số đã được đưa ra
Hình 3.4 Giao diện chọn hệ điều hành cần cài trên phần mềm Raspberry Pi Imager
Lúc này lấy thẻ nhớ và đồ đọc thẻ nhớ (nếu cần) kết nối với máy tính đang sử dụng để bắt đầu quá trình cài đặt hệ điều hành vào trong thẻ nhớ SD Nhưng trước đó có thể thiết lập một số chức năng mong muốn cho Raspberry Pi của mình
Một số lưu ý khi sử dụng thẻ nhớ để cài đặt hệ điều hành cho Raspberry Pi, nhóm nghiên cứu khuyến khích chỉ sử dụng thẻ nhớ cho 1 mục đích duy nhất là làm bộ nhớ và hệ điều hành cho Raspberry Pi
Nếu trên thẻ nhớ đã có sẵn một hệ điều hành ví dụ 32bit nhưng muốn cài lại hệ điều hành 64bit thì khi cài ứng dụng sẽ hiện ra thông báo xoá hết tất cả dữ liệu ở hệ điều hành 32bit
Hình 3.5 Thẻ nhớ SD hiện có trên máy tính
Nếu sử dụng một thẻ nhớ khác ngoài thẻ nhớ được sử dụng để lưu trữ, mà trong thẻ nhớ đó có các dữ liệu khác thì ứng dụng sẽ xoá tất cả các dữ liệu đó để cài hệ điều hành cho Raspberry Pi
Hình 3.6 Các tuỳ chỉnh trước khi cài hệ điều hành
31 Các cài đặt liên quan đến tên muốn đặt cho con Raspberry Pi của mình, hay mạng Wi-Fi mà muốn Raspberry Pi kết nối, đặc biệt lưu ý là phần mật khẩu đặt cho con Raspberry của mình vì nó dùng để xác thực cho việc cập nhật, hay kết nối với các ứng dụng bên ngoài Sau khi chọn và lưu các cài đặt mong muốn hoàn thành, nhấn save và bắt đầu cài hệ điều hành vào trong thẻ nhớ
Hình 3.7 Thông báo hoàn tất việc cài đặt
Khi việc cài đặt hoàn tất nhấn continue sau đó rút thẻ nhớ ra và kết nối thẻ nhớ với con Raspberry Pi của mình, khe thẻ nhớ nằm ở mặt sau của con Raspberry Pi Sau đó cấp nguồn cho Raspberry Pi, Raspberry Pi sẽ tự động cài đặt hệ điều hành vào trong nó Nếu có màn hình nên kết nối màn hình với Raspberry Pi thông qua cổng HDMI để theo dõi việc cài đặt hệ điều hành trên nó có thành công hay gặp trục trặc gì không.
Thiết lập chức năng VNC cho Raspberry Pi
Chức năng VNC là một hệ thống chia sẻ màn hình được hỗ trợ trên Raspberry Pi, chức năng của nó là chia sẻ màn hình để điều khiển các thiết bị từ xa thông qua mạng Wi-
Fi Cho phép người dùng chỉ cần sử dụng một bàn phím nhưng có thể điều khiển nhiều máy tính khác nhau
Chức năng này đặc biệt hữu dụng cho Raspberry Pi, vì không cần phải két nối chuột máy tính hoặc bàn phím trực tiếp vào Raspberry Pi gây ra việc rối dây hoặc dễ xảy ra chạm
32 mạch giữa các thiết bị, thay vào đó có thể điều khiển trực giúp giảm dây dẫn và tăng độ an toàn Để thiết lập VNC cho Raspberry Pi đầu tiên vào phần terminal nhập dòng lệnh sudo raspi-config , dòng lệnh này sẽ mở ra một cửa số để tuỳ chỉnh các công cụ muốn sử dụng
Hình 3.8 Cửa sổ terminal trên Raspberry Pi 4
Nhấn Enter và một cửa sổ mới sẽ mở ra
Hình 3.9 Cửa sổ tuỳ chỉnh công cụ trên Raspberry Pi 4
33 Sau đó di chuyển đến mục Performance Options, khi vào trong mục Performance Options tiếp tục đi đến mục VNC sau đó kích hoạt (Enable) chức năng VNC cho Raspberry
Hình 3.10 Bên trong thư mục Performance Options
Tiếp theo là tải xuống phần mềm kết nối giữa Raspberry Pi và máy tính Truy cập trang https://www.realvnc.com/en/connect/download/viewer/ để tải về phần mềm VNC
Sau khi tải và giải nén ứng dụng RealVNC để sử dụng ứng dụng này để kết nối giữa máy tính và Raspberry Pi, trước hết ta phải biết được địa chỉ IP của mạng Wi-Fi mà Raspberry Pi đang sử dụng, nhập lệnh ifconfig vào terminal trên Raspberry Pi
Hình 3.11 Nhập lệnh để kiểm tra thông tin các kết nối
Nhấn Enter và trên terminal sẽ hiện ra các thông tin trong đó có thông tin về địa chỉ
IP mà Raspberry Pi đang kết nối
Hình 3.12 Thông tin về các kết nối hiện có
Có thể thấy ở phần wlan0, dòng thứ 2 inet 192.168.1.181 chính là địa chỉ ip mạng mà Raspberry Pi đang kết nối, sử dụng địa chỉ này để nhập vào ứng dụng RealVNC để trực tiếp điều khiển Raspberry Pi thông qua mạng Wi-Fi Nếu không sử dụng mạng Wi-Fi mà
35 cắm trực tiếp cáp mạng vào trên Raspberry Pi thì ở mục eth0 dòng thứ 2 ether sẽ xuất hiện địa chỉ IP mạng, dùng địa chỉ này nhập vào ứng dụng RealVNC để kết nối
Hình 3.13 Màn hình chính ứng dụng RealVNC
Sau khi nhập địa chỉ ip mạng vào ứng dụng RealVNC, nhập thêm mật khẩu đã đặt cho Raspberry Pi của mình (nếu có) Khi kết nối hoàn tất thì sẽ có giao diện như Hình 3.14 dưới đây:
Hình 3.14 Giao diện khi kết nối hoàn tất 2 thiết bị Đây là giao diện khi đã kết nối thành công giữ máy tính và Raspberry Pi, bên trong cửa sổ là màn hình Raspberry Pi, cả hai đều điều khiền chung chuột máy tính và bàn phím Đều này sẽ tiện lợi hơn trong việc sử dụng và tránh các rủi ro đáng kể so với kết nối vật lý
Cài đặt môi trường Python và các thư viện Python cho Raspberry Pi 4
3.3.1 Cài đặt môi trường Python cho Raspberry Pi 4
Trước tiên khi cài đặt Python cần kiểm tra trước trên Raspberry Pi đã có cài đặt Python rồi hay chưa Kiểm tra điều này khá đơn giản, chỉ cần nhập dòng lệnh python3 -V trên terminal nếu trên Raspberry Pi đã có sẵn Python phiên bản Python sẽ được hiện ra, nếu không thì sẽ không có
Hình 3.15 Phiên bản Python hiện có
Như đã thấy khi cài đặt hệ điều hành cho Raspberry Pi thì Python cũng sẽ được cài đặt sẵn vào trong hệ thống của Raspberry Pi nhưng nhóm nghiên cứu sẽ không dùng phiên bản này mà sẽ dùng một phiên bản khác của Python nên sẽ cần cài đặt lại Lí do giải thích cho việc sử dụng phiên bản khác sẽ được giải thích ở nội dung cài đặt các thư viện cho Python
Nôi dụng tiếp theo sẽ liên quan đến cài đặt một phiên bản khác của Python trên một môi trường ảo khác chứ không cài đặt lại trên toàn hệ thống Lý do cho việc này là khi cố gắng cài đặt lại hoặc gỡ bỏ phiên bản Python đã cài sẵn vào trong hệ thống có thể xảy ra những lỗi, khó kiểm soát Ngược lại việc cài đặt một phiên bản khác vào trong một môi trường ảo thì lại dễ dàng kiểm soát và gỡ bỏ khi cần thiết
Kiểm tra cài đặt thư viện curl và cài đặt thư viện penv để quản lý các phiên bản Python khác nhau có trên hệ thống Đầu tiên mở terminal và chạy câu lệnh sudo apt-get install curl thư viện này là để kiểm tra các kết nối tới URL (các đường liên kết), thư viện này thường sẽ có sẵn trên hệ thống nhưng tốt nhất vẫn nên kiểm tra Sau khi cài xong tiếp tục chạy dòng lệnh curl https://pyenv.run | bash dòng lệnh này sẽ cài đặt thư viện penv
37 Sau khi cài đặt xong, cần ghi đường dẫn môi trường vào trong hệ thống, cũng như trên hệ điều hành Windows cần phải tạo các đường dẫn vào môi trường Python để hệ thống có thể nhận biết và biên dịch được ngôn ngữ lập trình Python
Gõ dòng lệnh sudo nano ~/.bashrc sau đó thêm các đường dẫn sau của môi trường ảo vào trong hệ thống export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init path)" eval "$(pyenv virtualenv-init -)"
Hình 3.16 Mở tệp cấu hình và thêm đường dẫn môi trường
Sau đó nhấn tổ hợp phím Ctrl + S và Ctrl + X để lưu và thoát Tiếp đến là cài đặt các thư viện cần thiết để xây dựng và phát triển các ứng dụng liên quan đến Python Nhập lệnh sau để cài đặt gói thư viện: sudo apt-get install yes libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libgdbm-dev lzma lzma-dev tcl-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev wget make openssl
Các gói phát triển trên được sử dụng để phát triển và biên dịch các ứng dụng Python và các ứng dụng hệ thống liên quan Cài đặt chúng, mới có thể phát triển và xây dựng các ứng dụng Python một cách hiệu quả trên hệ thống
38 Sau khi cài đặt xong các gói thư viện trên thì giờ hệ thống đã có đủ các tài nguyên cần thiết để cài đặt Python Việc cài đặt Python sau đây là cài đặt trên môi trường ảo nên câu lệnh sẽ là: pyenv install [phiên bản Python muốn cài đặt]
Nếu không biết các phiên bản Python có thể cài đặt thì có thể nhập lệnh Pyenv install
–list để hiển thị ra các phiên bản Python Ở đây nhóm nghiên cứu sẽ cài đặt Python phiên bản 3.9.18 nên câu lệnh sẽ là pyenv install 3.9.18 , sau đó chỉ cần đợi việc cài đặt hoàn thành Tiếp đến cần tạo ra một thư mục chứa phiên bản Python vừa mới cài đặt Hiểu đơn giản là khi chưa kích hoạt Python trên môi trường ảo hệ thống hiểu phiên bản Python đang dùng là phiên bản có sẵn trên hệ thống ví dụ của nhóm nghiên cứu đó là phiên bản 3.11.2 nhưng khi kích hoạt môi trường ảo trong thư mục thì hệ thống sẽ hiểu là đang sử dụng phiên bản 3.9.18 Để làm điều này cần tạo một thư mục, sau đó chỉ định cho thư mục đó chứa môi trường Python ảo được tạo ra mkdir project câu lệnh này sẽ tạo ra một thư mục tên là project cd project Câu lệnh này sẽ truy cập vào thư mục project đó pyenv local 3.9.18 Câu lệnh này sẽ chỉ định cho phiên bản Python 3.9.18 mà nhóm vừa cài đặt sẽ được sử dụng trong môi trường ảo, tuy nhiên câu lệnh này chưa tạo ra môi trường ảo nào hết Để tạo ra một môi trường ảo cho Python cần chạy 2 câu lệnh sau python3 -m pip install virtualenv và python3 -m virtualenv env 2 Câu lệnh đầu tiên sẽ tạo ra một môi trường ảo trong thư mục hiện tại, nếu ở trên đã gõ dòng lênh cd project tức là thư mục hiện tại là thư mục project và môi trường ảo cũng sẽ nằm trong thư mục project này Câu lệnh thứ 2 là để đặt tên “env” cho môi trường ảo
Vậy là việc cài đặt phiên bản Python cần thiết đã hoàn thành, để kiểm tra việc cài đặt có đúng không có thể làm như sau Đầu tiên kiểm tra phiên bản lại Python đã có sẵn trên hệ thống
Tiếp theo kiểm tra phiên bản đã cài đặt trong thư mục bằng cách truy cập vào thư mục bằng lệnh cd project sau đó kích hoạt môi trường ảo trong thư mục bằng lệnh source env/bin/activate sau đó kiểm tra lại phiên bản Python một lần nữa
39 Để biết việc kích hoạt môi trường ảo Python có thành công không có thể dễ dàng nhận ra khi kích hoạt thành công môi trường ảo đằng sau tên người dùng sẽ hiển thị thêm (env)
Hình 3.17 Phiên bản Python mới sau khi đã kích hoạt
3.3.2 Cài đặt các thư viện cần thiết
Cài đặt thư viện Open cv Để cài đặt thư viện Open cv trước tiên phải chắc chắn là truy cập vào trong thư mục project và kích hoạt môi trường ảo với dòng lệnh source env/bin/activate khi đã kích hoạt môi trường ảo xong thì hãy chạy dòng lệnh sau để cài đặt tất cả các gói thư viện cần thiết để hỗ trợ cài đặt cho thư viện Open cv
Sudo apt install libxrender1 libvpx5 libxi6 libxcb-render0 libtwolame0 libwebpmux3 libvorbisenc2 libgraphite2-3 libva-x11-2 libwayland-egl1 libgme0 libmp3lame0 libcairo-gobject2 libspeex1 libavcodec58 libswresample3 libwebp6 libcroco3 libdrm2 libxvidcore4 libtheora0 libxfixes3 libvdpau1 libwayland-client0 libjbig0 libcodec2-0.8.1 libharfbuzz0b libatlas3-base libgdk-pixbuf2.0-0 libssh-gcrypt-4 libmpg123-0 libaom0 libogg0 libpangocairo-1.0-0 libxcb-shm0 libbluray2 libopenmpt0 libpangoft2-1.0-0 libatspi2.0-0 libwayland-cursor0 libxrandr2 libxinerama1 libxcomposite1 libgtk-3-0 libxkbcommon0 libva-drm2 libgsm1 librsvg2-2 libopenjp2-7 libxdamage1 libx265-165 libpixman-1-0 libswscale5 libavutil56 libcairo2 libx264-155 libatk1.0-0 libpango-1.0-0 libthai0 libfontconfig1 libxcursor1 libavformat58 libopus0
40 libdatrie1 libvorbis0a libsoxr0 libva2 libatk-bridge2.0-0 libzvbi0 libshine3 libvorbisfile3 libepoxy0 libchromaprint1 libwavpack1 libtiff5 libgfortran5 libsnappy1v5
Giới thiệu hệ thống giám sát người lái
3.4.1 Sơ đồ khối và ý tưởng Ý tưởng chung cho đồ án này là dùng một vi xử lý Arduino kết hợp với một mạch mở rộng CAN BUS để có thể đọc được dữ liệu tốc độ xe từ mạng CAN có trên xe Sau khi xử lí dữ liệu trên Arduino sẽ truyền tín hiệu qua Raspberry Pi thông qua các chân GPIO trên Raspberry, Raspberry Pi sẽ nhận biết có tín hiệu hay không, để chạy chương trình nhận diện tài xế, điều này có nghĩa việc giám sát người lái chỉ được sử dụng khi xe di chuyển Đồng thời cùng với đó lấy tín hiệu GPS sau đó truyền dữ liệu kinh độ và hoành độ từ module SIM808 sang cho Arduino thông qua giao tiếp UART Arduino sẽ lọc ra dữ liệu về kinh độ hoành độ rồi truyền sang cho Raspberry Pi để Raspberry Pi có thể chạy chương trình chỉ đường đến chỗ nghỉ ngơi cho tài xế
Chương trình chỉ đường đến chỗ nghỉ ngơi này chỉ hoạt động khi chương trình nhận diện tài xế đã có thông tin về biểu hiện mệt mỏi của tài xế
Hình 3.23 Sơ đồ khối hệ thống giám sát người lái
Chức năng của từng linh kiện
Raspberry Pi 4 là vi xử lý trung tâm chịu trách nhiệm thu thập tất cả thông tin để xử lí và xuất các dữ liệu tính toán ra trên màn hình Raspberry Pi 4 sẽ đảm nhiệm nhiệm vụ quan trọng nhất là tính toán và xử lí hình ảnh tài xế nhận được từ camera, sau đó xuất ra màn hình các thông tin đã được tính toán
Các module, Camera và vi xử lý Arduino đóng vai trò phụ là thu thập thông tin và lọc cũng như là xử lí thông tin nhận được giúp giảm bớt gánh nặng xử lý cho Arduino Thông tin gồm 2 loại là điện áp và thông tin về kinh độ và hoành độ lấy được từ module SIM808
Thông tin điện áp được truyền dưới dạng là có điện áp khi tốc độ xe khác 0 nghĩa là xe đang chạy, chương trình nhận diện người lái sẽ được bật Khi xe không chạy tốc độ bằng 0 thì điện áp sẽ bằng 0 sẽ tắt chường trình nhận diện người lái Thông tin về tốc độ xe sẽ được lấy qua hệ thống CAN trên ô tô
46 Module SIM808 sẽ lấy được kinh độ và hoành độ thông qua cảm biến sau đó truyền
2 thông số này cho Arduino để Arduino lọc và xử lí sau đó mới truyền qua cho Raspberry
Pi 4 để bật chương trình chỉ đường đến chỗ nghỉ ngơi mỗi khi tài xế thấy mệt mỏi
Mạch giảm áp có tác dụng giảm tín hiệu điện áp xuất ra từ Arduino 5V xuống còn 3.3V do Raspberry chỉ có thể nhận được tín hiệu điện áp ở mức 3.3V
Mạch mở rộng CAN Bus Shield MCP2515 là mạch giúp cho Arduino có khả năng đọc được tín hiệu CAN từ hệ thống CAN trên ô tô Mặc dù Raspberry Pi 4 có khả năng đọc được tín hiệu CAN nhưng vì để giảm gánh nặng xử lí cho Raspberry Pi 4, Arduino được sử dụng để làm trung gian để tính toán nhằm giúp cho chương trình nhận diện tài xế được trơn tru nhất
3.4.2 Cơ sở để lập trình nhận diện tài xế
Nhận diện gương mặt, phân tích và tính toán các đặc điểm trên gương mặt
Bước 1 Nhận diện được gương mặt tài xế bằng một mô hình được cung cấp Để có thể có được các điểm đặc biệt trên khuôn mặt để từ đó có thể phân tích các điệu bộ hay dấu hiệu của khuôn mặt dựa trên các điểm đặc biệt này thì trước tiên ta phải nhận biết được ở đâu có khuôn mặt và các điểm đặt biệt này trên khuôn mặt
Nhờ vào một mô hình nhận diện gương mặt và 68 điểm mặt shape_predictor_68_face_landmarks.dat đã được qua huấn luyện, được cung cấp bởi các nhà phát triển của thư viện Dlib Mô hình được cung cấp dưới dạng tệp tin có dung lượng khoảng 95MB trong đó có chứa dữ liệu của hàng trăm khuôn mặt đã được mô hình này học và ghi nhớ
Tệp tin mô hình được cung cấp và cho phép tất cả mọi người sử dụng với các mục đích phi thương mại, như nghiên cứu, học tập, dự án cá nhân, vì vậy rất phù hợp với đề tài của đồ án nghiên cứu này
Hình 3.24 cho ta thấy các điểm đặc biệt trên gương mặt mà mô hình sẽ cung cấp cho người dùng khi sử dụng Nhờ có các điểm ảnh này mà việc phân tích các biểu cảm, các biểu hiện và dấu hiệu trên khuôn mặt như tươi cười, buồn, ngạc nhiên, mệt mỏi trở nên dễ dàng hơn Ngoài ra bằng cách theo dõi các điểm này ta có thể dự đoán được hướng và chuyển động của khuôn mặt
Hình 3.24 Mô hình 68 điểm mặt được cung cấp bởi thư viện Dlib
Bước 2 : Chọn lọc ra các điểm ảnh cần thiết để tính toán và phân tích các biểu hiện mệt mỏi dựa trên các điểm ảnh đó để máy tính tính toán Để đánh giá xem người tài xế có các biểu hiện mệt mỏi hay không ta sẽ thông qua
2 thông số được máy tính tính toán là EAR và MAR EAR gọi tắt của Eye Aspect Ratio (tỉ lệ của con mắt), khi người lái có các dấu hiệu mệt mỏi thì biểu hiện dễ nhận thấy nhất đó chính là mắt không mở to, lờ đờ Khi mắt có các dấu hiệu như vậy thì tỉ lệ của con mắt sẽ khác so với lúc bình thường không mệt mỏi
Hình 3.25 Chạy thử nghiệm kết quả tính toán thông số EAR
48 Ở mô hình nhận diện trên như đã giới thiệu có thể nhận thấy được 6 điểm ở xung quanh mỗi con mắt, mắt phải từ điểm 37 đến 42 và mắt trái từ điểm 43 đến 48 Vậy nhờ vào việc tính toán các điểm này mà ta có thể nhận biết được khi nào mắt đang đóng
Ví dụ như ở hình 3.25 EAR của mắt bên trái sẽ được tính toán như sau :
Tương tự với công thức trên tính toán giá trị EAR của mắt bên phải Sau đó tính trung bình cộng EAR ở cả hai mắt ta sẽ ước lượng được ngưỡng nhắm mở của mắt dao động trong khoảng 0.2 - 0.3 khi mắt mở và tiến về 0 khi mắt đóng, từ đó qua các thông số lấy được qua thực nghiệm nhóm nghiên cứu sẽ dự đoán được ngưỡng đóng mắt và ra tín hiệu
Vậy nếu đặc điểm ở mỗi người mắt to nhỏ khác nhau thì sao, có thể thông số đúng với nhóm nghiên cứu nhưng sai so với những người dùng khác Điều này sẽ được giải quyết bằng cách lưu trữ các dữ liệu EAR của mắt người tài xế liên tục khi người tài xế mở mắt sau đó dùng dữ liệu này để tính toán, từ đó tạo ra một dữ liệu động tuỳ thuộc vào người tài xế
Tính toán này tương tự đối với thông số MAR viết tắt của Mouth Aspect Ratio (tỉ lệ miệng) bằng cách tính toán các điểm 49, 51, 52, 53, 55, 57, 58, 59
Công thức tính tương tự như trên :
KHẢO SÁT HỆ THỐNG GIÁM SÁT NGƯỜI LÁI VÀ ĐÁNH GIÁ KẾT QUẢ ĐẠT ĐƯỢC
Khảo sát các chức năng thu thập tín hiệu
Trước tiên, nhóm khảo sát chức năng thu thập tín hiệu để đảm bảo được những tín hiệu này chính xác trước khi được truyền đến giao tiếp với Raspberry, để thực hiện điều này, nhóm kết nối máy tính cá nhân vào các bộ phận thu thập tín hiệu và sử dụng lệnh in dữ liệu ra cổng giao tiếp và kết hợp phần cứng để kiểm tra dữ liệu trả về Cụ thể:
Bộ thu thập tín hiệu tốc độ xe, khi kết nối đến mạng CAN của ô tô phải thông báo rằng việc kết nối và nhận dữ liệu sẵn sàng, sau đó bộ phận này phải hiển thị cho nhóm thấy dữ liệu được gửi đi, dữ liệu nhận vào từ hệ thống mạng CAN ô tô là những dữ liệu như thế nào thông qua máy tính cá nhân trên phần mềm Arduino IDE Mục tiêu của bộ thu thập tín
62 hiệu tốc độ xe là phải gửi được mức điện áp cao khi xe di chuyển và điện áp bằng không khi xe đứng yên
Bộ thu thập tín hiệu định vị, sau khi cấp nguồn và kết nối các chân TX RX để thực hiện giao tiếp UART với Arduino, dữ liệu phải được in ra máy màn hình về thông tin định vị Cũng tiếp tục sử dụng máy tính cá nhân và phần mềm Arduino IDE để thực hiện kiểm tra dữ liệu được gửi từ module SIM808 về Arduino
Khi thực hiện khảo sát, nhóm nghiên cứu sử dụng máy tính cá nhân để giao tiếp với vi điều khiển Việc kết nối với máy tính cá nhân là cần thiết khi khảo sát các chức năng thu thập tín hiệu tốc độ xe từ mạng CAN, thu thập tín hiệu định vị từ module SIM808 bởi vì khi dùng máy tính cá nhân giao tiếp với vi điều khiển, ta có thể dễ dàng theo dõi và quan sát dữ liệu được truyền đi hoặc nhận lại như thế nào bằng cách sử dùng các dòng lệnh code để in ra màn hình máy tính cá nhân
4.1.1 Khảo sát thu thập tín hiệu tốc độ xe qua hệ thống mạng CAN Để thực hiện khảo sát thu thập tín hiệu tốc độ xe qua hệ thống mạng CAN ô tô, ta kết nối phần cứng bảo gồm Arduino, CAN Bus Shield, dây nối dài DB9, dây chuyển đổi DB9 sang OBDII và máy tính cá nhân
Hình 4.2 Sơ đồ nối dây cho bộ thu thập tín hiệu tốc độ xe
63 Sau đó kết nối mạng CAN của ô tô qua cổng OBDII và kết nối Arduino với máy tính cá nhân bằng dây kết nối của Arduino Tiến hành nạp chương trình và quan sát dữ liệu qua cổng Serial Monitor trên Arduino IDE
Hình 4.3 Bộ thu thập tín hiệu tốc độ xe
*Ghi chú: Do xe dùng để khảo sát không thể chạy nên nhóm nghiên cứu thay đổi bằng khảo sát tốc độ động cơ thay vì tốc độ xe, điều này cũng tương tự, chỉ cần gửi tín hiệu yêu cầu và xác định tín hiệu trả về theo như thông tin Bảng 3.2 Để có thể nhìn thấy kết quả hướng tới mục tiêu đề ra là xuất tín hiệu mức cao hoặc thấp khi thay đổi tốc độ xe, đối với khảo sát nhóm thực hiện là tốc độ động cơ Ở hệ thống giám sát người lái, bộ phận thu thập tín hiệu tốc độ xe giao tiếp với Raspberry bằng tín
64 hiệu điện áp, cụ thể là chân số 6 của Arduino sẽ xuất tín hiệu điện áp, để thấy được điều này, nhóm sử dụng cách đơn giản là sử dụng một bóng led để kết nối đến chân số 6 của Arduino, nếu điện áp xuất hiện khi xe di chuyển, đối với khảo sát nhóm thực hiện là khi động cơ được khởi động, thì bóng led sẽ sáng lên, nếu xe đứng yên hay đối với khảo sát nhóm thực hiện là động cơ không hoạt động, bóng led sẽ tắt
Nhóm thực hiện kết nối cổng OBDII của xe để bắt đầu khảo sát và kiểm tra kết quả được in ra màn hình của máy tính cá nhân Lúc này nhóm kiểm tra dữ liệu và tín hiệu của bóng led có sáng và tắt như mục tiêu đã đề ra hay không Hình 4.4 là dữ liệu in ra để nhóm kiểm tra, trong đó có tốc độ động cơ được in ra ở biến s (tốc độ cầm chừng là khoảng 1000vòng/phút – Mitsubishi Pajero Sport) là phù hợp, dữ liệu mà hệ thống CAN trả về cũng giống với những lý thuyết đã phân tích trước đó
Hình 4.4 Dữ liệu in ra màn hình để quan sát dữ liệu từ hệ thống CAN
Dữ liệu in ra màn hình này chính là dữ liệu về tốc độ động cơ được gửi về từ hệ thống mạng CAN của xe ô tô khi mà nhóm thực hiện khảo sát Dựa vào khung truyền OBDII đã trình bày trước đó, dữ liệu nhận về từ ID định danh là 0x7E9 và 0x7E8, điều này hoàn toàn trùng khớp với lý thuyết về khung truyền OBDII mà nhóm đã trình bày ở phần lập trình thu thập tín hiệu tốc độ xe Tương tự như vậy nhìn vào chuỗi dữ liệu trả về ta có thể thấy rằng số 4 ở vị trí đầu tiên biểu thị rằng có 4 byte dữ liệu ở phía sau bao gồm chế độ đang được biểu thị là số 41, mã C tức 0xC tức là mã PIDs của tín hiệu tốc độ động cơ và hai thông số đằng sau được biểu thị là thông số A và B Từ hai thông số này nhóm thực
65 hiện lập trình tính toán tốc độ động cơ dựa vào công thức theo như Bảng 3.2 Lưu ý rằng thông số này được gửi về theo với định dạng mã theo cơ số 16 (Hex), khi tính toán để kiểm tra rằng việc lập trình in ra tín hiệu tốc độ động cơ có hợp lí phải được chuyển đổi hai thông số này về mã theo cơ số 10 (Dec) để tính toán
Hình 4.5 Điện áp xuất mức cao theo như yêu cầu của nhóm làm cho đèn led sáng
Như vậy, mục tiêu của việc thu thập tín hiệu từ hệ thống CAN trên ô tô đã được mục tiêu mà nhóm nghiên cứu đề ra trước đó, chính là xuất được mức điện áp ở mức cao ra chân D6 khi mà xe di chuyển, đối với hệ thống đang khảo sát là sau khi xe nổ máy Biểu thị cho việc điện áp mức cao đã được xuất ra chân D6 chính là làm cho đèn LED sáng
Sau khi khảo sát tín hiệu tốc độ xe hoặc tốc độ động cơ thành công, nhóm tiến hành ghi nhận lại quá trình khảo sát và cách thực hiện, để khi kết nối hệ thống giám sát người lái hoàn chỉnh, đây sẽ là cơ sở và điều kiện tiên quyết giúp cho hệ thống giám sát người lái hoạt động
4.1.2 Khảo sát thu thập tín hiệu định vị
Phần cứng để thực hiện cho việc khảo sát thu thập tín hiệu định vị bao gồm bộ thu thập tín hiệu định module SIM808 đi kèm ăng ten, Arduino, máy tính cá nhân
Hình 4.6 Sơ đồ nối dây bộ thu thập tín hiệu định vị
Sau đó kết nối Arduino và máy tính cá nhân, rồi thực hiện kết nối các chân theo
Hình 4.6 rồi thực hiện nạp chương trình cho Arduino, sau đó quan sát cổng Serial Monitor của Arduino IDE để xem dữ liệu in ra
Tương tự như khảo sát tín hiệu tốc độ xe, nhóm nghiên cứu sử dụng máy tính cá nhân để đọc dữ liệu mà hệ thống trả về, giao tiếp với nhau Tuy nhiên khác với tín hiệu tốc độ xe là sử dụng hệ thống mạng CAN để lấy dữ liệu thì cần phải lập trình in các dữ liệu và tạo các chuỗi dữ liệu để lưu chúng, do dữ liệu từ module SIM808 truyền đến Arduino bằng hình thức UART, nhóm nghiên cứu thực hiện quan sát dữ liệu được gửi về bằng cách xem qua cổng Serial Monitor với mức tốc độ truyền mà nhóm đã thiết lập cho module SIM808
Khảo sát hệ thống giám sát người lái hoàn chỉnh
Hệ thống giám sát người lái hoàn chỉnh cần sự kết hợp của hai hệ bộ thu tín thập tín hiệu và kết hợp với những phần cứng khác để thực hiện chức năng theo những gì mà nhóm đã đặt ra ở đề tài
Bởi vì khảo sát hệ thống giám sát người lái hoàn chỉnh, nhóm không sử dụng máy tính cá nhân để kiểm tra dữ liệu trả về, điều kiện quan trọng là các khảo sát trước phải được kiểm tra kĩ càng và dữ liệu, tín hiệu giao tiếp phải chính xác Nếu một trong các dữ liệu bị sai, hệ thống sẽ làm việc sai và do là đã kết hợp tạo nên hệ thống giám sát người lái hoàn chỉnh nên sẽ rất khó khăn trong việc điều chỉnh
4.2.1 Các bước để thực hiện khảo sát
Trước hết, một hệ thống giám sát người lái bao gồm các phần phải được nối dây như sau để bảo đảm nhiệm vụ và chức năng của từng bộ phận, phần cứng đều hoạt động chính xác
Hình 4.9 Sơ đồ nối dây hệ thống giám sát người lái hoàn chỉnh
Sau khi xác định được sơ đồ nối dây của hệ thống, nhóm tiến hành kết nối các phần cứng để thực hiện khảo sát Việc kết nối các phần cứng phải được thực hiện một cách cẩn thận nhằm đảm bảo rằng dữ liệu được thu thập một cách chính xác và gửi đến Raspberry để thực hiện các tác vụ như xử lý ảnh, đưa ra cảnh báo, hiển thị bản đồ ra màn hình
Hình 4.10 Hệ thống giám sát người lái sau khi kết hợp các phần cứng Để việc thực hiện chạy chương trình và kiểm tra kết quả của hệ thống, nhóm nghiên cứu tạo một mô hình nhỏ để kết nối các phần cứng lại với nhau và dễ dàng khảo sát ở trên xe hơn Sau khi đã hoàn thành mô hình, nhóm nghiên cứu thực hiện khảo sát trên xe các chức năng của hệ thống giám sát người lái Mục tiêu của hệ thống là cảnh báo cho người lái khi mất tập trung, khi người lái có hiện tượng chợp mắt lâu sẽ đề xuất địa điểm dừng chân và cảnh báo, theo dõi hướng nhìn, miệng
Hình 4.11 Mô hình hệ thống giám sát người lái Để có thể chạy được chương trình nhận diện đầu tiên phải kết nối dây OBDII với module CAN Bus Shield để lấy tín hiệu CAN từ xe, kết nối các giao tiếp giữa 3 module: module SIM808, Arduino Uno và Raspberry Pi 4 để truyền dữ liệu kinh độ, vĩ độ Bởi vì khi lập trình cho việc xử lý ảnh và thực hiện các chức năng của hệ thống giám sát người lái ở Raspberry, điều kiện để bắt đầu chương trình nhận diện tài xế, xử lý ảnh chính là xe phải di chuyển Khi xe đã di chuyển, Arduino và CAN Bus Shield có trách nhiệm phân tích tín hiệu tốc độ xe và gửi ra mức điện áp cao ở chân D6, chân D6 này sẽ nối đến Raspberry
73 qua chân 37, khi chân 37 nhận được tín hiệu điện áp mức cao, lúc này sẽ bắt đầu giám sát người lái
Hình 4.12 Kết nối đến cổng OBDII của xe
Sau khi hoàn tất các kết nối vật lý, bắt đầu cấp nguồn Raspberry Pi 4 và Arduino cùng với các module để bắt đầu quá trình xử lí ảnh và thực hiện các chức năng của hệ thống giám sát người lái Trong trường hợp nếu hệ thống được tích hợp lên xe, nguồn cung cấp cho Arduino và Raspberry có thể dùng trực tiếp trên bình, hoặc dùng nguồn cấp ngoài như pin dự phòng, với điều kiện đáp ứng mức điện áp và dòng phù hợp cho các phần cứng nói trên
Hình 4.13 Hướng đặt camera phù hợp
Khi chạy chương trình phải đảm bảo Camera đặt hướng đối diện người lái để thực hiện quá trình giám sát người lái Nếu góc Camera lệch so với mặt của người lái, chức năng nhận diện có thể sẽ không hoạt động được, khi đó hệ thống sẽ phát ra tiếng kêu và báo hiệu rằng chưa có khuôn mặt trong khuôn ảnh
4.2.2 Kết quả thực hiện khảo sát Đầu tiên, ngay khi vừa khởi động hệ thống giám sát người lái, do không nhận được tín hiệu tốc độ xe, đối với nhóm khảo sát sử dụng tốc độ động cơ thì màn hình sẽ báo cho chúng ta biết là xe đang không có di chuyển Điều này dựa vào lập trình Python của Raspberry, nếu nhận được tín hiệu điện áp mức cao thì sẽ xử lý ảnh, nhánh còn lại sẽ hiển thị ra màn hình dòng chữ như Hình 4.14
Hình 4.14 Màn hình hiển thị khi xe chưa di chuyển
Sau đó phải thực hiện đề máy và di chuyển xe, đối với nhóm nghiên cứu do sử dụng tốc độ động cơ nên chỉ cần đề máy Sau khi CAN Bus Shield và Arduino nhận được tín hiệu tốc độ xe, hoặc tốc độ động cơ thì vi điều khiển Arduino sẽ phân tích dữ liệu trả về và so sánh rằng biến lưu tốc độ xe, hoặc tốc độ động cơ nếu lớn hơn 0 thì vi điều khiển xe xuất tín hiệu điện áp mức cao qua chân D6 Đề tài của nhóm mong muốn sử dụng tốc độ xe vì với lí do rằng, nếu trong trường hợp người lái không tắt máy xe mà chỉ đậu xe để làm việc gì đó như qua các trạm BOT thu phí đường bộ hoặc đậu xe vì lý do nào đó khác thì không cần phải xử lý ảnh và phát ra thông báo Nhưng do việc khảo sát thực hiện trên xe nằm trong xưởng của khuôn viên trường nên không thể thực hiện sử dụng lấy tín hiệu tốc độ xe mà chỉ có thể sử dụng lấy tín hiệu tốc độ động cơ
Hình 4.15 Màn hình hiển thị hệ thống đang giám sát người lái
Nếu không phát hiện gương mặt, hệ thống sẽ phát tiếng kêu và hiển thị thông báo rằng không có mặt trong camera, điều này sẽ nhắc nhở khi tài xế mất tập trung không nhìn về hướng phía trước mình Ngoài ra hệ thống còn phát hiện góc nhìn bên phải, trái của người lái, nếu vượt mức cho phép cũng sẽ phát tín hiệu tiếng kêu Tuy nhiên thuật toán mà nhóm sử dụng để phát hiện các góc nghiêng của mặt chưa được tốt nên việc nhận diện góc nghiêng khi giám sát người lái này còn nhiều hạn chế
Hình 4.16 Khi tài xế nhìn lên
Các tính năng này chủ yếu để quan sát độ tập trung của người lái Việc người lái mất tập trung cũng gây ra những nguy hiểm khó lường trước, do đó việc giám sát hướng nhìn của người lái cũng là điều cần thiết Tuy nhiên việc phát ra âm cảnh báo cũng sẽ gây phiền nếu như người lái nhìn gương, do đó cần tối ưu việc giám sát hướng nhìn người lái
Hình 4.17 Khi tài xế nhìn sang phải
78 Khi người lái ngáp, hệ thống sẽ đếm số lần ngáp đó và đưa ra nhận định rằng người lái đang mệt mỏi hay chưa, tuy nhiên chức năng này vẫn còn gặp một vài trường hợp khác khi người lái mở miệng như nói chuyện
Hình 4.18 Khi tài xế nhìn sang trái
Khi tài xế nhắm mắt quá lâu, có thể trường hợp ngủ gật, hệ thống sẽ đánh giá xem nhắm mắt trong bao lâu Nếu thời gian nhắm mắt đủ lâu, hệ thống sẽ xác định rằng người lái đang mệt mỏi và đưa ra âm cảnh báo cũng như hiển thị bản đồ gợi ý vị trí dừng chân Tuy nhiên thời gian nhắm mắt phải được thay đổi dựa theo tốc độ xe, nếu xe đang chạy nhanh, đánh giá tình huống này là nguy hiểm, thời gian nhắm mắt để kích hoạt cảnh báo trở nên nhỏ hơn, còn nếu xe đang chạy chậm, thời gian để kích hoạt cảnh báo sẽ ở mức cho phép mà không tăng vượt quá mức
Hình 4.19 Phát hiện người lái nhắm mắt
Nếu nhắm mắt lâu hơn 2 giây sẽ cho rằng người lái đang mệt mỏi và đề xuất điểm dừng chân Trên Hình 4.20 là 4 điểm dừng chân ở trong trưởng mà nhóm tạo lập riêng, và khi người lái mệt mỏi sẽ đề xuất điểm gần nhất trong 4 điểm này