Xây dựng hệ thống cảnh báo ngủ gật trên kit raspberry pi 3 đề tài nghiên cứu khoa học sinh viên

83 7 0
Xây dựng hệ thống cảnh báo ngủ gật trên kit raspberry pi 3 đề tài nghiên cứu khoa học sinh viên

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

XÂY DỰNG HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN KIT RASPBERRY PI Nguyễn Minh Tiến Lê Trung Phương Abstract: In this article, we build a system to detect driver drowsiness based on image processing techniques With a camera used to observe the driver's face, the image processing system with the Raspberry Pi Kit will sound a warning when the driver shows a drowsiness based on the eye-closed state as well as a yawn The topic uses the method of detecting the closed eye state: the method of determining the ratio of the distance between the eyelids and the ratio of the distance between the upper lip and the lower lip when yawning We used a trained data set to extract 68 facial features and “frontal face detectors” in Dlib to determine the eye and mouth positions needed to carry out identification Experiments on a Vietnamese group show that the accuracy of the system is quite high Keywords:image processing; face recognition; drowsiness detection Tóm tắt: Trong khn khổ báo này, xây dựng hệ thống phát tình trạng ngủ gật tài xế dựa kỹ thuật xử lý ảnh Với camera dùng để quan sát gương mặt tài xế, hệ thống xử lý hình ảnh Kit Raspberry Pi phát âm cảnh báo tài xế có biểu ngủ gật dựa vào trạng thái mắt nhắm miệng ngáp Đề tài sử dụng phương pháp phát trạng thái nhắm mắt là: phương pháp xác định tỉ lệ khoảng cách hai mí mắt tỉ lệ khoảng cách môi môi ngáp Chúng sử dụng tập liệu huấn luyện để trích xuất 68 điểm đặc trưng khn mặt cơng cụ “frontal face detector” có thư viện Dlib để xác định vị trí mắt miệng cần thiết để tiến hành nhận dạng Thực nghiệm nhóm người Việt Nam cho thấy độ xác hệ thống cao Từ khóa: xử lý ảnh; nhận dạng khn mặt;phát ngủ gật ĐẶT VẤN ĐỀ Tai nạn giao thông đường có ảnh hưởng lớn đến cá nhân, cộng đồng quốc gia Nó tiêu tốn khoảng chi phí lớn để chăm sóc sức khỏe gây nên tình trạng thường xuyên tải hệ thống bệnh viện Năm 2016 Theo báo cáo WHO, 1,24 triệu ca tử vong giao thông đường xảy năm giới, điều làm cho tai nạn giao thông trở thành nguyên nhân số chết số người độ tuổi 15-29 Con số dự đoán tăng đến khoảng 1,9 triệu vào năm 2030 trở thành bảy nguyên nhân hàng đầu gây tử vong người[1] Thông báo hôm 8/2 Ủy ban An tồn giao thơng Quốc gia Việt Nam nói ngày nghỉ Tết Nguyên đán Kỷ Hợi 2019 nước xảy 214 vụ tai nạn giao thông, làm chết 135 người, bị thương 189 người[2] Có nhiều lý gây tai nạn giao thông, nguyên nhân chủ quan ý thức người điều khiển, sử dụng điện thoại, sử dụng rượu bia chất kích thích hay nguyên nhân khách quan việc mệt mỏi làm việc sức dẫn đến tình trạng ngủ gật tập trung Ngày nay, nhiều kỹ thuật phát tình trạng ngủ gật nghiên cứu Các kỹ thuật phát tình trạng ngủ gật chia thành hai loại bản: kỹ thuật dựa thay đổi biểu sinh lý sóng não, nhịp tim, ; kỹ thuật dựa thay đổi biểu vật lý thể tư thế, độ nghiêng đầu, trạng thái nhắm/mở mắt, chớp mắt, ngáp,… Hệ thống phát ngủ gật đề cập bao gồm ba thành phần Kit Raspberry Pi 3, Module Pi camera loa để phát âm cảnh báo Camera gắn xe bắt giữ khuôn mặt người lái xe liên tục theo dõi mắt miệng người lái xe Raspberry Pi phân tích khung hình liên tục cảnh báo người lái xe thời gian thực phát bất thường, để người lái trở lại tập trung Do cấu trúc nhỏ gọn nó, nên dễ dàng trang bị loại xe tơ Ngồi hệ thống tương đối rẻ biện pháp an toàn khác trang bị xe Để thực điều cần xác định khn mặt tài xế xác định vị trí đặc trưng khn mặt CÁC NỘI DUNG CHÍNH 2.1 Các phương pháp xác định khn mặt a Trình phân loại Haar Cascade Được đề xuất vào năm 2001 Paul Viola Michael Jones[3] để tìm đồ vật ảnh hay video thời gian thực Họ sử dụng loạt tính để phát nhanh chóng đối tượng Haar Cascade cịn gọi Máy dò Viola-Jones Phương thức huấn luyện so khớp tất Haar-like features mẫu sẵn có vào ảnh gốc xám hố chuẩn hố (chỉnh lại kích thước theo u cầu), Haar-like features phù hợp máy tính rút trích chọn mức ngưỡng (threshold) tối ưu theo 8-bit mức xám Hình Haar-like features Bộ phân loại thác đổ (Cascade classifiers) – dựa đặc trưng Haar (Haar feature)[4] Tất đặc trưng Haar-like sau huấn luyện quét khắp ảnh đầu vào, tức pixels ảnh lần bị nhân Haar-like trượt qua, khu vực so sánh cho giống với nhiều đặc trưng Haar-like đánh dấu lại phát gương mặt Hình So khớp để tạo đặc trưng b HOG-Histogram of Oriented Gradients[4] Là cơng cụ mơ tả tính có chức tạo nên hình thái khác đối tượng khơng gian vector cách trích xuất đặc trưng HOG (HOG descriptors) đối tượng đó, hạn chế thơng tin khơng hữu ích làm lên phần viền đối tượng nhờ đặc tính dốc đường bao đối tượng (intensity gradient) Đối với tốn nhận dạng mặt người, thơng tin hữu ích sau qua máy phân lớp SVM, kết đầu dự đoán kết ảnh có gương mặt hay khơng Vì vậy, HOG sử dụng chủ yếu để mơ tả hình dạng xuất đối tượng ảnh Bản chất phương pháp HOG sử dụng thông tin phân bố cường độ gradient (Intensity Gradient) hướng biên (Edge Directins) để mơ tả đối tượng ảnh Các tốn tử HOG triển khai cách chia nhỏ ảnh thành cells, cell (8x8px) rút histogram hướng gradients cho điểm nằm cell Để tăng cường hiệu nhận dạng, histogram chuẩn hóa độ tương phản cách tính ngưỡng cường độ vùng lớn cell, gọi blocks (4 cells) sử dụng giá trị ngưỡng để chuẩn hóa tất cells khối Kết sau bước chuẩn hóa giúp HOG có khả ổn định cao với thay đổi độ sáng toàn ảnh Hình Hình thái khác đối tượng khơng gian vector 2.2 Phương pháp đề xuất a Nhận dạng trạng thái ngủ gật Trong số tất biện pháp xác định trạng thái ngủ gật lái xe, kỹ thuật xác phụ thuộc vào biện pháp sinh lý người Mặc dù phương pháp mang lại kết xác nhất, địi hỏi phải đặt thiết bị đầu, tay hay ngực gây cảm giác khó chịu cho người lái xe Ngồi thiết bị cần phải đặt cẩn thận nơi thích hợp kết hồn hảo Do đó, chúng tơi chủ yếu tập trung vào hành vi nhắm mắt qua tỷ lệ nhắm hay mở hai mí mắt cung cấp nhiều thơng tin xác việc buồn ngủ Do khơng làm ảnh hưởng đến người lái xe người lái xe cảm thấy hoàn toàn thoải mái với hệ thống b Bộ phân loại sử dụng HOG tốt việc mô tả đối tượng hình dạng tốt cho phát người có tỉ lệ xác cao Trong Haar cho tốc độ phát đối tượng nhanh Khi kết hợp chúng dẫn đến kết tốt hiệu suất Do đó, chúng tơi sử dụng HOG hệ thống 2.3 Xây dựng hệ thống Trong nghiên cứu này, sử dụng ngôn ngữ Python kết hợp với thư viện mã nguồn mở OpenCV Dlib tảng phần cứng máy tính nhúng Raspberry Pi model B+ để nhận dạng tình trạng ngủ gật tài xế Hệ thống nghiên cứu vận hành theo bước sau: - Nhận nguồn video từ buồng lái; - Xác định khn mặt có video; - Xác định vị trí điểm mắt miệng khn mặt; - Tính tỉ lệ mắt miệng so sánh với giá trị ngưỡng định trước(ngưỡng tỉ lệ mắt nằm khoảng mắt nhắm); - Phát dự đoán tình trạng ngủ gật; - Phát âm cảnh báo phát tình trạng ngủ gật Đầu tiên, chúng tơi qt tìm đối tượng mong muốn mặt người Điều thực công cụ HOG kết hợp với phân lớp SVM kết đầu có khn mặt người hay không Sau xác định khuôn mặt tiếp tục sử dụng thư viện Dlib để tiến hành nhận dạng điểm khuôn mặt Thư viện Dlib hỗ trợ nhận biết 68 điểm khuôn mặt thực thi qua hàm Facial Landmark[5] Hình Đánh dấu 68 điểm Để xác định 68 điểm khuôn mặt người, xác định Facial Landmark dlib huấn luyện với dataset iBUG 300-W, tập liệu training đầu vào 1000 ảnh mặt người đánh dấu 68 điểm hoàn tồn thủ cơng Tiếp theo hệ thống tiến hành tính tỉ lệ khoảng cách hai mí mắt theo công thức[7]: ||𝑝2 −𝑝6 ||+||𝑝3 −𝑝5 || 2||𝑝1 −𝑝4 || EAR = Hình Tỉ lệ mắt nhắm hay mở Nếu tỉ lệ ngưỡng mà ta xác định(đã thực nghiệm với số người Việt Nam tỉ lệ nhắm mắt 0.22) khoảng 30 khung hình camera hệ thống cảnh báo kích hoạt Sơ đồ khối hệ thống Hình Sơ đồ khối mơ tả hệ thống Kết luận Bài viết tập trung trình bày giải pháp để cảnh báo người lái xe trước tai nạn xảy phát dấu hiệu tài xế buồn ngủ, nguyên nhân gây tai nạn đường bộ, phương pháp giảm tỉ lệ tử vong bị thương mức độ lớn Trình phân loại HOG sử dụng cách tính tỷ lệ khung hình mắt miệng Do hệ thống phát buồn ngủ cảnh báo người lái xe xác thời gian thực Tài liệu tham khảo: [1] WHO Road Safety: Basic Facts; 2016 [2] Ủy ban An tồn giao thơng Quốc gia Việt Nam 2019 [3] Paul Viola and Michael Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features" in 2001 [4] Paul Viola and Michael Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features" in 2001 [5] Kazemi and Sullivan, One Millisecond Face Alignment with an Ensemble of Regression Trees paper (2014) [6] Dalal and Triggs in their seminal 2005 paper, Histogram of Oriented Gradients for Human Detection [7] Real-Time Eye Blink Detection using Facial Landmarks 2016 by Tereza Soukupova and Jan ´ Cech in Center for Machine Perception, Department of Cybernetics Faculty of Electrical Engineering, Czech Technical University in Prague TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI PHÂN HIỆU TẠI THÀNH PHỐ HỒ CHÍ MINH BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NĂM 2019 XÂY DỰNG HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN KIT RASPBERRY PI Sinh viên thực hiện: Nguyễn Minh Tiến Lớp: Kỹ thuật điện tử tin học công nghiệp K57 Lê Trung Phương Lớp: Kỹ thuật điện tử tin học công nghiệp K57 Bộ Môn: Điện- Điện Tử Người hướng dẫn: ThS Võ Thiện Lĩnh TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI PHÂN HIỆU TẠI THÀNH PHỐ HỒ CHÍ MINH BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NĂM 2019 XÂY DỰNG HỆ THỐNG CẢNH BÁO NGỦ GẬT TRÊN KIT RASPBERRY PI Sinh viên thực hiện: Nguyễn Minh Tiến Nam, Nữ: Nam Lớp: Kĩ thuật điện tử tin học công nghiệp K57 Năm thứ: Ngành học: Kĩ thuật điện tử tin học công nghiệp Dân tộc: Kinh Bộ môn: Điện-Điện Tử Lê Trung Phương Nam, Nữ: Nam Lớp: Kĩ thuật điện tử tin học công nghiệp K57 Năm thứ: Ngành học:Kĩ thuật điện tử tin học công nghiệp Dân tộc: Kinh Bộ môn: Điện-Điện Tử Người hướng dẫn: ThS Võ Thiện Lĩnh MỤC LỤC DANH MỤC TỪ VIẾT TẮT DANH MỤC HÌNH ẢNH LỜI GIỚI THIỆU MỞ ĐẦU Tổng quan tình hình nghiên cứu Lý lựa chọn đề tài Mục tiêu đề tài 10 Phạm vi giới hạn đề tài 10 Phương pháp nghiên cứu 10 CHƯƠNG I : CƠ SỞ LÝ THUYẾT 12 1.1 Cơ sở xử lý ảnh số 12 1.1.1 Các khái niệm xử lý ảnh 12 1.1.2 Các phương pháp nhận dạng biên ảnh 13 1.1.3 Không gian màu biểu diễn ảnh 19 1.1.4 Các kỹ thuật lọc ảnh số 20 1.2 Các phương pháp nhận dạng khuôn mặt 28 1.2.2 Haar cascade 28 1.2.3 HOG kết hợp với máy phân lớp SVM 32 1.2.4 So sánh HOG Haar 38 1.3 Nghiên cứu hành vi ngủ gật người lái xe 39 1.3.1 Hành vi gây tập trung tài xế lái xe 40 1.3.2 Các dấu hiệu nhận biết trình trạng ngủ gật, không tập trung lái xe 40 1.3.3 Các phương pháp phát ngủ gật xe ô tô 41 CHƯƠNG II : GIỚI THIỆU KIT RASPBERRY 43 2.1 Giới thiệu Kit Raspberry 43 2.1.1 Raspberry ? 43 2.1.2 Thơng số cấu hình 43 2.1.3 Raspberry Pi Camera Module V2 44 2.1.4 Hệ điều hành sử dụng 45 2.2 Cài đặt cho Raspberry Pi 46 2.2.1 Cài đặt hệ điều hành 46 2.2.2 Kết nối với Raspberry Pi từ PC 48 2.2.3 Thiết lập IP cho Raspberry Pi 49 2.3 Các ứng dụng Kit Raspberry thực tiễn 50 2.4 Ứng dụng Raspberry nhận diện tình trạng ngủ gật tài xế 51 CHƯƠNG III : XÂY DỰNG HỆ THỐNG NHẬN DẠNG VÀ CẢNH BÁO 52 3.1 Thư viện OpenCV 52 3.1.1 Giới thiệu thư viện OpenCV 52 3.1.2 Chức OpenCV 52 3.1.1 Ứng dụng thư viện OpenCV 52 3.2 Ngơn ngữ lập trình Python 53 3.3 Lựa chọn phương pháp đề tài nghiên cứu 53 3.3.1 Thư viện Dlib + Facial Landmark 53 3.3.2 Các bước giải thuật 54 3.4 Lưu đồ thuật toán 57 CHƯƠNG IV: KẾT QUẢ MÔ PHỎNG 58 4.1 Kết mô Kit Raspberry 58 4.2 Đánh giá hệ thống 63 KẾT LUẬN VÀ KIẾN NGHỊ 66 Kết luận 66 Kiến nghị 66 TÀI LIỆU THAM KHẢO 67 PHỤ LỤC 68 61 Hình 4.6 Mang trang Mơ hình thực tế hệ thống 62 63 4.2 Đánh giá hệ thống Kết thực nghiệm: Thử nghiệm với người Việt Nam ngồi vào vị trí mặt hướng vào camera, vị trí đầu nằm vừa khung hình vng 400x400pixel Tiến hành chạy chương trình 10 lần liên tiếp 64 o Khi hoạt động điều kiện nhà với ánh sáng đầy đủ Lần Thử 10 Độ định hệ thống Kết Quả Nhận Diện Đúng Đúng Đúng Đúng Đúng Đúng Đúng Đúng Sai Đúng 9/10 o Khi hoạt động trời lúc 20h00 Lần Thử 10 Tổng Kết Kết Quả Nhận Diện Sai Sai Sai Đúng Sai Đúng Sai Sai Sai Đúng 3/10 Ưu điểm: • • • • Xác định nhanh chóng xác thời gian thực Khơng ảnh hưởng trực tiếp đến người lái xe Hoạt động liên tục 24/24 Giá thành cho hệ thống tương đối rẻ Hạn chế: • • Hoạt động khơng ổn định môi trường ánh sáng yếu sử dụng camera thường, đề xuất sử dụng camera hồng ngoại để sử dụng tốt vào ban đêm Không nhận dạng mang trang hay kính đen ( giới hạn đề tài ) 65 • • Cấu hình Kit Raspberry cịn yếu để xử lý lượng lớn phép tính lĩnh vực xử lý ảnh số, đề xuất sử dụng máy tính nhúng cơng nghiệp với cấu hình mạnh cho kết nhanh xác Thuật tốn phức tạp nên hệ thống đơi lúc cịn bị giật 66 KẾT LUẬN VÀ KIẾN NGHỊ Kết luận Bằng cách thiết kế điều khiển nhận dạng trạng thái ngủ gật tài xế, đề tài góp phần giảm số lượng vụ tai nạn giao thông liên quan đến việc ngủ gật tài xế cảnh báo trực tiếp buồng lái để có cách giải kịp thời truyền liệu liên tục đơn vị quản lý để xử lý vi phạm tài xế Đề tài hoàn thành mục tiêu đề ra: − Hoàn thành báo cáo nghiên cứu khoa học − Thiết kế hệ thống cảnh báo ngủ gật − Xây dựng chương trình phần mềm − Xây dựng mơ hình phần cứng − Đánh giá kết nghiên cứu thực nghiệm Kiến nghị Do thời gian nghiên cứu có hạn nên đề tài chắn cịn nhiều thiếu sót, đề tài tiếp tục phát triển, nhóm mong muốn nhà trường, Ban giám hiệu trường quan tâm, tạo điều kiện giúp đỡ cho nhóm kinh phí tiếp cận, trao đổi với chuyên gia lĩnh vực giao thông, triển khai xe thực tế để đề tài nhóm hoàn thiện ứng dụng rộng rãi hiệu Hướng nghiên cứu - Xây dựng hệ thống hoàn chỉnh triển khai thực tế 67 TÀI LIỆU THAM KHẢO [1] Viola, Paul; Jones, Michael (2002) "Robust Real-time Object Detection" (PDF) International Journal of Computer Vision [2] Crow, Franklin (1984) "Summed-area tables for texture mapping" (PDF) SIGGRAPH '84: Proceedings of the 11th annual conference on Computer graphics and interactive techniques pp 207–212 [3] Paul Viola and Michael Jones, "Rapid Object Detection using a Boosted Cascade of Simple Features" in 2001 [4] One Millisecond Face Alignment with an Ensemble of Regression Trees paper by Kazemi and Sullivan (2014) [5] Báo cáo “Rối loạn giấc ngủ tai nạn giao thông” hội nghị khoa học thường niên Hội Hơ hấp Việt Nam Chương trình đào tạo y khoa liên tục 2015, giáo sư Telfilo Lee Chiong (Trung tâm Nationnal Jewish Health, Mỹ) [6] Dalal and Triggs in their seminal 2005 paper, Histogram of Oriented Gradients for Human Detection [7] Support-Vector Networks 1995, Cortes and Vapnik [8] Driver Drowsiness Alert System with EffectiveFeature Extraction (2018) by Ashlesha Singh, Chandrakant Chandewar, and Pranav Pattarkine 68 PHỤ LỤC Code Chương Trình: from scipy.spatial import distance as dist from imutils import face_utils from threading import Thread from pyimagesearch.tempimage import TempImage import numpy as np import dropbox import imutils import time import dlib import cv2 import playsound import datetime def sound_alarm(): playsound.playsound('alarm.wav') def sound_focus(): playsound.playsound('focus.wav') def eye_aspect_ratio(eye): # tính euclide điểm không gian A = dist.euclidean(eye[1], eye[5]) B = dist.euclidean(eye[2], eye[4]) C = dist.euclidean(eye[0], eye[3]) # tính tiết diện trung bình mí mắt avr_eye = (A + B) / (2.0 * C) return avr_eye 69 def mouth_ratio(mouth): AB = dist.euclidean(mouth[12],mouth[16]) CD = dist.euclidean(mouth[13],mouth[19]) EF = dist.euclidean(mouth[14],mouth[18]) GH = dist.euclidean(mouth[15],mouth[17]) # tính tiết diện trung bình khn miệng mouth = (CD+EF+GH)/(3.0*AB) return mouth # số EYE_AR_THRESH = 0.3 EYE_AR_CONSEC_FRAMES = 48 MOUTH_AR_THRESH = 0.27 MOUTH_AR_CONSEC_FRAMES = 48 COUNTER = COUNTER_MOUTH = ALARM_ON = False RECORD=False FOCUS = True checkType=None countType=0 client = dropbox.Dropbox("unQ5Wyy9mgAAAAAAAAAACiWorvEgb7ytXApRtaMWb5 BNdk1gSVCdv3XGclHnnzC6") print("[SUCCESS] dropbox account linked") fourcc = cv2.VideoWriter_fourcc(*'XVID') print("[INFO] loading facial landmark predictor ") 70 # import thư viện dlib HOG face detector detector = dlib.get_frontal_face_detector() # load file SVM train 68 điểm predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"] (mouthStart, mouthEnd) = face_utils.FACIAL_LANDMARKS_IDXS["mouth"] # stream video từ PiCam Raspberry print("[INFO] starting video stream thread ") cap=cv2.VideoCapture(0) fourcc = cv2.VideoWriter_fourcc(*'XVID') time.sleep(1.0) # cập nhật thời gian lastUploaded = datetime.datetime.now() while True: # lấy frame từ video _,frame=cap.read() timestamp = datetime.datetime.now() ts = timestamp.strftime("%A %d %B %Y %I:%M:%S%p") # chuyển không gian BGR sang Gray gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # face detect trả vector chứa toạ độ vị trí gương mặt frame rects = detector(gray, 0) if checkType is 1: countType=countType+1 if (countType == 50): 71 countType=0 FOCUS=False tt = Thread(target=sound_focus) tt.setDaemon(True) tt.start() if not FOCUS: cv2.putText(frame, "FOCUS!", (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) checkType = # loop over the face detections for rect in rects: # từ toạ độ gương mặt >> tìm toạ độ vị trí 68 đặc trưng shape = predictor(gray, rect) shape = face_utils.shape_to_np(shape) checkType = type(shape) if checkType is np.ndarray: FOCUS=True countType=0 leftEye = shape[lStart:lEnd] rightEye = shape[rStart:rEnd] leftavr_eye = eye_aspect_ratio(leftEye) rightavr_eye = eye_aspect_ratio(rightEye) avr_eye = (leftavr_eye + rightavr_eye) / 2.0 mouth = shape[mouthStart:mouthEnd] avr_mouth = mouth_ratio(mouth) # vẽ đường bao mắt miệng lên video đầu leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2.convexHull(rightEye) 72 cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) mouthHull = cv2.convexHull(mouth) cv2.drawContours(frame, [mouthHull], -1, (255,0,0), 1) # tiết diện mắt trung bình < ngưỡng cho trước if avr_eye < EYE_AR_THRESH: COUNTER += if not RECORD: RECORD=True tt = TempImage() out = cv2.VideoWriter(tt.path,fourcc,20.0,(640,480)) # start recording each frame out.write(frame) # nhắm mắt liên tục sau EYE_AR_CONSEC_FRAMES frame báo động if COUNTER >= EYE_AR_CONSEC_FRAMES: if not ALARM_ON: ALARM_ON = True # play âm đa luồng if 'alarm.wav' != "": t = Thread(target=sound_alarm) t.setDaemon(True) t.start() # vẽ ký tự lên frame ảnh cv2.putText(frame, "DROWSINESS ALERT!", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) # render frame liền trước hụ còi 73 elif ALARM_ON: ALARM_ON = False COUNTER = # rendering video RECORD=False out.release() if (timestamp - lastUploaded).seconds >= 8: # upload lên dropbox try: path = "/{base_path}/{timestamp}.avi".format(base_path="Drowsiness", timestamp=ts) client.files_upload(open(tt.path,"rb").read(), path) tt.cleanup() print("UPLOAD COMPLETE") except: print('check your connection') cv2.putText(frame, "DROWSINESS ALERT!", (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) else: COUNTER = if avr_mouth < MOUTH_AR_THRESH: COUNTER_MOUTH += if not RECORD: RECORD=True tt = TempImage() out = cv2.VideoWriter(tt.path,fourcc,20.0,(640,480)) out.write(frame) 74 if COUNTER_MOUTH >= MOUTH_AR_CONSEC_FRAMES: if not ALARM_ON: ALARM_ON = True if 'alarm.wav' != "": t = Thread(target=sound_alarm) t.setDaemon(True) t.start() cv2.putText(frame, "YAWNING ALERT!", (50, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) elif ALARM_ON: ALARM_ON = False COUNTER_MOUTH = # rendering video RECORD=False out.release() if (timestamp - lastUploaded).seconds >= 8: try: path = "/{base_path}/{timestamp}.avi".format(base_path="Drowsiness", timestamp=ts) client.files_upload(open(tt.path,"rb").read(), path) tt.cleanup() print("UPLOAD COMPLETE") except: print('check your connection') cv2.putText(frame, "YAWNING ALERT!", (50, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) else: COUNTER_MOUTH = 75 cv2.putText(frame, "avr_eye: {:.2f}".format(avr_eye), (300, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, "MOUTH: {:.2f}".format(avr_mouth), (100, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) # hiển thị stream output cv2.imshow("Frame",frame) key=cv2.waitKey(1) & 0xFF # nhấn phím 'q' để if key == ord("q"): break cap.release() cv2.destroyAllWindows()

Ngày đăng: 31/05/2023, 10:41

Tài liệu cùng người dùng

Tài liệu liên quan