Hướng khắc phục

Một phần của tài liệu Thiết kế thiết bị phát hiện ngủ gật với raspberry pi (Trang 72 - 80)

Để khắc phục ảnh hưởng của ánh sáng phản chiếu lên kính ta có thể áp dụng một số biện pháp như sau:

- Sử dụng màn che để hạn chế ánh sáng chiếu trực tiếp vào mắt trong trường hợp tài xế đeo kính.

- Sử dụng loại kính ít bị phản chiếu, điều chình góc camera phù hợp.

Lắp đặt thêm hệ thống đèn hồng ngoại chiếu sáng vừa đủ để tăng kết quả nhận diện chính xác vào ban đêm.

Để khắc phục lỗi không thể nhận diện 2 người cùng một lúc ta có thể thu hẹp góc camera để trách việc người khác xuất hiện trong khung hình làm nhiễu kết quả. 6.2.2 Hướng phát triển

Ta có thể phát triển đề tài theo một số hướng sau:

- Nghiên cứu cải thiện khả năng nhận diện khi đeo kính, cải tiến những giải thuật phát hiện, nhận diện hiệu quả, chính xác và tối ưu hơn.

- Tích hợp thêm chương trình phát hiện say xỉn, phát hiện đột quỵ khi lái xe cho hệ thống.

TÀI LIỆU THAM KHẢO

[1] ThS. Nguyễn Trần Minh Nguyệt và KS. Phạm Huy Quang, “XỬ LÝ ẢNH VỚI ARDUINO VÀ RASPBERRY”, Nhà xuất THANH NIÊN, 2020.

[2] “Real-time facial landmark detection with OpenCV, Python and dlib” [Online]. Available:https://www.pyimagesearch.com/2017/04/17/real-time-facial-landmark- detection-opencv-python-dlib/

61 [3] Tereza Soukupova and Jan Čech, “Real-Time Eye Blink Detection using Facial

Landmarks”,https://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf

[4] “Facial landmarks with dlib, OpenCV, and Python” [Online]. Available: https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-

python/

[5]F. Friedrichs, B. Yang, “Camera-based Drowsiness Reference for Driver State Classification under Real Driving Conditions” 2010 IEEE Intelligent Vehicles Symposium University of California, San Diego, CA, USA June 21-24, 2010. [6]M.J. Flores J. Ma Armingol A. de la Escalera, “Driver drowsiness detection

system under infrared illumination for an intelligent vehicle” Published in IET Intelligent Transport Systems Received on 13th October 2009 Revised on 1st April 2011.

[7]W. Zhang, B. Cheng, Y. Lin, “Driver drowsiness recognition based on computer vision technology”, Tsinghua Science and Technology, vol. 17, no. 3, pp. 354–362, 2012.

[8] R.O. Mbouna, S.G. Kong, M.G. Chun, “Visual Analysisof Eye State and Head Pose for Driver Alertness Monitoring”, IEEE Transactions On Intelligent

Transportation Systems, vol. 14, no. 3, September 2013.

[9]E. Tadesse, W. Sheng, M. Liu, “Driver Drowsiness Detection through HMM based Dynamic Modeling”, 2014 IEEE International Conference on Robotics & Automation (ICRA) Hong Kong Convention and Exhibition Center May 31 - June 7, 2014. Hong Kong, China.

[10] chisty, J. Gill, “A review: driver drowsiness detection system”, International

Journal of Computer Science Trends and Technology (IJCST), vol. 3, no. 4, Jul-

Aug 2015, ISSN: 2347-8578 www.ijcstjournal.org Page 243.

[11] Nguyễn Minh Sơn, Nguyễn Văn Bình & Nguyễn Ngọc Lâm, “Nghiên Cứu Thiết Kế Hệ Thống Giám Sát Trạng Thái Buồn Ngủ Của Lái Xe”, Tạp chí phát triển khoa học & công nghệ: chuyên san khoa học tự nhiên, tập 2, số 6, 2018. [12] Trương Quốc Định & Nguyễn Đăng Quang, “Hệ Thống Phát Hiện Tình Trạng

Ngủ Gật Của Lái Xe”, Tạp chí Khoa học Trường Đại học Cần Thơ, số chuyên đề: Công nghệ Thông tin (2015): 170-167.

62

PHỤ LỤC

# nhap cac goi can thiet

from imutils.video import VideoStream from imutils import face_utils

import imutils import numpy as np import time import dlib import cv2 import pygame def euclidean_dist(ptA, ptB):

# tinh toan va tra ve khoang cach euclide giua 2 diem return np.linalg.norm(ptA - ptB)

def ty_le_mat(eye):

# tinh khoang cach euclide giua cac toa do mat A = euclidean_dist(eye[1], eye[5])

B = euclidean_dist(eye[2], eye[4]) C = euclidean_dist(eye[0], eye[3]) # tinh ty le mat

