Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Đ án ĐỀ TÀI: tố gh tn ỨNG DỤNG XỬ LÝ ẢNH VÀO VIỆC p iệ PHÁT HIỆN NGỦ GẬT DÙNG KIT RASPBERRY GVHD: Th.s Nguyễn Duy Thảo SVTH1: Nông Văn Tân MSSV: 13141299 SVTH2: Trần Thị Mỹ Khiêm MSSV: 13141147 Tp Hồ Chí Minh - 01/2018 Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: ỨNG DỤNG XỬ LÝ ẢNH VÀO VIỆC Đ PHÁT HIỆN NGỦ GẬT DÙNG KIT RASPBERRY án p iệ gh tn tố GVHD: Th.s Nguyễn Duy Thảo SVTH: Nông Văn Tân MSSV: 13141299 SVTH: Trần Thị Mỹ Khiêm MSSV: 13141147 Tp Hồ Chí Minh - 01/2018 TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP.HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ Độc lập – Tự – Hạnh phúc BỘ MÔN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH TP Hồ Chí Minh, ngày 01 tháng 01 năm 2018 BẢNG MÔ TẢ CƠNG VIỆC Họ tên sinh viên 1: Nơng Văn Tân MSSV: 13141299 Lớp: 13141DT2C Họ tên sinh viên 2: Trần Thị Mỹ Khiêm MSSV: 13141147 Lớp: 13141DT1D Đ Tên đề tài: Ứng dụng xử lý ảnh vào việc phát ngủ gật dùng Kit Raspberry án tn tố MÔ TẢ MỤC TIÊU CỦA ĐỀ TÀI: p iệ xây dụng toán phát ngủ gật gh Đề tài tìm hiểu kit Raspberry, kiến thức xử lý ảnh, kỹ thuật nhận dạng MÔ TẢ CÔNG VIỆC THỰC HIỆN ĐỀ TÀI CỦA TỪNG SINH VIÊN: Họ tên Sinh viên 1: Nông Văn Tân Các công việc thực đề tài: STT NỘI DUNG CÔNG VIỆC Tìm kiếm tài liệu lập trình Python, OpenCV Cài đặt hệ điều hành thư viện liên quan Viết chương phát ngủ gật Viết báo cáo Họ tên Sinh viên 2: Trần Thị Mỹ Khiêm Các công việc thực đề tài: STT NỘI DUNG CƠNG VIỆC Tìm kiếm tài liệu lập trình Python, OpenCV Tìm kiếm lý thuyết nhận dạng, phát Viết chỉnh sửa báo cáo SINH VIÊN SINH VIÊN (Ký ghi rõ họ tên) (Ký ghi rõ họ tên) Đ án Trần Thị Mỹ Khiêm gh tn tố Nông Văn Tân p iệ XÁC NHẬN CỦA GIẢNG VIÊN HƯỚNG DẪN (Ký ghi rõ họ tên) Th.s Nguyễn Duy Thảo TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH Tp HCM, ngày 01 tháng 01 năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP MSSV: 13141299 Trần Thị Mỹ Khiêm MSSV: 13141147 Chuyên ngành: Điện tử công nghiệp – y sinh Mã ngành: 01 Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2013 Đ Nông Văn Tân Họ tên sinh viên: án Lớp: 13141DT2C tn tố I TÊN ĐỀ TÀI: Ứng dụng xử lý ảnh vào việc phát ngủ gật dùng Kit p iệ gh Raspberry II NHIỆM VỤ Các số liệu ban đầu: kit Raspberry Pi camera loa Các hình ảnh cần xử lý Nội dung thực hiện: Tìm hiểu xử lý ảnh Tìm hiểu kit Raspberry Pi Các kỹ thuật nhận dạng Phát ngủ gật Raspberry Pi Viết báo cáo III NGÀY GIAO NHIỆM VỤ: 25/9/2017 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 15/01/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: Th.s Nguyễn Duy Thảo CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP-Y SINH Th.s Nguyễn Duy Thảo Đ án p iệ gh tn tố TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP Tp HCM, ngày 01 tháng 01 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Nông Văn Tân Lớp: 13141DT2C MSSV: 13141299 Họ tên sinh viên 2: Trần Thị Mỹ Khiêm Đ MSSV: 13141147 Lớp: 13141DT án tn tố Tên đề tài: Ứng dụng xử lý ảnh vào việc phát ngủ gật dùng Kit Raspberry Nội dung iệ gh Tuần/ngày Nhận đề tài Tuần Tìm hiểu nội dung liên quan đề tài: Tuần → p Tuần - Xử lý ảnh - Raspberry - Các ngơn ngữ lập trình Tìm hiểu cài đặt hệ điều hành cho Raspberry Pi Chạy chương trình đơn giản kiểm tra kit Raspberry cài đặt thành cơng Tuần → 10 Tìm hiểu tài liệu ngơn ngữ Python, OpenCV Tìm hiểu thuật toán nhận dạng Tuần 10 → 13 Xây dựng chương trình phát nhận dạng khn mặt Xác nhận GVHD Tuần 14+15 Xây dựng chương trình phát ngủ gật Tuần 16 → 20 Viết báo cáo Tuần 21 Chỉnh sửa hoàn thành báo cáo GV HƯỚNG DẪN (Ký ghi rõ họ tên) Th.s Nguyễn Duy Thảo Đ án p iệ gh tn tố LỜI CAM ĐOAN Đề tài tự thực hướng dẫn Th.s Nguyễn Duy Thảo dựa vào số tài liệu, đề tài trước khơng chép từ tài liệu hay cơng trình có trước Người thực đề tài Người thực đề tài Nông Văn Tân Trần Thị Mỹ Khiêm Đ án p iệ gh tn tố i LỜI CẢM ƠN Trong thời gian thực luận văn nhóm sinh viên thực đề tài học hỏi nhiều kiến thức bổ ích giáo trình thực tế từ thầy Qua em xin gửi lời cảm ơn chân thành đến: Quý thầy cô khoa điện điện tử trường Đại Học Sư Phạm Kỹ Thuật Thành phố Hồ Chí Minh truyền đạt kiến thức, kinh nghiệm quý báu chuyên môn lĩnh vực khác Sự tận tụy say mê, lòng nhân ái, nhiệt tình thầy động lực lớn giúp chúng em trau dồi thêm kiến thức giúp chúng em vượt qua khó khăn học tập sống Chúng em xin gửi lời cảm ơn chân thành đến thầy Nguyễn Duy Thảo giúp đỡ hướng dẫn chúng em hoàn thành đồ án tốt nghiệp Đ Đồng thời cảm ơn đến tất bạn bè gắn bó giúp đỡ án học tập suốt trình thực đồ án tốt nghiệp p iệ gh tn tố Xin chân thành cảm ơn! Nhóm thực đề tài Nông Văn Tân Trần Thị Mỹ Khiêm BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii CHƯƠNG THI CÔNG HỆ THỐNG Ngưỡng mắt NGUONG_MAT để nhận dạng trạng thái mắt nhắm hay mở Biến đếm DEM tổng số khung liên tiếp mà người nhắm mắt Số khung hình SO_KHUNG_HINH để nhận biết tài xế tỉnh táo hay bắt đầu ngủ gật Ban đầu cảnh báo tắt CANH_BAO = False - Tiếp đến kiểm tra tỷ số mắt EAR tính có ngưỡng NGUONG_MAT hay khơng để xác định mắt đóng mở Nếu tỷ số mắt EAR xác định nhỏ ngưỡng NGUONG_MAT tăng biến DEM Nếu DEM vượt q SO_KHUNG_HINH đặt trước chúng tơi giả định người ngủ gật bắt đầu bật cảnh báo Ngược lại tỷ số mắt lớn ngưỡng mắt tổng số khung hình mắt nhắm liên tiếp khơng lớn SO_KHUNG_HINH Đ thiết lập lại DEM ban đầu =0 tắt cảnh báo Thực lại cơng việc án suốt q trình thu hình để phát tình trạng ngủ gật tn tố 4.1.8 Cảnh báo p ON bật âm để cảnh báo iệ gh Sau xác định tài xế có ngủ gật, ta cho phép ALARM_ON trạng thái Để thực phát báo động WAV / MP3, cần thư viện pygame Thư viện pygame cài đặt thuận tiện qua pip lệnh “pip install pygame” 4.2 KẾT QUẢ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 CHƯƠNG THI CÔNG HỆ THỐNG Đ án tố tn Hình 4.4: Phát ngủ gật gh Hình 4.4 kết trình phát ngủ gật Trên hình ảnh, có p iệ thể thấy vùng mắt đánh dấu Sau xử lý phát đối tượng cần xử lý ngủ gật thơng báo hình chữ “NGU GAT” âm phát từ loa BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ Chương 5.1 KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ Kết Hình 5.1: Phát khn mặt Đ án p iệ gh tn tố Hình 5.2: Đánh dấu 68 điểm khuôn mặt dùng giải thuật Facial Landmarks BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ Hình 5.3: Phát trạng thái mắt nhiều trường hợp Đ án p iệ gh tn tố Hình 5.4: Phát ngủ gật vào ban ngày không đeo kính Hình 5.5: Phát ngủ gật vào ban ngày có đeo kính BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH 56 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ Hình 5.6: Phát ngủ gật vào ban đêm khơng đeo kính Đ 5.2 Nhận xét Để đánh giá, nhận xét cách thực tế, nhóm phát ngủ gật ảnh tĩnh án nhiều góc độ trường hợp khác Nhóm sử dụng hình ảnh nhiều trường tố tn hợp khác như: mặt người góc thẳng, góc nghiêng, mắt nhắm, mắt mở, đeo kính, p bảng 5.1 5.2: iệ gh khơng đeo kính, đủ ánh sáng, thiếu ánh sáng, ban ngày, ban đêm.v.v Kết thể BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ Bảng 5.1: Kết nhận dạng trạng thái mắt với trường hợp góc thẳng Góc thẳng Đủ ánh sáng Có kính Thiếu ánh sáng Khơng kính 26/30 = 86.6% 28/30 = 93.3% Có kính Khơng kính 23/30 = 76.7% 26/30 = 86.7% 26/30 = 86.7% 27/30 = 90% Nhắm Đ p iệ gh tn tố Mở 29/30 = 96.7% án 28/30 = 93.3% Bảng 5.1 cho ta thấy kết việc nhận dạng trạng thái mắt với trường hợp khuôn mặt đối diện với camera Độ xác tương đối cao tương đồng trường hợp đủ ánh sáng thiếu ánh sáng Trường hợp người không đeo kính đạt xác cao (trên 90%) thấp (trung bình đạt 80%) trường hợp người có đeo kính Khi đeo kính, hệ thống khó nhận biết mắt sử dụng dự đoán để vẽ mí mắt nên độ xác thấp trường hợp có đeo kính BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP – Y SINH 58 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ Bảng 5.2: Kết nhận dạng trạng thái mắt với trường hợp góc nghiêng Góc nghiêng Đủ ánh sáng Có kính Thiếu ánh sáng Khơng kính 21/30 = 70% 24/30 = 80% Có kính Khơng kính 19/30 = 63.3% 25/30 = 83.3% 26/30 = 86.7% 27/30 = 90% Nhắm Đ 30/30 = 100% iệ gh tn tố Mở án 29/30 = 96.7% p Bảng 5.2 cho ta thấy kết việc nhận dạng trạng thái mắt với trường hợp khuôn mặt xoay nhiều góc khác khơng q 450 Độ xác gần tương đồng trường hợp đủ ánh sáng thiếu ánh sáng Trường hợp người khơng đeo kính đạt xác tương đối cao thấp trường hợp người có đeo kính Qua bảng 5.2, ta thấy khác biệt việc nhận dạng trạng thái nhắm hay mở mắt Trường hợp nhận dạng mắt mở đạt độ xác cao (trên 95%) trường hợp nhận dạng mắt nhắm đạt 80% khơng đeo kính 60% có đeo kính Kết cho thấy độ xác cao phát vào ban ngày Nhưng ban đêm, thiếu ánh sáng nên độ xác thấp so với ban ngày Và việc nhận dạng phải diện khn mặt, khơng vượt q 30o BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 CHƯƠNG KẾT QUẢ NHẬN XÉT ĐÁNH GIÁ Đối với việc đeo kính, gây khó khăn việc đánh dấu mắt Vì vậy, ban đêm việc sử dụng kính gây ảnh hưởng cho việc phát ngủ gật làm cho việc phát khơng xác, thật chí khơng thể phát Việc phát ngủ gật, khoảng cách camera mắt người khoảng 1,2 mét việc phát xác Việc sử dụng kính vơ quan trọng Chỉ phát đối tượng sử dụng loại kính suốt để dễ dàng phát mắt xử lý Đối với loại kính râm, kính chống nắng khơng nhận dạng mắt nên việc phát ngủ gật Đ án p iệ gh tn tố BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Chương 6.1 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN KẾT LUẬN Trong suốt trình thực đề tài nhóm xây dựng hệ thống ứng dụng cho tài xế điều khiển phương tiện tham gia giao thông Đề tài xây dựng hệ điều hành Linux để mô kit Raspberry Pi để sử dụng thực tế với hỗ trợ phương tiện phần mềm xử lý ảnh thư viện mã nguồn mở OpenCV dlib với nhiệm vụ phát cảnh báo tài xế điều khiển phương tiện gia thơng có dấu hiệu buồn ngủ Trên thực tế chương trình đáp ứng yêu cầu sau: Chương trình ứng dụng thực tế chạy kit Raspberry Pi Chương trình ứng dụng Linux viết từ ngơn ngữ Python truy xuất hàm từ thư viện mã nguồn mở OpenCV Đ dlib để xử lý ảnh kit Raspberry Pi Với kết chạy thiết bị kit Raspberry án Pi tốc độ xử lý 1.2GHz, RAM 1GB, camera với độ phân giải 3MP, kích thước khung tn tố ảnh rộng 400 pixel Tốc độ xử lý khung ảnh tương ứng khoảng 0.15 giây chậm gh mô khoảng lần không ảnh hưởng nhiều đến kết cuối cho p iệ việc phát cảnh báo tài xế ngủ gật đảm bảo độ xác cao thời gian thực Kết đáp ứng tốt với yêu cầu hệ thống 6.1.1 Ưu điểm - Là chương trình lập trình tiết kiệm chi phí thiết kế thi cơng phần cứng cho hệ thống cảnh báo với chức tương tự - Linh hoạt tiện lợi kích thước kit Raspberry Pi nhỏ nên tích hợp trực tiếp xe tơ dựa vào hệ thống an ninh có sẵn xe Từ phát triển ứng dụng cách hiệu - Kết mô ứng dụng thực tế kit Raspberry Pi cho độ xác cao - Chương trình đáp ứng yêu cầu thực tế, thời gian xử lý cảnh báo đủ nhanh để đáp ứng cho ứng dụng yêu cầu thời gian thực BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1.2 Nhược điểm Giải thuật sử dụng kit Raspberry Pi để phát khuôn mặt Haar Cascade giải thuật đơn giản phụ thuộc nhiều vào điều kiện ngoại cảnh ánh sáng, góc quay, tọa độ di chuyển nên thực hương trình cịn số nhược điểm sau: - Khi người theo dõi mang kính phát mắt khơng xác, vị trí đánh dấu mắt bị lệch phản chiếu ánh sáng ánh sáng chiếu trực tiếp vào kính - Giải thuật phát nhiều khuôn mặt lúc nên chưa nhận dạng đâu tài xế, đâu người vơ tình lọt vào camera nên việc thực phát cảnh báo ngủ gật chưa chuẩn xác khung ảnh có hai người trở lên - Hướng mặt phải tương đối trực diện Nghiêng, xoay trái, xoay phải góc lớn Đ 45̊ , ngẩng đầu cuối xuống 30̊ giải thuật khơng phát án khuôn mặt mắt HƯỚNG PHÁT TRIỂN p iệ gh 6.2.1 Hướng khắc phục tn tố 6.2 - Tiền xử lý ảnh qua nhiều bước để có kết chuẩn xác - Ứng dụng chương trình điều kiện ngoại cảnh phù hợp khoảng cách, ánh sáng (lắp đặt đèn chiếu sáng vừa đủ xe vào ban đêm), hạn chế số lượng thời gian mà khuôn mặt người khác tài xế làm nhiễu khung ảnh, hướng góc nghiêng mặt… để đảm bảo độ tin cậy giảm sai số tới mức thấp cho hệ thống - Cải thiện chất lượng camera sử dụng camera hồng ngoại không phụ thuộc vào điều kiện ánh sáng để thu khung ảnh ảnh xám, camera có độ phân giải cao… BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.2.2 Hướng phát triển - Nghiên cứu cải tiến giải thuật phát hiện, nhận diện hiệu quả, xác tối ưu - Xây dựng hệ thống với cảnh báo đa dạng hệ thống phát thấy tình trạng ngủ gật gửi tin nhắn, thực gọi, kích hoạt động quay, rung… để đánh thức tài xế - Để tiện lợi chủ động sử dụng việc nghiên cứu phát triển hệ thống thiết bị di động cần thiết ví dụ lập trình phần mềm, ứng dụng cài đặt điện thoại thơng minh Phát phân tích cấu trúc khn mặt người không gian chiều Đ án p iệ gh tn tố BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO Sách tham khảo [1] Nguyễn Thanh Hải, “Giáo Trình: Xử Lý Ảnh”, Xuất Đại Học Quốc Gia TP.HCM, 2013 [2] Simon Monk, “Programming the Raspberry Pi Getting Started with Python”, 2015 [3] Joseph Howse, Prateek Joshi, Micheal Beyeler, “OpenCV: Computer Vision Projects with Python”, 2016 [4] Tereza Soukupova and Jan Čech, “Real-Time Eye Blink Detection using Facial Landmarks”, 2016 - Haar án “Adaboost [5] Đ Trang web tham khảo Features - Face detection” [Online] Available: tố [6] gh tn http://www.ieev.org/2010/03/adaboost-haar-features-face-detection_22.html “ Facial landmarks with dlib, OpenCV, and Python” [Online] Available: p iệ https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ [7] WIKIPEDIA, "Khoảng cách Euclid," [Online] Available: https://vi.wikipedia.org/wiki/Kho%E1%BA%A3ng_c%C3%A1ch_Euclid [8] “Raspbian Stretch: Install OpenCV + Python on your Raspberry Pi” https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3python-on-your-raspberry-pi/ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64 PHỤ LỤC PHỤ LỤC PHỤ LỤC: CHƯƠNG TRÌNH PHÁT HIỆN NGỦ GẬT # python PhatHienNguGat.py #nhap nhung goi can thiet from scipy.spatial import distance as dist from imutils.video import VideoStream from imutils import face_utils from threading import Thread import numpy as np import imutils import time import dlib import cv2 start_time = time.time() Đ def danh_dau_moc(im): rects = detector.detectMultiScale(im, 1.3,5) x,y,w,h =rects[0] rect=dlib.rectangle(x,y,x+w,y+h) return np.matrix([[p.x, p.y] for p in predictor(im, rect).parts()]) án tn tố p iệ gh def ty_so_mat(eye): # tinh khoang cach euclide giua bo danh dau mat doc toa (x, y) A = dist.euclidean(eye[1], eye[5]) B = dist.euclidean(eye[2], eye[4]) # tinh khoang cach euclide giua diem moc danh dau mat ngang toa (x, y) C = dist.euclidean(eye[0], eye[3]) # tinh ti le mat ear = (A + B) / (2.0 * C) # tra ve ti le mat return ear # xac dinh hang so, cho ti le khia canh mat de biet mat nhap nhay va cho so khung lien tiep ma mat phai nam duoi nguong de dat canh bao NGUONG_MAT = 0.25 SO_KHUNG_HINH = 10 DEM = BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 65 PHỤ LỤC # khoi tao bo phat hien khuon mat cua opencv (dua tren haar cascade) va tao bo du doan danh dau moc cua khuon mat cua dlib #print("[INFO] loading facial landmark predictor ") cascade_path='haarcascade_frontalface_default.xml' detector = cv2.CascadeClassifier(cascade_path) PREDICTOR_PATH = "shape_predictor_68_face_landmarks.dat" predictor = dlib.shape_predictor(PREDICTOR_PATH) # lay cac chi so cua cac dau moc tren khuon mat # cho mat trai va mat phai tuong ung (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"] Đ # bat dau thu luong video #print("[INFO] starting video stream thread ") vs = VideoStream(src=0).start() time.sleep(1.0) print ( " - %s seconds -" % (time.time() - start_time)) # vong lap qua cac khung hinh tu luong video while True: start_time_1 = time.time() # lay khung tu luong tep video, thay doi kich thuoc # va chuyen doi no sang cac kenh mau xam frame = vs.read() frame = imutils.resize(frame, width=400) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) án tn tố # phat hien cac khuon mat khung anh xam rects = detector.detectMultiScale(gray, 1.3, 5) p iệ gh # vong lap tren phat hien khuon mat for rect in rects: # xac dinh diem moc tren mat # doi voi vung khuon mat, sau # chuyen doi diem moc tren mat toa (x, y) voi mang NumPy shape = danh_dau_moc(gray) # trich xuat toa mat trai va phai, # sau su dung toa de tinh ti le mat cho ca2 mat leftEye = shape[lStart:lEnd] rightEye = shape[rStart:rEnd] leftEAR = ty_so_mat(leftEye) rightEAR = ty_so_mat(rightEye) # tinh ti le mat trung binh cho ca mat ear = (leftEAR + rightEAR) / 2.0 # tinh vien bao loi cho mat trai va mat phai, # sau hinh dung (ve ra) vien bao cho moi mat leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2.convexHull(rightEye) cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 66 PHỤ LỤC cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) # kiem tra ti le mat co nam duoi nguong nhay mat hay khong, # neu co tang bo dem khung nhap nhay if ear < NGUONG_MAT: DEM += # neu nham mat du so luong khung da dat thi bao dong if DEM >= SO_KHUNG_HINH: cv2.putText(frame, "NGU GAT!", (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5) # mat khac neu ty le mat khong duoi nguong nhay mat else: DEM = Đ # ve thong so ty le mat da tinh tren khung de giup viec kiem tra # sua loi va thiet lap lai dung nguong ty le mat va bo dem khung cv2.putText(frame, "TY SO MAT: {:.2f}".format(ear), (250, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2) án iệ gh tn tố p # show khung hinh cv2.imshow("PHAT HIEN NGU GAT", frame) key = cv2.waitKey(1) & 0xFF # nhan 'q' de thoat khoi vong lap va xoa ngo pi if key == ord("q"): break print ( " - %s seconds -" % (time.time() start_time_1)) # ngung thu video va dong tat ca cua so cv2.destroyAllWindows() vs.stop() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67