Professional Documents
Culture Documents
1
Thực tập xử lý ảnh
Lớp chuyển đổi; 64 nút, kích thước hạt nhân 3
Lớp kết nối đầy đủ; 128 nút
Lớp cuối cùng cũng là lớp được kết nối đầy đủ với 2 nút.Chức năng kích hoạt Relu được sử
dụng trong tất cả các lớp ngoại trừ lớp đầu ra mà chúng ta đã sử dụng Softmax.
4. Điều kiện thực hiện đề tài
Yêu cầu đối với đề tài Python này là cần có một webcam mà qua đó chúng ta sẽ chụp ảnh.
Chúng ta cần cài đặt Python (phiên bản 3.6 được khuyến nghị) trên hệ thống của mình, sau đó
sử dụng pip, chúng ta có thể cài đặt các gói cần thiết sau để thực hiện .
OpenCV - pip cài đặt opencv-python (nhận diện khuôn mặt và mắt).
TensorFlow - pip cài đặt tensorflow (keras sử dụng TensorFlow làm phụ trợ).
Keras - pip cài đặt keras (để xây dựng mô hình phân loại của chúng tôi).
Pygame - pip cài đặt pygame (để phát âm thanh báo động).
2
Thực tập xử lý ảnh
BẮT Đầu
ĐẦU
KẾT
THÚC
3
Thực tập xử lý ảnh
cao, chiều rộng của hộp ranh giới của đối tượng. Bây giờ chúng ta có thể lặp lại các mặt và vẽ
các hộp ranh giới cho mỗi mặt.
Phát hiện các mắt từ ROI và đưa nó vào bộ phân loại
Quy trình tương tự để phát hiện khuôn mặt được sử dụng để phát hiện mắt. Đầu tiên, chúng ta
đặt bộ phân loại tầng cho các mắt lần lượt là leye và reye , sau đó phát hiện các mắt bằng cách
sử dụng left_eye = leye.detectMultiScale (xám).Bây giờ chúng ta chỉ cần trích xuất dữ liệu
đôi mắt từ hình ảnh đầy đủ. Điều này có thể đạt được bằng cách trích xuất hộp ranh giới của
mắt và sau đó chúng ta có thể lấy hình ảnh mắt ra khỏi khung bằng mã này.
l_eye = frame [ y : y + h, x : x + w ]
l_eye chỉ chứa dữ liệu hình ảnh của mắt. Điều này sẽ được đưa vào bộ phân loại CNN của
chúng tôi, công cụ này sẽ dự đoán xem mắt đang mở hay nhắm lại. Tương tự, chúng ta sẽ
trích xuất mắt phải thành r_eye .
Bộ phân loại sẽ phân loại xem mắt đang mở hay nhắm
Chúng ta đang sử dụng công cụ phân loại CNN để dự đoán tình trạng mắt. Để đưa hình ảnh
của chúng vào mô hình, chúng ta cần thực hiện một số thao tác nhất định vì mô hình cần có
kích thước chính xác để bắt đầu. Đầu tiên, chúng ta chuyển đổi hình ảnh màu thành thang độ
xám bằng cách sử dụng r_eye = cv2.cvtColor (r_eye, cv2.COLOR_BGR2GRAY) . Sau đó,
chúng ta thay đổi kích thước hình ảnh thành 24 * 24 pixel vì mô hình của chúng ta đã được
đào tạo về hình ảnh 24 * 24 pixel cv2.resize (r_eye, (24,24)) . Chúng ta chuẩn hóa dữ liệu của
mình để hội tụ tốt hơn r_eye = r_eye / 255 (Tất cả các giá trị sẽ nằm trong khoảng 0-1). Mở
rộng các thứ nguyên để đưa vào trình phân loại. Chúng ta đã tải mô hình của mình bằng cách
sử dụng model = load_model ('models / cnnCat2.h5') . Bây giờ chúng ta dự đoán từng mắt với
mô hình lpred = model.posystem_classes (l_eye) của chúng. Nếu giá trị của lpred [0] = 1, nó
cho biết rằng mắt đang mở, nếu giá trị của lpred [0] = 0 thì nó cho biết rằng mắt đang nhắm.
Tính điểm để kiểm tra xem một người có buồn ngủ hay không
Về cơ bản, điểm số là một giá trị mà chúng ta sẽ sử dụng để xác định xem người đó đã nhắm
mắt trong bao lâu. Vì vậy, nếu nhắm cả hai mắt, chúng ta sẽ tiếp tục tăng điểm và khi mở mắt,
chúng ta sẽ giảm điểm. Chúng ta đang vẽ kết quả trên màn hình bằng cách sử dụng hàm
cv2.putText () sẽ hiển thị trạng thái thời gian thực của người đó.
cv2. putText ( frame, “Open”, ( 10 , height- 20 ) , font, 1 , ( 255 , 255 , 255 ) , 1 , cv2.
LINE_AA )
Một ngưỡng được xác định, chẳng hạn nếu điểm lớn hơn 15, nghĩa là người đó nhắm mắt
trong một khoảng thời gian dài. Đây là lúc chúng ta phát ra tiếng bíp báo thức bằng
sound.play ().
4
Thực tập xử lý ảnh
import cv2
import os
from tensorflow.keras.models import load_model
import numpy as np
from pygame import mixer
import time
mixer.init()
sound = mixer.Sound('sky.wav')
#Phát hiện khuôn mặt trong ảnh và tạo vùng quan tâm (ROI)
#để phát hiện đối tượng lấy hình ảnh màu xám đầu vào.
# ta sẽ sử dụng bộ phân loại tầng hear để phát hiện khuôn mặt.
# Dòng này được sử dụng để đặt bộ phân loại face = cv2.CascadeClassifier
# ('đường dẫn đến tệp xml tầng haar ') .
# Sau đó thực hiện phát hiện bằng cách sử dụng face = face.detectMultiScale (màu xám) .
# Nó trả về một mảng các phát hiện với tọa độ x, y và chiều cao, chiều rộng của hộp ranh giới
của đối tượng.
# Bây giờ chúng ta có thể lặp lại các mặt và vẽ các hộp ranh giới cho mỗi mặt.
5
Thực tập xử lý ảnh
lbl=['Close','Open']
model = load_model('models/cnncat2.h5')
path = os.getcwd()
cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_COMPLEX_SMALL
count=0
score=0
thicc=2
rpred=[99]
lpred=[99]
while(True):
ret, frame = cap.read()
height,width = frame.shape[:2]
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces =
face.detectMultiScale(gray,minNeighbors=5,scaleFactor=1.1,minSize=(25,25))
6
Thực tập xử lý ảnh
left_eye = leye.detectMultiScale(gray)
right_eye = reye.detectMultiScale(gray)
#4Bộ phân loại sẽ phân loại xem mắt đang mở hay nhắm
#em đang sử dụng công cụ phân loại CNN để dự đoán tình trạng mắt.
# Để đưa hình ảnh của em vào mô hình, cần thực hiện một số thao tác nhất định
# vì mô hình cần có kích thước chính xác để bắt đầu. Đầu tiên, em chuyển đổi hình ảnh màu
thành
# thang độ xám bằng cách sử dụng r_eye = cv2.cvtColor (r_eye, cv2.COLOR_BGR2GRAY) .
# Sau đó, em thay đổi kích thước hình ảnh thành 24 * 24 pixel
7
Thực tập xử lý ảnh
l_eye = cv2.cvtColor(l_eye,cv2.COLOR_BGR2GRAY)
l_eye = cv2.resize(l_eye,(24,24))
l_eye= l_eye/255
l_eye=l_eye.reshape(24,24,-1)
l_eye = np.expand_dims(l_eye,axis=0)
lpred = model.predict_classes(l_eye)
if(lpred[0]==1):
lbl='Open'
if(lpred[0]==0):
lbl='Closed'
break
#5__Tính điểm để kiểm tra xem một người có buồn ngủ hay không
# (Về cơ bản, điểm số là một giá trị mà mình sẽ sử dụng để xác định xem người đó đã nhắm
mắt trong bao lâu.
# Vì vậy, nếu nhắm cả hai mắt, chúng ta sẽ tiếp tục tăng điểm và khi mở mắt,
# giảm điểm. em đang vẽ kết quả trên màn hình bằng cách sử dụng hàm
# cv2.putText () sẽ hiển thị trạng thái thời gian thực của người đó)
# if(rpred[0]==1 or lpred[0]==1):
else:
score=score-1
cv2.putText(frame,"Open",(10,height-20), font, 1,(255,255,255),1,cv2.LINE_AA)
if (score < 0):
score = 0
cv2.putText(frame, 'Score:' + str(score), (100, height - 20), font, 1, (255, 255, 255), 1,
cv2.LINE_AA)
if (score > 15):
8
Thực tập xử lý ảnh
# person is feeling sleepy so we beep the alarm
9
Thực tập xử lý ảnh
10
Thực tập xử lý ảnh
11