63 # tra ve ty le mat

return ear

def ty_le_mieng(mouth):

# tinh toan khoang cach enclidean giua cac toa do mieng A = euclidean_dist(mouth[3], mouth[9]) B = euclidean_dist(mouth[2], mouth[10]) C = euclidean_dist(mouth[4], mouth[8]) D = euclidean_dist(mouth[0], mouth[6]) # tinh ty le mieng mar = (A+B+C)/3D # tra ve ty le mieng return mar

# xac dinh 2 hang so,1 cho ty le khung hinh cua mat de chi ra trang # thai nham mat, 1 cho so lan lien tiep cua khung ma mat o duoi # nguong da thiet lap

eye_threshold = 0.25 eye_frame = 10

# tuong tu nhu voi mat yawn_threshold = 0.8 yawn = 8

64 # khoi tao bo dem khung

blink_couter = 0 yawn_couter =0 total_yawn = 0

# load file am thanh canh bao pygame.init()

pygame.mixer.music.load("/home/pi/test/coi.mp3") # khoi tao bo phat hien khuon mat cua opencv (dua tren

# haar casdase) va bo du doan danh dau moc khuon mat cua dlib

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# lay cac chi so cua cac dau moc tren khuon mat cho mat trai # va mat phai

(lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"] # lay cac chi so cua cac dau moc tren khuon mat cho mieng

(mStart, mEnd) = face_utils.FACIAL_LANDMARKS_IDXS["mouth"]

# bat dau thu luong video vs = VideoStream(0).start() time.sleep(1.0)

65 # vong lap qua cac khung hinh tu luong video

while True:

# bat dau doc video frame = vs.read()

frame = imutils.resize(frame, width=450)

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # phat hien khuon mat trong khung anh xam

rects = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)

# vong lap tren phat hien khuon mat for (x, y, w, h) in rects:

rect = dlib.rectangle(int(x), int(y), int(x + w), int(y + h))

# xac dinh cac moc tren khuon mat, sau do chuyen doi cac moc # tren khuon mat toa do (x, y) thanh mot mang numpy

shape = predictor(gray, rect)

shape = face_utils.shape_to_np(shape)

# trich xuat toa do mat trai va mat phai, sau do su dung # toa do de tinh toan ty le co cua mat cho ca hai mat leftEye = shape[lStart:lEnd]

66 leftEAR = ty_le_mat(leftEye)

rightEAR = ty_le_mat(rightEye)

# tinh trung binh ty le co cua mat cho ca hai mat ear = (leftEAR + rightEAR) / 2.0

# tinh toan do loi cua mat trai va mat phai, sau đó # hinh dung tung mat va ve ra

leftEyeHull = cv2.convexHull(leftEye) rightEyeHull = cv2.convexHull(rightEye)

cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1) cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1) # trich xuat toa do vung mieng

mouth= shape[mStart:mEnd] # tinh toan ty le vung mieng mar= ty_le_mieng(mouth) # ve vung mieng

mouthHull = cv2.convexHull(mouth)

cv2.drawContours(frame, [mouthHull], -1, (0, 255, 0), 1)

# kiem tra ti le mat co nam duoi nguong hay khong # neu co thi cong bo dem them 1

if ear < eye_threshold: blink_couter += 1

67 # neu nham mat du so luong khung hinh da dat thi canh bao

if blink_couter >= eye_frame:

cv2.putText(frame, "NGU GAT!", (10, 30),

cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2) pygame.mixer.music.play()

# neu ty le mat khong duoi nguong thi bo dem se bang 0 va # ngung canh bao

else:

blink_couter = 0

pygame.mixer.music.stop()

# kiem tra ty le mieng co tren nguong ngap hay khong # neu co thi cong bo dem them 1

if mar > yawn_threshold: yawn_couter += 1

# neu bo dem lon hon so lan da dat thi tinh la 1 lan ngap # neu so lan ngap tu 2 lan tro len se bat canh bao trong 2s if yawn_couter >= yawn:

cv2.putText(frame, "MAT TAP TRUNG", (10, 30),

cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2) pygame.mixer.music.play()

68 # neu duoi nguong thi set bo dem ve 0

else:

yawn_couter =0

# hien thi cac ty le len khung hinh de tien cho viec kiem tra va sua loi cv2.putText(frame, "EAR: {:.3f}".format(ear), (300, 30),

cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(frame, "MAR: {:.2f}".format(mar), (300, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

# hien thi khung hinh

cv2.imshow("Frame", frame) # nhan "e" de thoat chuong trinh key = cv2.waitKey(10) & 0xFF if key == ord("e"):

break

# ngung thu video va dong tat ca cua so cv2.destroyAllWindows()

Một phần của tài liệu Thiết kế thiết bị phát hiện ngủ gật với raspberry pi (Trang 72 - 80)

Tải bản đầy đủ (PDF)

(80 trang)