Đố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ế
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 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.
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 đượ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 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.
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ị 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 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 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 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ó 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ì đặ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